我正在尝试在Laravel 8中覆盖/扩展Backpack的默认UserCrudController,这样我就可以用自己的操作替换列表和编辑操作。为了做到这一点,我尝试:
php artisan backpack:crud User
然而,app/Http/Controllers/Admin/UserCrudController.php
中新文件中的代码没有运行,除了“显示”路由--大概是因为use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
不存在于/vendor/backpack/permissionmanager/src/app/Http/Controllers/UserCrudController.php
中,而它存在于我的新控制器中。
php artisan route:list | grep -i user
告诉我以下内容:
| | 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
发布于 2020-10-09 03:54:03
我看不出你的代码有什么错误。可能是由于路由加载的顺序所致。基本上我和您做了同样的事情,但是我把crud路由放在了routes/backpack/permissionmanager.php
中
编辑:
不知道确切的顺序,但是来自您的laravel项目的web.php应该覆盖所有的包路由。我希望包之间的顺序是“先入先出”,或者更好的是“后进,最后出”。因此,最后加载的包应该覆盖前一个包的路由。
由于您已经在routes/backpack/custom.php
中定义了路由,因此我假设这些路由属于backpack基础包。由于composer在permissionmanager包之前加载了"backpack base“包,我希望来自permissionmanager的路由会重载来自"backpack base”包的路由。如果来自不同套餐的路由相互影响,则应由最后到达的套餐负责。
发布于 2020-10-09 17:46:50
通过将我的路由添加到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');
});
发布于 2021-03-27 06:03:22
我知道我来晚了,但我想提供一种不同的方式来使用自定义用户CRUD控制器。我不需要添加或更改任何路由。只需在app/Providers/AppServiceProvider
()方法下添加一行即可。
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);
// ...
}
不确定这是一种更好还是更糟糕的方法(?)。这样我就不需要更改任何背包路线或其他指向UserCrudController的代码。另外,我把我所有的重写都放在一个地方,这样我就不必在不同的文件中寻找。
不确定是不是更好,只是不同而已。
https://stackoverflow.com/questions/64268115
复制相似问题