在Laravel 4中使用https访问route :: resource

时间:2014-01-07 12:02:54

标签: php routing resources laravel

要在命名路由上强制使用HTTPS,Laravel文档会说要执行以下操作:

Route::get('foo', array('https', function()
{
    return 'Must be over HTTPS';
}));

现在,在我的第一个Laravel应用程序中,我一直在使用资源控制器。我不认为我会将它们用于我的第二个应用程序,继续我读过的内容,但现在他们很高兴地坐在我的router.php文件中。

我想强制我的应用的后台部分使用HTTPS。所以,我的开局策略如下:

Route::resource('backoffice', array('https','BackofficeController'));

Laravel不喜欢阵列。

所以,我认为我会尝试使用下一个参数:

Route::resource('backoffice', 'BackofficeController', 'https'));

但是下一个参数需要是一个数组。我没有找到关于此的文档,但我将其转换为数组。它仍然无效。

Route::resource('backoffice', 'BackofficeController', array('https')));

我甚至尝试过:

Route::resource('backoffice', 'BackofficeController', array('https'=>true)));

然而,这也失败了。那么,如何强制资源使用https?

2 个答案:

答案 0 :(得分:2)

Route::filter('forceHttps', function($req){
    if (! Request::secure()) {
        return Redirect::secure(Request::getRequestUri());
    }
});

Route::group(['before' => 'forceHttps'], function(){
    Route::resource('backoffice', 'BackofficeController');
});

答案 1 :(得分:0)

假设你有一个类似于Andreyco建议的过滤功能,看起来很好,你可以做类似的事情:

//Andreyco's filter
Route::filter('forceHttps', function($req){
if (! Request::secure()) {
    return Redirect::secure(Request::getRequestUri());
}
});
//backoffice group routing
Route::group(array('prefix' => 'backoffice', 'before' => 'forceHttps'), function()
{
    Route::any('/',                'App\Controllers\BOindexController@index');
    Route::resource('otherBackOfficeURI', 'App\Controllers\OtherBOController');
    //other routes & controllers here...
});

这样,以site.tld / backoffice开头的所有内容都将通过https过滤器(最常见的是通过isAdmin过滤器),然后检查内部函数路由规则。我认为这会更方便。