miladshm/controller-helpers

该包最新版本(v0.8.21.1)没有可用的许可证信息。

特质中的资源控制器方法

v0.8.21.1 2024-09-29 11:03 UTC

README

安装

  composer require miladshm/controller-helpers

配置

  php artisan vendor:publish --tag controller-helpers-config

使用

API 数据表

use Miladshm\ControllerHelpers\Http\Traits\HasApiDatatable;

class TestController extends Controller
{
    use HasApiDatatable;
    
     /**
     * Specifying the model class to use
     * 
     * @return Model
     */
    private function model(): Model
    {
        return new TestModel;
    }
    
    /**
     * Specifying extra data to send with index response
     * 
     * @param Model|null $item
     * @return array|null
     */
    private function extraData(Model $item = null): ?array
    {
        return [];
    }

    /**
     * Specifying Model relations to load with data
     * @return array
     */
    private function relations(): array
    {
        return [];
    }
}

设置过滤器

use Miladshm\ControllerHelpers\Http\Traits\HasApiDatatable;

class TestController extends Controller
{
    use HasApiDatatable;
    
    ...
    
    /**
    * @param Builder $builder
    * @return Builder|null
    */
    protected function filters(Builder $builder): null|Builder
    {
        return $builder
                    ->when('some_condition',
                        fn(Builder $builder) => $builder->where('field', 'value'))
                    ->when(\request()->filled('status'), function (Builder $builder) {
                        $builder->where('status', \request()->input('status'));
                    })
                    ->where('field2', 'value2'));
    }
    
    ...
}

设置默认排序

use Miladshm\ControllerHelpers\Http\Traits\HasApiDatatable;

class TestController extends Controller
{
    use HasApiDatatable;
    
    /**
     * Order can be either 'asc' or 'desc', default value in 'desc'
     * @return string
     */
    protected function getOrder(): string
    {
        return 'desc'; // value can be 'desc' or 'asc'
    } 
    
    ...
}

设置默认页面长度

use Miladshm\ControllerHelpers\Http\Traits\HasApiDatatable;

class TestController extends Controller
{
    use HasApiDatatable;
    
    /**
     * @return int
     */
    protected function getPageLength(): int
    {
        return 15;
    }
    
    ...
}

设置要包含在响应中的表列

use Miladshm\ControllerHelpers\Http\Traits\HasApiDatatable;

class TestController extends Controller
{
    use HasApiDatatable;
    
    /**
     * @return array|string[]
     */
    public function getColumns(): array
    {
        return ['id', 'code', 'name'];
    }
    
    ...
}

设置列和一级关系到搜索中

use Miladshm\ControllerHelpers\Http\Traits\HasApiDatatable;

class TestController extends Controller
{
    use HasApiDatatable;
    
    /**
     * @return array
     */
    protected function getSearchable(): array
    {
        return ['id', 'code', 'name', 'relation.column']; // You can specify relation columns to search within
    }
    ...
}

设置分页类型

您可以选择索引分页类型,包括默认、简单和游标分页器。

use Miladshm\ControllerHelpers\Http\Traits\HasApiDatatable;

class TestController extends Controller
{
    use HasApiDatatable;
    
    protected function getPaginator(): ?string
    {
        return 'simple'; // value can be [default,simple,cursor]
    }
    
    ...
}