gpapakitsos / laravel-traits
一些有用的 Laravel 模型/控制器特性集合
Requires
- php: >=7.4
- illuminate/database: >=8.0
- illuminate/http: >=8.0
- illuminate/routing: >=8.0
- illuminate/support: >=8.0
- nesbot/carbon: ^2.62
Requires (Dev)
- laravel/pint: ^1.0
- orchestra/testbench: >=6.0
This package is auto-updated.
Last update: 2024-09-14 14:19:28 UTC
README
一些有用的 Laravel 模型 & 控制器特性集合。
要求
安装
您可以通过 composer 安装此包
composer require gpapakitsos/laravel-traits
服务提供程序将自动注册。您可以选择手动在您的 config/app.php
文件中添加服务提供程序
'providers' => [ // ... GPapakitsos\LaravelTraits\TraitsServiceProvider::class, ];
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="GPapakitsos\LaravelTraits\TraitsServiceProvider"
TimestampsAccessor 特性
将模型的 created_at
和 updated_at
属性转换为在您的 config/laraveltraits.php
文件中配置的格式。
要在一个模型上启用此功能,您必须使用 GPapakitsos\LaravelTraits\TimestampsAccessor
特性。
ModelActive 特性
一些有用的方法和作用域来处理模型的 active
或 inactive
状态。您可以在 config/laraveltraits.php
文件中配置模型的 "active" 属性。
要在一个模型上启用此功能,您必须使用 GPapakitsos\LaravelTraits\ModelActive
特性。
可用方法
/** * Checks if model’s state is active * * @return bool */ $model->isActive();
/** * Returns the title of model’s state * * @return string */ $model->getActiveTitle();
可用作用域
/** * Scope a query to only include active models * * @param \Illuminate\Database\Eloquent\Builder $query * @return void */ $model->active()->get();
/** * Scope a query to only include inactive models * * @param \Illuminate\Database\Eloquent\Builder $query * @return void */ $model->notActive()->get();
ModelOrdering 特性
一些有用的方法来处理模型的 ordering
功能。您可以在 config/laraveltraits.php
文件中配置模型的 "ordering" 属性。
要在一个模型上启用此功能,您必须使用 GPapakitsos\LaravelTraits\ModelOrdering
特性。
可用方法
/** * Returns next available ordering value * * @param array $fieldsAndValues * @return int * * @throws ErrorException */ $model::getNewOrdering(); // or $model::getNewOrdering(['category' => 1]);
/** * Resets ordering * * @param array $fieldsAndValues * @return void * * @throws ErrorException */ $model::resetOrdering(); // or $model::resetOrdering(['category' => 1]);
ModelFile 特性
一些有用的方法来处理模型上的文件上传;例如用户的头像。
要在一个模型上启用此功能,您必须使用 GPapakitsos\LaravelTraits\ModelFile
特性,并且您必须定义以下常量
<?php namespace App\Models; use GPapakitsos\LaravelTraits\ModelFile; use Illuminate\Database\Eloquent\Model; class User extends Model { use ModelFile; const FILE_MODEL_ATTRIBUTE = 'avatar'; // The model’s attribute name const FILE_INPUT_FIELD = 'avatar_input'; // The form’s input field name const FILE_FOLDER = 'avatars'; // The folder name of the storage disk const FILE_STORAGE_DISK = 'local'; // The storage disk const FILE_DEFAULT_ASSET_URL = 'avatars/default.png'; // The default asset if file does not exist }
可用方法
/** * Stores file if exists & adds the path of the uploaded file into request object * * @param \Illuminate\Http\Request $request * @return void * * @throws ErrorException|\Illuminate\Validation\ValidationException */ $user::storeFile($request);
/** * Deletes model’s file if exists * * @return void */ $user->deleteFile();
/** * Removes the previous file if exists & stores the new one * * @param \Illuminate\Http\Request $request * @return void * * @throws ErrorException|\Illuminate\Validation\ValidationException */ $user::changeFile($request);
/** * Returns file’s URL * * @return string|null */ $user->getFileURL();
/** * Returns file’s path * * @return string|null */ $user->getFilePath();
CRUDController 特性
一个有用的特性,用于在控制器中处理模型的 CRUD 功能。
要在一个控制器上启用此功能,您必须使用 GPapakitsos\LaravelTraits\CRUDController
特性,并且您必须在您的控制器中定义 request
和 model
属性
<?php namespace App\Http\Controllers; use App\Models\User; use GPapakitsos\LaravelTraits\CRUDController; use Illuminate\Http\Request; class UsersController extends Controller { use CRUDController; protected $request; protected $model; // You can set the property $returnModelsFromCRUD as `true` if you would like the methods `doAdd` & `doEdit` to return the model // protected $returnModelsFromCRUD = true; public function __construct(Request $request, User $model) { $this->request = $request; $this->model = $model; } }
之后,您必须在您的 routes/web.php
文件中定义控制器的路由
Route::prefix('users')->group(function () { Route::get('get-resource/{id?}', 'UsersController@getResource'); Route::post('add', 'UsersController@doAdd'); Route::post('edit', 'UsersController@doEdit'); Route::post('delete', 'UsersController@doDelete'); });
最后,您必须定义模型的 fillable
属性和验证规则
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * The attributes that are mass assignable * * @var array */ protected $fillable = ['name', 'email', 'password']; /** * Validation rules of the model * * @var array */ public $validations = [ 'add' => [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:8|max:30', ], 'edit' => [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users,email', 'password' => 'nullable|min:8|max:30', ], // or you can set only the array with key `all`, if the rules are the same between `add` & `edit` // 'all' => [ // 'name' => 'required|max:255', // 'email' => 'required|email|max:255', // 'password' => 'required|min:8|max:30', // ], ]; }
可用控制器方法
/** * Returns model’s JSON response by provided id * * @return \Illuminate\Http\JsonResponse * * @throws ErrorException|\Illuminate\Database\Eloquent\ModelNotFoundException */ getResource();
/** * Creates a new model if the request is valid * * @return \Illuminate\Http\JsonResponse|\Illuminate\Database\Eloquent\Model * * @throws ErrorException|\Illuminate\Validation\ValidationException */ doAdd();
/** * Updates the model if the request is valid * * @return \Illuminate\Http\JsonResponse|\Illuminate\Database\Eloquent\Model * * @throws ErrorException|\Illuminate\Validation\ValidationException|\Illuminate\Database\Eloquent\ModelNotFoundException */ doEdit();
/** * Deletes a model * * @return \Illuminate\Http\JsonResponse * * @throws ErrorException|\Illuminate\Database\Eloquent\ModelNotFoundException */ doDelete();