yassi / nova-custom-form
dev-master
2018-09-24 10:35 UTC
Requires
- laravel/nova: ~1.0
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;
}