tomatophp/laravel-tomato

由 TomatoPHP 构建的 Laravel 基础助手,用于请求和控制器

v1.0.0 2024-03-10 15:17 UTC

This package is auto-updated.

Last update: 2024-09-10 16:18:56 UTC


README

Screenshot

Laravel Tomato

由 TomatoPHP 构建的 Laravel 基础助手,用于请求和控制器

安装

composer require tomatophp/laravel-tomato

功能

  • Tomato::menu() 在您的应用程序中注入和处理菜单
  • Tomato::widget() 在您的应用程序中注入和处理小部件
  • Tomato::slot() 在您的应用程序中注入和处理插槽
  • Tomato::request() 处理和验证请求
  • Tomato::response() 处理 API 响应

用法

您可以通过 Facade 类或使用助手函数来使用这些助手

use TomatoPHP\LaravelTomato\Facades\Tomato::register();

或只是

tomato()::register();

注册组件

您可以在服务提供者的 boot() 方法中注册您的菜单、小部件或插槽

Tomato::register([
    Menu::make()
        ->group(__('CRM'))
        ->label(__('Name'))
        ->route('home')
        ->icon('home'),
    Widget::make()
        ->group(__('CRM'))
        ->label(__('Name'))
        ->counter(100)
        ->icon("bx bx-user"),
    Slot::make()
        ->position(Positions::dashboardTop)
        ->view('dashboard-top'),
]);

您可以注册任何类型的组件,我们将为您检查和处理它

所有组件都有可宏化的方法,可以添加更多功能。

获取组件

您可以像这样获取您的组件

Tomato::menu()->get();
Tomato::widget()->get();
Tomato::slot()->get();

它将返回一个注册组件的数组供您使用

请求

您可以使用请求助手来处理和验证您的请求,如下所示

return Tomato::request()->index(
   request: request(),
   model: App\Models\User::class,
);

🔁 索引请求

此方法根据请求类型返回视图或 JsonResponse,我们通过检查路由是否有 auth:sanctum 中间件来获取请求类型。

此方法接受一些参数

  • request 请求对象
  • model 您要获取的模型
  • view 您要返回的视图
  • table 您要使用的表格类
  • data 您要传递给视图的数据
  • api 如果您想返回 JsonResponse
  • resource 资源类,用于资源化返回的数据
  • query 如果您想向模型添加一些查询
  • filters 如果您想向表格添加一些过滤器
public function index(Request $request): View|JsonResponse
{
    return Tomato::index(
        request: $request, //Required
        model: $this->model, //Required
        view: 'users.index', 
        table: \App\Tables\UserTable::class,
        data: [
            'name' => 'john doe',
        ],
        api: true,
        resource: UserResource::class,
        query: User::query()->where('is_activated',true),
        filters: [
            'is_activated',
        ],
    );
}

🔁 JSON 请求

此方法仅返回模型的 json 响应,以便更容易使用 x-splade-selectx-tomato-admin-select 访问它

此方法接受一些参数

  • request 请求对象
  • model 您要获取的模型
  • data 您要传递给视图的数据
  • paginate 如果您想分页响应
  • query 如果您想向模型添加一些查询
  • filters 如果您想向表格添加一些过滤器
public function api(Request $request): JsonResponse
{
    return Tomato::json(
        request: $request, //Required
        model: \App\Models\User::class, //Required
        data: [
            'name' => 'john doe',
        ],
        paginate: 10,
        query: User::query()->where('is_activated',true),
        filters: [
            'is_activated',
        ],
    );
}

🔁 获取请求

此方法根据请求类型返回视图或 JsonResponse,我们通过检查路由是否有 auth:sanctum 中间件来获取请求类型。

此方法接受一些参数

  • model 您要获取的模型
  • view 您要返回的视图
  • data 您要传递给视图的数据
  • hasMedia 如果您想获取模型的媒体
  • collection [array] 您要获取的媒体集合作为数组,如果是多选则取 true,如果是单选则取 false
  • attach [array] 将一些数据附加到模型上
  • api 如果您想返回 JsonResponse
  • resource 资源类,用于资源化返回的数据
  • query 如果您想向模型添加一些查询
public function show(\App\Models\User $model): View|JsonResponse
{
    return Tomato::get(
        model: $model, //Required
        view: 'users.show', //Required
        data: [
            'name' => 'john doe',
        ],
        hasMedia: true,
        collection: [
            'avatar' => false,
            'gallery' => true
        ],
        attach: [
            'roles' => $model->roles,
        ],
        api: true,
        resource: UserResource::class,
        query: User::query()->where('is_activated',true)
    );
}

🔁 存储请求

此方法根据请求类型返回 RedirectResponse 或 JsonResponse,我们通过检查路由是否有 auth:sanctum 中间件来获取请求类型。

此方法接受一些参数

  • request 请求对象
  • model 您要获取的模型
  • validation 您想使用的验证规则
  • message 您想与响应一起返回的消息
  • validationError 如果验证失败,您想返回的消息
  • redirect 您想重定向到的路由
  • hasMedia 如果您想获取模型的媒体
  • collection [array] 您要获取的媒体集合作为数组,如果是多选则取 true,如果是单选则取 false
  • api 如果您想返回 JsonResponse
public function store(Request $request): RedirectResponse|JsonResponse
{
    $response = Tomato::store(
        request: $request, //Required
        model: \App\Models\User::class, //Required
        validation: [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
        ],
        message: __('User created successfully'),
        validationError: __('Error When Try To Store User'),
        redirect: 'admin.users.index',
        hasMedia: true,
        collection: [
            'avatar' => false,
            'gallery' => true
        ],
        api: true,
    );

    if($response instanceof JsonResponse){
        return $response;
    }

    return $response->redirect;
}

🔁 更新请求

此方法根据请求类型返回 RedirectResponse 或 JsonResponse,我们通过检查路由是否有 auth:sanctum 中间件来获取请求类型。

此方法接受一些参数

  • request 请求对象
  • model 您要获取的模型
  • validation 您想使用的验证规则
  • message 您想与响应一起返回的消息
  • validationError 如果验证失败,您想返回的消息
  • redirect 您想重定向到的路由
  • hasMedia 如果您想获取模型的媒体
  • collection [array] 您要获取的媒体集合作为数组,如果是多选则取 true,如果是单选则取 false
  • api 如果您想返回 JsonResponse
public function update(Request $request, \App\Models\User $model): RedirectResponse|JsonResponse
{
    $response = Tomato::update(
        request: $request, //Required
        model: $model, //Required
        validation: [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
        ],
        message: __('User updated successfully'),
        redirect: 'admin.users.index',
        hasMedia: true,
        collection: [
            'avatar' => false,
            'gallery' => true
        ],
        api: true,
    );

     if($response instanceof JsonResponse){
         return $response;
     }

     return $response->redirect;
}

🔁 删除请求

此方法根据请求类型返回 RedirectResponse 或 JsonResponse,我们通过检查路由是否有 auth:sanctum 中间件来获取请求类型。

此方法接受一些参数

  • model 您要获取的模型
  • message 您想与响应一起返回的消息
  • redirect 您想重定向到的路由
  • api 如果您想返回 JsonResponse
public function destroy(\App\Models\User $model): RedirectResponse|JsonResponse
{
    $response = Tomato::destroy(
        model: $model, //Required
        message: __('User deleted successfully'), //Required
        redirect: 'admin.users.index',
    );

    if($response instanceof JsonResponse){
        return $response;
    }

    return $response->redirect;
}

带有媒体的请求

要使媒体处理工作,您必须安装 spatie/laravel-medialibrary 包并运行迁移

composer require spatie/laravel-medialibrary
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
php artisan migrate

并且您的模型必须使用 HasMedia 特性

use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;

class User extends Model implements HasMedia
{
    use InteractsWithMedia;
}

处理警报

如果您使用 Splade,我们为您提供了处理 Toaster 的方法,如果安装了 yoeunes/toastr 包,它也将正常工作。或者,您可以从会话中获取 toaster 变量以获取闪存消息。

支持

您可以加入我们的 Discord 服务器以获得支持 TomatoPHP

变更日志

请参阅 变更日志 获取有关最近更改的更多信息。

安全

请参阅 安全信息 获取有关安全方面的更多信息。

致谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件