Laravel 如何覆盖背包';谁是用户crudcontroller?
我正在尝试覆盖/扩展Laravel 8中Backpack的默认UserCrudController,以便用我自己的操作替换列表和编辑操作。为此,我尝试:Laravel 如何覆盖背包';谁是用户crudcontroller?,laravel,backpack-for-laravel,Laravel,Backpack For Laravel,我正在尝试覆盖/扩展Laravel 8中Backpack的默认UserCrudController,以便用我自己的操作替换列表和编辑操作。为此,我尝试: php artisan背包:crud用户 但是,除了“show”路由之外,app/Http/Controllers/Admin/UserCrudController.php中的新文件中的代码没有运行-可能是因为use\backack\CRUD\app\Http\Controllers\Operations\ShowOperation不存在于/v
php artisan背包:crud用户
但是,除了“show”路由之外,app/Http/Controllers/Admin/UserCrudController.php中的新文件中的代码没有运行-可能是因为use\backack\CRUD\app\Http\Controllers\Operations\ShowOperation
不存在于/vendor/backpack/permissionmanager/src/app/Http/Controllers/UserCrudController.php
中,而它存在于我的新控制器中
php-artisan-route:list | grep-i用户
告诉我:
| | GET|HEAD | api/user | | Closure | api |
| | POST | user | user.store | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@store | web |
| | GET|HEAD | user | user.index | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@index | web |
| | GET|HEAD | user/create | user.create | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@create | web |
| | POST | user/search | user.search | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@search | web |
| | PUT | user/{id} | user.update | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@update | web |
| | DELETE | user/{id} | user.destroy | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@destroy | web |
| | GET|HEAD | user/{id}/details | user.showDetailsRow | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@showDetailsRow | web |
| | GET|HEAD | user/{id}/edit | user.edit | Backpack\PermissionManager\app\Http\Controllers\UserCrudController@edit | web |
| | GET|HEAD | user/{id}/show | user.show | App\Http\Controllers\Admin\UserCrudController@show | web |
我怎样才能使我的新控制器优先?我的routes/backpack/custom.php
当前内容如下:
Route::group([
'prefix' => config('backpack.base.route_prefix', 'admin'),
'middleware' => array_merge(
(array) config('backpack.base.web_middleware', 'web'),
(array) config('backpack.base.middleware_key', 'admin')
),
'namespace' => 'App\Http\Controllers\Admin',
], function () {
// custom admin routes
Route::crud('user', 'UserCrudController');
}); // this should be the absolute last line of this file
我看不出你的代码有错误。可能是因为路线的装载顺序。基本上我和你做的一样,但是我把crud路由放在routes/backpack/permissionmanager.php
编辑:
我不知道具体的顺序,但是laravel项目中的web.php应该覆盖所有包路由。我希望包之间的顺序是“先进先出”,或者更好的是“后进后出”。因此,最后加载的包应该覆盖前一个包的路由
因为您已经在routes/backpack/custom.php
中定义了路由,所以我假设这些路由属于背包基本包。由于composer在permissionmanager包之前加载了“backpack base”包,因此我希望permissionmanager的路由会使“backpack base”包的路由过载。如果来自不同包的路由相互作用,我认为最后一个包应该由谁负责。通过将我的路由添加到routes/web.php而不是routes/backpack/custom.php解决了这个问题,这使得这个加载在权限包之前,因此优先。我添加的代码改编自custom.php中的代码:
<?php
Route::group([
'prefix' => config('backpack.base.route_prefix', 'admin'),
'namespace' => 'App\Http\Controllers\Admin',
], function () {
// routes to override others from Backpack
Route::crud('user', 'UserCrudController');
});
我知道我比赛迟到了,但我想提供一种不同的方式来使用自定义用户CRUD控制器。我不需要添加或更改任何路线。只需在register()方法下的app/Providers/AppServiceProvider
中添加一行即可
不确定这是更好还是更糟的方法(?)。它只是使我不必更改任何背包路线或指向UserCrudController的其他代码。另外,我在一个地方有我所有的覆盖,所以我不必去寻找不同的文件
不确定是否更好,只是有所不同。嗯。拉雷维尔8号有什么变化吗?是什么决定了路由和控制器的加载顺序,以便我可以尝试反向加载?我也会这样做。我不指望Laravel加载路由文件的顺序,而是使用上面Flo Espen所说的,并有一个routes/backpack/permissionmanager.php
文件。这样你就可以超级肯定只有你想要的路线才能被载入。或者,您可以bing您的控制器来替换它-看看如果您像我之前建议的那样将路由放在routes/backpack/permissionmanager.php中,它会不会工作?
public function register() {
//Bind original crud controller to a custom controller
$this->app->bind(\Backpack\PermissionManager\app\Http\Controllers\UserCrudController::class, \App\Http\Controllers\Admin\UserCrudController::class);
// ...
}