Laravel 4 Laravel return Redirect::不在操作外部工作
如果我把重定向放在动作之外,我会发现一个奇怪的重定向不起作用。例如: 下面的代码正在运行Laravel 4 Laravel return Redirect::不在操作外部工作,laravel-4,Laravel 4,如果我把重定向放在动作之外,我会发现一个奇怪的重定向不起作用。例如: 下面的代码正在运行 Route::get('/', 'HomeController@index'); public function index() { if (Auth::check()) { $this->user_id = Auth::id(); } else { return Redirect::to('/'); } //
Route::get('/', 'HomeController@index');
public function index()
{
if (Auth::check())
{
$this->user_id = Auth::id();
}
else
{
return Redirect::to('/');
}
// code after check
}
但是如果我像下面那样取出它,重定向将不起作用。它根本不会重定向
Route::get('/', 'HomeController@index');
public function index()
{
$this->authorize();
// code after check
}
private function authorize()
{
if (Auth::check())
{
$this->user_id = Auth::id();
}
else
{
return Redirect::to('/');
}
}
现在,如果我必须在每一个动作中都使用if语句,那将很麻烦。相反,我只需要调用$this->authorize()
知道它为什么不起作用吗?您没有返回“return Redirect::to('/');”的结果 试试这个:
public function index()
{
return $this->authorize();
}
只是一个额外的。如果我使用我的问题的想法,这似乎是一种不好的方式。Laravel实际上提供了路由保护。因此,现在我通过以下步骤更改代码: 在app/filter.php中,更改要重定向到的路由
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::guest('/');
});
在路线保护中,请使用以下代码:
路由::获取('/','HomeController@index');
删除BlablaController上的授权功能
在索引函数上,按如下方式更改:
public function index()
{
$this->user_id = Auth::id();
// code after check
}
现在,如果未经身份验证,它将自动重定向到“/”是。身份验证过滤器是实现身份验证的最佳方式 此外,如果使用“Route:when”设置过滤器,则可以使routes.php更易于阅读,如下所示:
Route::when('path/*', 'auth');
有了它,您可以最大限度地减少在路由语句中写入数组('before'=>'auth')。upps,它实际上与您的解决方案一起工作。谢谢
Route::when('path/*', 'auth');