engency / resource-controllers
Laravel的资源控制器
v0.5.5
2024-07-23 12:27 UTC
Requires
- php: ^7.4|^8.0
- engency/eloquent-formatting: ^0.4.1
- engency/laravel-model-validation: ^0.3.1
- illuminate/database: ^8.0|^9.0|^10.0|^11.0
- illuminate/http: ^8.0|^9.0|^10.0|^11.0
- illuminate/routing: ^8.0|^9.0|^10.0|^11.0
- illuminate/view: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- phpunit/phpunit: 9.6.20
- squizlabs/php_codesniffer: 3.10.2
This package is auto-updated.
Last update: 2024-09-27 20:00:25 UTC
README
不要浪费时间在编写Laravel应用的基本CRUD操作。
理念
大多数CRUD操作都非常直接,特别是当符合REST设计时。只要满足一些基本规则,通用的逻辑就可以完成任务。
- 中间件授权用户对资源进行操作
- 控制器确定作用域
- 规则在存储和更新资源之前验证输入
- 规则确保客户端只能接收到授权查看的属性
对于同时具有API和'通用'Web界面的应用程序,理想情况下只需要一个控制器来执行资源的基本CRUD操作。因此,通用的逻辑应该能够以HTML和JSON格式构造响应。
要求
- PHP 7.1+ | PHP 8+
- Laravel框架
安装
composer require engency/laravel-resource-controller
除了这个包之外,还会安装engency/eloquent-formatting和engency/laravel-model-validation包。
用法
最基本的设置可能如下所示;
控制器
use Illuminate\Http\Request; use Engency\Http\Controllers\ResourceController; use Engency\Http\Controllers\DefaultResourceActions; class UserController extends ResourceController { use DefaultResourceActions; /** * Provide the resource class in the parent's constructor. * Add any middleware to authorize users. */ public function __construct() { parent::__construct(User::class); $this->middelware('auth'); } /** * Set the scope for this resource controller. * The expected return value should either be a query builder or a Laravel collection. * * @param Request $request * @return \Illuminate\Database\Query\Builder|\Illuminate\Support\Collection|\Illuminate\Database\Query\Builder */ protected function getScope(Request $request) { return User::query(); } }
模型
use \Illuminate\Database\Eloquent\Model; use \Engency\ModelValidation\Validatable; use Engency\DataStructures\CustomDataFormats; use Engency\DataStructures\ExportsCustomDataFormats; class User extends Model implements ExportsCustomDataFormats { use Validatable; // trait required for laravel-model-validation use CustomDataFormats; // trait required for eloquent-formatting protected $fillable = [ 'name', 'email' ]; /** * Make sure clients only receive data they are authorized for. * Visit complete documentation on custom export formats on; * https://github.com/Engency/eloquent-formatting */ protected $exports = [ 'default' => [ 'name', ], 'complete' => [ 'name', 'email' ] ]; /** * Basic validation for resource attributes. * Visit complete documentation on model validation on; * https://github.com/Engency/laravel-model-validation */ public function rules() : array { return [ 'name' => 'required|string', 'email' => 'required|email' ]; } }
HTML响应
控制器将查找以下视图;
- resource-path/views/pages/resource-name-kebab-case/index.blade.php
- resource-path/views/pages/resource-name-kebab-case/create.blade.php
- resource-path/views/pages/resource-name-kebab-case/show.blade.php
- resource-path/views/pages/resource-name-kebab-case/edit.blade.php
在index.blade.php文件中,默认将存在$items变量。index.blade.php文件可能如下所示;
<ul> @foreach($items as $item) <li>{{ $item->name }}</li> @endforeach </ul>
任何显示资源的页面(显示和编辑)都可以访问资源。变量的名称是资源名称的驼峰命名。例如,'StreetSign'将是'$streetSign'。show.blade.php文件可能如下所示;
<p>You are viewing {{ $user->name }}.</p> <p>The corresponding email address is {{ $user->email }}.</p>
此外,控制器使用特定的错误页面;
- resource-path/views/pages/error/unauthorized.blade.php
- resource-path/views/pages/error/notfound.blade.php
- resource-path/views/pages/error/conflict.blade.php
- resource-path/views/pages/error/forbidden.blade.php
- resource-path/views/pages/error/500.blade.php
JSON响应
索引调用的响应
{ "items": [ {"name": "John"}, {"name": "Doe"} ] }
贡献者
- Frank Kuipers (GitHub)
- 请随时贡献或提交作为问题的功能请求。
许可
此插件受MIT许可的许可。