mhamzeh / presenter-filter
Requires
- php: ^7.3
This package is auto-updated.
Last update: 2024-09-16 20:46:58 UTC
README
介绍
该包允许你创建两种类型的类:过滤器类和展示者类
过滤器
此包允许你通过查询字符串轻松处理数据库过滤。
示例:/users?status=1&name='kami'
展示者
有时我们的模型会变得过于庞大,这会使我们的开发变得非常困难。在这种情况下,我们使用一个具有相同功能并且作为第二个模型使用的第二个类,并将Harrow方法包含在这个类中。
安装
您可以通过Composer安装此包。
composer require mhamzeh/presenter-filter
您必须通过以下Artisan命令发布配置:php artisan vendor:publish
。
使用方法
您可以使用两个命令,并使用它们来创建自己的过滤器和展示者类
make:filter命令
您可以使用以下命令创建新的过滤器。
php artisan make:filter UserFilter
这将创建一个新的过滤器,位于app/Filters目录下。
选项
1-您可以将模型添加到命令中
php artisan make:filter UserFilter --model=User
默认使用模型文件夹,如果您在其他位置保存了模型,请更改此文件夹的config Modules
make:presenter命令
您可以使用以下命令创建新的展示者
php artisan make:presenter UserPresenter
选项
1-您可以将模型添加到命令中
php artisan make:presenter UserPresenter --model=User
带有过滤器的示例
假设您想在User模型上使用filterable。您需要创建过滤器类App/Filters/PostFilter.php(《php artisan make:filter PostFilter --model=Post》)
如果您使用--model选项,filterable将直接添加到模型中
<?php namespace App\Filters; use mhamzeh\packageFp\Filters\contracts\QueryFilter; class UserFilter extends QueryFilter { public function name($value){ return $this->builder->where('name','LIKE',"%$value%"); } }
现在,如果您没有使用--model选项,您需要将局部作用域添加到您的模型中
use mhamzeh\packageFp\Filters\contracts\Filterable; ... class User extends Model { use Filterable; ... }
最后,像这样在控制器中调用作用域
use App\Filters\UserFilter; ... public function index() { return User::filters(new UserFilter())->paginate(); }
带有展示者的示例
假设您想在User模型上使用Presentable并引入展示者类。您需要创建展示者类App/Presenter/UserPresenter.php(《php artisan make:presenter UserPresenter --model=User》)
如果您使用--model选项,Presentable和展示者类将直接添加到模型中
<?php namespace App\Presenter; use mhamzeh\packageFp\Presenter\Contracts\Presenter; class UserPresenter extends Presenter { public function full_name(){ return $this->entity->name ." ".$this->entity->full_name; } }
现在,如果您没有使用--model选项,您需要将局部作用域添加到您的模型中
use mhamzeh\packageFp\Presenter\Contracts\Presentable; ... class User extends Model { use Presentable; protected $presenter = UserPresenter::class; ... }
最后,您可以在Blade或API资源或控制器中使用此方法,例如Blade
@foreach($users as $user) <div> <p>fullname : $user->present()->full_name </p> </div> @endforeach
在Api Resources中
class UserResource extends JsonResource { /** * Transform the resource into an array. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'id'=>$this->id, 'full_name'=> $this->present()->full_name, 'email'=>$this->email ]; } }