首页 > 解决方案 > Laravel - 某些路线中的模型策略不起作用

问题描述

在修订工作中 - Laravel 5.8 - 我面临着一个奇怪的行为:

应用 » 政策 » 客户政策

public function create(User $user )
{
    dd($user);  //  for debugging purposes          
}
... 
public function update(User $user, Customer $customer)
{
    dd($customer);  //  for debugging purposes      
}
...

注册策略
应用 » 提供者 » AuthServiceProvider

protected $policies = [
    Customer::class => CustomerPolicy::class,
    // TRIED ALSO:   'App\Customer' => 'App\Policies\CustomerPolicy',
];

路线 » 网络

Route::get( 'customers/create', 'CustomerController@create')->name( 'customers.create' )->middleware( 'can:create,customer' );
...
Route::get( 'customers/{customer}/edit', 'CustomerController@edit' )->name( 'customers.edit' )->middleware( 'can:update,customer' );   
Route::patch( 'customers/{customer}', 'CustomerController@update')->name( 'customers.update' )->middleware( 'can:update,customer' ); 

奇怪的是:上面的第一条路线 - 'customers/create' - 不起作用,试图访问页面得到 403 / 禁止代码。但其他两个 - 'customers.edit'、'customers.update' - 工作正常!!?!。

标签: laravel-5routeslaravel-middlewarepolicies

解决方案


我让它工作了,但我仍然想知道为什么不使用简化的类名。

Route::get( 'customers/create', 'CustomerController@create')->name( 'customers.create' )->middleware( 'can:create,App\Customer' );

推荐阅读