agifsofyan / noto
这是一个插件/包,用于从 Octobercms 文件系统工作于 Laravel。如果您有两个项目(Laravel 和 Octobercms)使用同一个数据库,这个插件将非常有用。
1.1.5
2023-04-03 05:13 UTC
Requires
- intervention/image: ^2.7
README
Noto 是一个旨在帮助同步 OCTOBERCMS 和 LARAVEL 之间文件系统的包。通过遵循 OCTOBERCMS 文件系统流程。该包包括
- 文件关系
- 使用系统_files 表
- 命名文件的路径/磁盘名称
- 为 OCTOBERCMS 模型的关系模型命名
需求
- PHP 8.0.28
- LARAVEL 框架 9.52.5
依赖
- intervention/image
安装
运行 composer require agifsofyan/noto
配置
运行 php artisan vendor:publish --provider="Agifsofyan\Noto\Providers\NotoServiceProvider"
将创建
-
在 config 文件夹中创建配置文件
noto.php
。<?php return [ 'model_path' => 'App\Models', 'file_table' => 'system_files', 'model_sync' => [ 'User' => 'RainLab\User\Models\User' ], 'extention' => ['jpg', 'jpeg', 'png', 'gif', 'docx', 'xlsx', 'svg', 'pdf'] ];
model_path
是所使用的 LARAVEL 模型的路径file_table
是要使用的文件的数据库表名。OCTOBERCMS 的默认值为 system_files。model_sync
是注册的模型。这是必需的。- model_sync 的索引(左侧)是您的 LARAVEL 项目的模型名称。
- model_sync 的值(右侧)是您的 OCTOBERCMS 项目的模型名称。
-
在 database/migrations 文件夹中的迁移文件
2023_01_31_000001_Db_System_Files.php
。运行
php artisan migrate
使用
-
在您的模型中将
use Agifsofyan\Noto\Traits\NotoMorph;
作为特质添加。示例
<?php namespace App\Models; use Agifsofyan\Noto\Traits\NotoMorph; class User { use NotoMorph;
-
如果只有一个上传文件,在您的模型中使用
morphOneNoto
添加文件关系。示例
public function avatar() { return $this->morphOneNoto('avatar'); }
-
如果多个上传文件,在您的模型中使用
morphManyNoto
添加文件关系。示例
public function avatars() { return $this->morphManyNoto('avatars'); }
-
要保存文件,请在模型数据保存/更新后从您的控制器中调用此操作:示例
$user->create($data); // To create new data or $user->save(); // To create new data or update the data $field = 'avatar'; $fields = 'avatars'; if($request->hasFile($field) && $request->file($field)->isValid()){ $user->saveOneFile($request->file($field), $field, $user->id); } if($request->hasFile($fields) && $request->file($fields)->isValid()){ $user->saveManyFile($request->file($fields), $fields, $user->id); }
您的模型中的
$user
,其中注册了morphOneNoto
或morphManyNoto
关系。如果更新数据,使用
$user->save()
而不要使用$user->update()
。 -
调用文件 URL
调用缩略图文件
$user?->avatar()?->getThumb(150, 150)
调用原始文件
$user?->avatar()?->getPath()