cerebralfart / laravel-crud-controller
轻松完成CRUD操作
0.3.4
2023-03-17 14:18 UTC
Requires
- php: ^8.0
- laravel/framework: ^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^7.0
README
轻松完成CRUD操作
注册路由
CRUD控制器作为RESTful资源控制器工作,因此您可以使用以下单行代码注册控制器。
Route::resource('/users', UserController::class);
这将注册以下路由
如果您只需要其中一些路由,可以使用 ->only
Route::resource('/users', UserController::class) ->only(['show', 'edit', 'update']);
通用配置
可选配置
禁用身份验证
虽然不推荐,但可以通过将 $authDisabled
属性设置为 true 或传递一个数组来禁用授权,其中包含应禁用的操作。可以在控制器级别通过设置 $authDisabled
属性为 true 或传递一个包含应禁用的操作的数组来实现。
class Controller extends CRUDController { protected bool $authDisabled = true; // OR protected array $authDisabled = ['list', 'show']; }
自定义授权错误消息
CRUDController为所有路由提供了默认错误消息,但如果您想提供更具体的错误,则可以覆盖这些错误。最简单的方法是在控制器上的 $authErrors
属性上执行此操作。
class Controller extends CRUDController { protected array $authErrors = [ 'viewAny' => 'Listing all entities is not allowed.', ]; }
或者,如果您需要更细致地控制显示的错误消息,我们建议在策略类中自定义此操作。
class ObjPolicy implements Policy{ public function viewAny(?User $user){ if ($user === null) return Response::deny("Not logged in"); if ($user->isBanned()) return Response::deny("User is banned"); if ($user->balance < 0) return Response::deny("No balance left"); return Response::allow(); } }
列出模型
过滤
在CRUDController中定义过滤器有两种方式。所有过滤器都定义为函数,但它们的解释取决于允许的参数。可以通过接受一个 Builder
实例来在数据库级别进行过滤,如下面的 filterDraft
。您可以应用任何您想要的 where-clause。或者,您可以在从数据库检索项目后过滤项目,此时您可以像通常一样与您的模型交互。请参阅下面的 filterHot
选项。
要激活一个或多个过滤器,只需将它们的名称传递到请求中的 _filter
属性。控制器可以同时接受多个过滤器,在这种情况下,它们以AND-like方式应用。可以在控制器上的 defaultFilters
属性上定义一组默认过滤器。如果您想反转一个过滤器,例如检索所有非草稿项,则可以在请求中的过滤器名称前加一个感叹号: _filter=!draft
use \Illuminate\Database\Eloquent\Builder; class Controller extends CRUDController { public function filterDraft(Builder $builder): void { $builder->where('draft', true); } public function filterHot(Page $page): void { return $page->comments()->count() > 10; } }