cerebralfart/laravel-crud-controller

轻松完成CRUD操作

0.3.4 2023-03-17 14:18 UTC

This package is auto-updated.

Last update: 2024-09-17 17:41:44 UTC


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;
    }
}