zamudio / nova-custom-form

dev-master 2019-04-11 19:33 UTC

This package is not auto-updated.

Last update: 2024-09-21 04:04:15 UTC


README

这是一个简单的分支,用于与Nova 2兼容。原始仓库在这里 [链接]

Nova自定义表单

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

安装

composer require zamudio/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中的Create和Edit组件 :)

将新表单附加到资源上

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;
}