emmanuelpcg / laravel-basics
为 Laravel 提供基本功能包,包括实体 CRUD 操作、图像处理、简单查询等。
v0.5.1
2024-05-07 12:27 UTC
Requires
- php: ^7.4 || ^8.1 || ^8.2
- illuminate/contracts: ^v10.9.0
- illuminate/database: ^v10.9.0
- illuminate/http: ^v10.9.0
- illuminate/pipeline: ^v10.9.0
- intervention/image: ^2.7.2
README
描述
包含 Laravel 基本启动功能的包。
安装
composer require emmanuelpcg/laravel-basics
如果 Builder
创建一个执行条件检查的 eloquent 构建器
在 app/providers/AppServiceProvider.php 中添加
public function register() { BuilderQueries::builderIf(); }
无操作符参数
$cars = Cars::where('color', 'red') ->if(auth()->check(), 'color', 'blue') ->get();
有操作符参数
$cars = Cars::where('color', 'red') ->if(auth()->check(), 'color', '!=', 'red') ->get();
常量
创建具有常量额外功能的对象
class CarTypes extends Constants { const MUSCLE = 1; const SPORT = 2; } CarTypes::getConstants(); /** [ "MUSCLE" => 1, "SPORT" => 2 ] */ CarTypes::getValues(); /** [1, 2] */ CarTypes::toSelectOptions(); /** [ [ 'value' => 1, 'text' => "MUSCLE" ], [ 'value' => 2, 'text' => "SPORT" ] ] */
查询构建器应用过滤器
在管道请求中添加查询过滤器
例如:我有一个 Car 模型,并希望根据颜色属性应用过滤器
创建一个以属性名称命名的类
<?php namespace App\QueryFilters\Cars; use Emmanuelpcg\Basics\QueryFilters\Operators\Equals; class Color extends Equals { }
例如在服务仓储模式中
在你的仓储中,你可以这样做
<?php namespace App\Repositories; use App\Models\Car; use App\QueryFilters\Cars\Color; use Emmanuelpcg\Basics\Repositories\ModelBasic; use Illuminate\Database\Eloquent\Model; class CarsRepository extends ModelBasic { protected function getEntityInstance(): Model { return new Car(); } public function paginated(int $perPage) { return parent::__pipeApplyFilter( [Color::class], $this->getEntityInstance()->query() )->paginate($perPage); } }
现在,如果你通过 GET 请求参数传递颜色,将应用该过滤器。
模型基础示例
<?php namespace App\Repositories; use App\Models\User; use App\Repositories\Contracts\IUserRepository; use Emmanuelpcg\Basics\Repositories\ModelBasic; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Collection; class UserRepository extends ModelBasic implements IUserRepository { protected function getEntityInstance(): Model { return new User(); } public function getByEmail(string $email): ?User { return parent::__byColumn('email', $email); } public function getByKey(int $id): ?User { return parent::__byKey($id); } public function create(array $data): ?User { return parent::__create($data); } public function update(int $id, array $data): ?User { return parent::__updateByKey($id, $data); } // if isset $data['id'] is update if not, is create public function save(array $data): ?User { return parent::__save($data); } public function get(): ?Collection { return parent::__all(); } public function getWhereActive(): ?Collection { return parent::__allWhere('active', 1); } public function delete(int $id): bool { return parent::__delete($id); } public function getPrimaryKeyName(): string { return parent::__getEntityKeyName(); } }
图像处理
<?php namespace App\Http\Controllers; use Emmanuelpcg\Basics\ImageManipulation\ImageManipulation; use Illuminate\Http\Request; use Exception; class UploadsController extends Controller { use ImageManipulation; public function upload(Request $request) { try { return $this->resizeAndSaveImage( 'avatar', // name of field 'avatars', // name of disk 300, // width 300, // height 'user-upload', // new name of image, will be concatenated with timestamp 'png' // format to save ); } catch (Exception $exception) { return abort(400, $exception->getMessage()); } } }