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