yassi/nova-custom-form

dev-master 2018-09-24 10:35 UTC

This package is auto-updated.

Last update: 2024-08-28 00:22:39 UTC


README

此包允许您为特定的 Nova 资源定义完全可定制的组件。

安装

composer require yassi/nova-custom-form

然后您需要在 config/app.php 中添加服务提供者,在 NovaServiceProvider 之后

 /*
    |--------------------------------------------------------------------------
    | Autoloaded Service Providers
    |--------------------------------------------------------------------------
    |
    | The service providers listed here will be automatically loaded on the
    | request to your application. Feel free to add your own services to
    | this array to grant expanded functionality to your applications.
    |
    */

    'providers' => [

        ...
        App\Providers\NovaServiceProvider::class,
        ...
        Yassi\NovaCustomForm\NovaCustomFormServiceProvider::class,
        ...

安装并注册后,只需将 CustomFormTrait 添加到您的 App\Nova\Resource 中

namespace App\Nova;

use Laravel\Nova\Resource as NovaResource;
use Laravel\Nova\Http\Requests\NovaRequest;
use Yassi\NovaCustomForm\CustomFormTrait;

abstract class Resource extends NovaResource
{
   use CustomFormTrait;
    ...

创建一个新的表单

这与任何其他 Nova 工具、资源工具或字段的流程完全相同。您可以直接在终端中使用该命令

php artisan nova:form @vendor/package-name

这将创建您的表单组件在 /nova-components/PackageName 中。如果您在之前的流程中安装了依赖项,您可以直接使用

cd /nova-components/PackageName && yarn watch

您可以根据喜好在 /nova-components/PackageName/resources/js/components 中修改创建和编辑组件 :)

将新表单附加到资源

CustomFormTrait 为您的资源添加了一个静态方法 "form",并将当前请求作为参数传递。默认情况下,该函数返回 null,表示它将使用默认的 Nova 表单。您只需覆盖该函数并返回您自定义表单的新实例。

namespace App\Nova;

use Laravel\Nova\Fields\ID;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Gravatar;
use Laravel\Nova\Fields\Password;
use Vendor\PackageName\PackageName;

class User extends Resource
{
    ...
    
    /**
     * This method registers the custom form
     * to be used for the User resource.
     * 
     * @return PackageName
     */
    public static function form ($request) {
        return new PackageName;
    }
    

您可以指定哪个用户或哪种类型的用户可以访问此自定义表单

public static function form ($request) {
    return $request->user()->email === 'superadmin@email.fr' ? new PackageName : null;
}