php – Laravel从私有方法重定向有错误
发布时间:2021-08-28 03:44:05 所属栏目:大数据 来源: https://www.jb51.cc
导读:@H_301_0@我有以下代码: @H_301_0@ @H_502_5@public function store(Request $request){ $this-validateData($request-all()); // store something return redirect()-action('controller@index')-withMessage( 'Saved Successfully' );}private function va
@H_301_0@我有以下代码:
@H_301_0@
@H_502_5@public function store(Request $request)
{
$this->validateData($request->all());
// store something
return redirect()->action('controller@index')->withMessage( 'Saved Successfully' );
}
private function validateData($requestParams)
{
try
{
$validator->validate( $requestParams );
}
catch ( ValidationException $e )
{
redirect()->action('controller@create')->withInput()->withErrors( $e->get_errors() )->send();
exit(); // this causes the withErrors to not be there
}
}
@H_301_0@如果我删除exit();,将出现错误消息,但也将执行存储函数(请参阅//存储某些内容).我知道我可以重写我的代码:
@H_301_0@
@H_502_5@if($this->validateData($request->all()))
{
// store something
return redirect()->action('controller@index')->withMessage( 'Saved Successfully' );
}
@H_301_0@但我不希望这里有丑陋的if语句.必须有一种方法可以在没有闪存消息的情况下重定向.解决方法: @H_301_0@TL;博士 @H_301_0@像这样更新你的私有方法代码,使重定向工作与$errors变量可见: @H_301_0@@H_502_5@private function validateData($requestParams)
{
try
{
$validator->validate( $requestParams );
}
catch ( ValidationException $e )
{
$resp = redirect()->action('WelcomeController@index')->withInput()->withErrors($e->get_errors());
Session::driver()->save();
$resp->send();
exit();
}
}
@H_301_0@交代
@H_301_0@当退出控制器中间时,在应用程序终止中执行的某些作业将不再执行.在您的情况下,将不会调用会话中间件终止方法.让我们看看它的内容(ref):
@H_301_0@
@H_502_5@public function terminate($request, $response)
{
if ($this->sessionHandled && $this->sessionConfigured() && ! $this->usingCookieSessions())
{
$this->manager->driver()->save();
}
}
@H_301_0@现在,看看Session驱动程序的save方法(ref)
@H_301_0@
@H_502_5@public function save()
{
$this->addBagDataToSession();
$this->ageFlashData();
$this->handler->write($this->getId(), $this->prepareForStorage(serialize($this->attributes)));
$this->started = false;
}
@H_301_0@如您所见,只有在Session中间件成功终止时才会保存您的Flash数据.使用旧代码,闪存数据将丢失!
@H_301_0@我对我的代码所做的是在将响应发送到浏览器之前手动调用save方法.但是,我仍然建议您将重定向带到公共控制器方法. (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
