身份验证之前设置的路由资源在 Laravel 4 中不起作用
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17438599/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Route resources set before auth not working in Laravel 4
提问by Shiro
I added this in routes.php, expected it will check the authentication session for the page, however it is not working.
我在routes.php 中添加了这个,期望它会检查页面的身份验证会话,但是它不起作用。
Route::resource('ticket', 'TicketController', array('before' => 'auth') );
Then I go to the controller, work in another way. It's work.
然后我转到控制器,以另一种方式工作。这是工作。
class TicketController extends BaseController {
public function __construct()
{
$this->beforeFilter('auth');
}
May I know where can get more documentation regarding the Route::resource(), what type of argument it able to accept?
我可以知道在哪里可以获得更多关于 Route::resource() 的文档,它可以接受什么类型的参数?
回答by Shiro
OK... I found the answer.
好的...我找到了答案。
in
在
\vendor\laravel\framework\src\Illuminate\Routing\Router.php
\vendor\laravel\framework\src\Illuminate\Routing\Router.php
public function resource($resource, $controller, array $options = array())
{
// If the resource name contains a slash, we will assume the developer wishes to
// register these resource routes with a prefix so we will set that up out of
// the box so they don't have to mess with it. Otherwise, we will continue.
if (str_contains($resource, '/'))
{
$this->prefixedResource($resource, $controller, $options);
return;
}
// We need to extract the base resource from the resource name. Nested resources
// are supported in the framework, but we need to know what name to use for a
// place-holder on the route wildcards, which should be the base resources.
$base = $this->getBaseResource($resource);
$defaults = $this->resourceDefaults;
foreach ($this->getResourceMethods($defaults, $options) as $method)
{
$this->{'addResource'.ucfirst($method)}($resource, $base, $controller);
}
}
protected function getResourceMethods($defaults, $options)
{
if (isset($options['only']))
{
return array_intersect($defaults, $options['only']);
}
elseif (isset($options['except']))
{
return array_diff($defaults, $options['except']);
}
return $defaults;
}
as you can see, it only accept only
and except
arguement only.
如您所见,它只接受only
和except
争论。
If you want to archive the same result in route.php, it can be done as below
如果你想在 route.php 中存档相同的结果,可以如下完成
Route::group(array('before'=>'auth'), function() {
Route::resource('ticket', 'TicketController');
});