zamudio / nova-custom-form
dev-master
2019-04-11 19:33 UTC
Requires
- laravel/nova: *
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;
}