我的问题是:
通过ArticlesController@index
功能进行调用的博客主页
通过ArticlesController@show
函数调用的各个博客帖子页面和
评论表格将嵌入到将发布到blog/{blog}/comment
并将调用CommentsController@store
方法
我在routes.php
文件中定义了以下关注路径:
Route::resource ('blog', 'ArticlesController');
Route::resource ('blog/{blog}/comment', 'CommentsController');
ArticlesController
设置为除auth
和index()
以外的所有功能调用show($id)
中间件:
public function __construct()
{
$this->middleware('auth', ['except' => 'index', 'show']);
}
当我尝试访问单个博客帖子页面而没有评论表单时,它按预期工作,并允许我访问主页和单个帖子页面而无需身份验证。
当我将评论表单嵌入到各个帖子页面时,它允许我访问主页,但要求我在访问各个帖子页面之前进行身份验证。
即使我的CommentsController
是一个单独的实体并且它没有调用auth
中间件,有人能告诉我它为什么会这样吗?
答案 0 :(得分:2)
except
参数应该是一个数组
public function __construct()
{
$this->middleware('auth', ['except' => ['index', 'show']]);
}
每条评论更新
如果您正在寻找数组,请查看code中间件方法。
/**
* Register middleware on the controller.
*
* @param string $middleware
* @param array $options
* @return void
*/
public function middleware($middleware, array $options = [])
{
$this->middleware[$middleware] = $options;
}
至于为何之前有效,谁知道呢。我想,在Laravel将字符串转换为数组的方法链中的某个点,这就是它工作的原因。
您可能需要考虑为控制器编写test。这样你就不会依赖它的工作方式。你知道它的工作方式与你的预期相符,你所做的一切都不会改变预期的结果。