Skip to content

资源

我们把一个后台控制器加对应的路由、权限统称为资源,资源其实是一种简化定义的手段,避免配置过于繁琐。

初始化

使用资源,在应用入口文件 App.php 中的 init 方法进行初始化,如下:

php

$app->getResource()->set(
    "admin",       // 资源名
    (new DuxResource(
        'admin',   // 路由、权限应用名
        '/admin'   // 路由前缀
    ))
    ->addAuthMiddleware(
        new PermissionMiddleware("admin", SystemUser::class),  // 权限检测中间件
        new AuthMiddleware("admin")  // 鉴权中间件
    )
);

$app->getResource()->set(
    "admin",       // 资源名
    (new DuxResource(
        'admin',   // 路由、权限应用名
        '/admin'   // 路由前缀
    ))
    ->addAuthMiddleware(
        new PermissionMiddleware("admin", SystemUser::class),  // 权限检测中间件
        new AuthMiddleware("admin")  // 鉴权中间件
    )
);

初始化资源后您可以通过路由、权限的获取方法来根据应用名来获取对应的类来进行后续操作。

资源控制器

框架为了简化后台的增删差改等操作,将这些操作进行了封装。

只需要继承 Dux\Resources\Action\Resources 类并设置注解路由,则自动实现相关的增删差改的 api 方法给前端使用,并生成对应的权限列表供权限限制使用。

同时可以继承父类方法来实现字段转换、过滤、验证等操作,具体请查看具体代码注释。

php
<?php

declare(strict_types=1);

namespace App\Content\Admin;

use Dux\Resources\Action\Resources;

#[Resource(app: 'admin',  route: '/content/page', name: 'content.page')]
class Page extends Resources
{
	protected string $model = \App\Content\Models\Page::class;

    public function transform(object $item): array
    {
        return [
            "id" => $item->id,
        ];
    }

    // 自定义动作路由
    #[Action(methods: 'POST', route: '/custom')]
    public function list(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface
    {
        return send($response, 'ok');
    }

}
<?php

declare(strict_types=1);

namespace App\Content\Admin;

use Dux\Resources\Action\Resources;

#[Resource(app: 'admin',  route: '/content/page', name: 'content.page')]
class Page extends Resources
{
	protected string $model = \App\Content\Models\Page::class;

    public function transform(object $item): array
    {
        return [
            "id" => $item->id,
        ];
    }

    // 自定义动作路由
    #[Action(methods: 'POST', route: '/custom')]
    public function list(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface
    {
        return send($response, 'ok');
    }

}

Released under the MIT License.