wdelfuego/nova-wizard

Nova 4 中创建向导工具。

v1.1 2023-12-12 16:43 UTC

This package is auto-updated.

Last update: 2024-09-21 00:39:34 UTC


README

允许您构建多步向导表单,支持 Laravel Nova 4 应用程序中的所有本地和自定义字段。

Wizard screenshot

许可摘要

任何人都可以以任何方式使用和修改此包,包括商业用途,只要商业用途是 a) 创建已实现的向导和/或 b) 使用已实现的向导。

基本上,唯一条件是不能将此包作为子许可证分发或将其嵌入框架中,除非您在 AGPLv3 许可证下这样做(这与 Nova 框架不兼容)。更多详细信息 下面

安装

  1. 将包添加到您的项目中;

    composer require wdelfuego/nova-wizard
  2. 发布配置文件;

    php artisan vendor:publish --provider="Wdelfuego\NovaWizard\ToolServiceProvider" --tag="config"
  3. 更新配置文件(在 config/nova-wizard.php);

    配置文件允许您指定您想要的任何数量的向导,每个向导都有自己的密钥。

    • 更新用于此向导的类名(稍后我们将创建该类)
    • 更新向导将可供最终用户使用的 URI
    • 可选,更新此向导的窗口标题

    以下是一个针对 AddUserWizard 的最小配置示例

    use App\Nova\Wizards\AddUserWizard;
    
    return [
        'add-user' => [
            'class' => AddUserWizard::class,
            'uri' => 'wizard/add-user',
            'windowTitle' => 'Add user'
        ]
    ];

    配置文件中每个条目使用的密钥是 '向导密钥'(此处为 add-user),您需要将其添加到 NovaServiceProvider 中以添加向导视图。

  4. 更新您的 NovaServiceProvider

    • 在文件顶部添加以下语句

      use Wdelfuego\NovaWizard\NovaWizard;

    • 将向导工具添加到 tools() 方法返回的数组中,并将其构造函数中的向导密钥作为参数传递

       public function tools()
       {
       	return [
       		new NovaWizard('add-user')
       	];
       }
    • 如果您在 boot() 方法中手动指定应用程序菜单,请添加一个 MenuSectionMenuItem,以便将其链接到该向导。

      指定向导密钥,以便可以生成正确的 URL,如下所示

       MenuItem::link('Add a user', NovaWizard::pathToWizard('add-user'))
  5. 最后,实现向导;

    • 创建您的向导的类文件。它可以放在任何您想的地方,但如果没有首选位置,则 /app/Nova/Wizards 是一个好的默认位置。
    • 确保您在 config/nova-wizard.php 中正确指定了此向导的类
    • 实现类以扩展 Wdelfuego\NovaWizard\AbstractWizard
    • 您只需要实现以下三个方法
      • wizardViewData() : array 以定义向导中的步骤和字段,如下所示

        use Laravel\Nova\Fields;
        
        public function wizardViewData() : array {
            return [
                'steps' => [
                    [
                        'title'  => 'Step 1/2',
                        'fields' => [
                            Fields\Text::make(__('Username'), 'username'),
                            Fields\Text::make(__('Text field'), 'myText'),
                            Fields\Textarea::make(__('Longer text'), 'myLongerText')
                                ->help("You can use Help texts on Nova fields like you're used to"),
                            Fields\Number::make(__('Some number'), 'myNumber')
                                ->rules('required')
                                ->withMeta(['value' => 60])
                                ->min(1)
                                ->step(1),
                        ],
                    ],
                    [
                        'title'  => 'Step 2/2',
                        'fields' => [
                            Fields\Text::make(__('Text field 2'), 'myText2'),
                            Fields\Textarea::make(__('Longer text 2'), 'myLongerText2')
                                ->help("You can use Help texts on Nova fields like you're used to"),
                            Fields\Number::make(__('Some number 2'), 'myNumber2')
                                ->rules('required')
                                ->withMeta(['value' => 60])
                                ->min(1)
                                ->step(1),
                        ],
                    ],
                ],
            ];
        }
      • onSubmit($formData, &$context) : bool 以指定在提交有效的向导数据时执行的操作,如下所示

        public function onSubmit($formData, &$context) : bool {
        	//
        	// When this method gets called, a valid and complete wizard was submitted.
        	//
        	// $formData is an array that contains the data submitted by the user.
        	//
        	// $context is an empty array that you can store arbitrary info in;
        	// it will be passed to the next method so you can use it
        	// to display specific context info to the user on success.
        	
        	// Parse submitted wizard data somehow
        	$user = User::create(['name' => $formData['username']]);
        	$context['newUserId'] = $user->id;
        
        	// Return true at the end of this method to indicate success
        	return true;
        
        	// Or return false if the data can not be parsed successfully;
        	// the user will then stay in the form view and have a chance
        	// to revise the data before resubmitting.
        }
      • successViewData($context) : array 以指定在 onSubmit 返回 true 时向用户显示的消息,如下所示

        public function successViewData($context) : array {
        
        	return [
        		'message' => 'Successfully created user with id: ' .$context['newUserId']
        	];
        }

添加更多向导

为要添加到您的 Laravel Nova 应用程序的每个向导重复上面的安装步骤 3 到 5。

高级用法

使用查询参数

从版本 1.1 开始,感谢 @olliescase 的贡献,您可以将查询参数传递到向导 URL,然后这些参数将在向导定义中可用,以便您可以自定义向导或根据查询参数值预先填充某些字段。

例如,如果您想使用向导在特定 Nova 资源实例的上下文中执行某些操作,您可以为该 Nova Action 创建一个返回参数化 URL。

return $this->redirect('/' . NovaWizard::pathToWizard('my-wizard') . "?parentId={$resource->id}");

然后在向导定义中,您可以通过这种方式获取指定的参数值

$this->request->get('parentId')

或者,如果您想为两个略有不同的表单使用相同的向导定义,您可以将其添加到应用程序菜单两次,但使用查询参数进行区分。然后您可以在向导定义中使用 $this->request->get('paramName') 获取该查询参数的值,以便根据上下文自定义向导字段以及如何处理提交。

支持 & 文档

如果您遇到任何问题或疑虑,请在GitHub上创建一个issue

许可证

版权所有 © 2023 • Willem Vervuurt,Studio Delfuego,wdelfuego

本版权和许可声明必须包含在任何副本、备份、分叉或任何其他修改版本的此软件包中。

您可以使用以下两种许可证之一使用此软件包

  1. GNU AGPLv3,适用于与GPLv3或更新版本兼容的开源项目。请注意,此许可证与Nova的使用不兼容,因此在此许可证下无法使用此软件包,直到存在一个可以包含在Laravel/Vue3项目中而不依赖于Nova的版本。您可以在本存储库中的LICENSE-agpl-3.0.txt中找到此许可证的完整条款,也可以在https://gnu.ac.cn/licenses/上找到副本。

  2. 这是一个永久性、不可撤销的、100%免费(如啤酒般免费)的许可证,允许在以下6个条件下进行非商业和商业使用

  • 您可以使用此软件包在任意数量的服务器上、任意数量的应用程序中实施和/或使用任意数量的向导,并收取您想要的费用,只要您和/或您的组织是以下之一:a) 负责实施向导的开发者,或b) 实施向导的最终用户,或c) 两者都是。

  • 根据此许可证,不允许将此软件包(或其修改版本)的分销许可证、重新许可、转售或收费授予其他开发者,以供他们实施向导视图。

  • 您可以根据自己的意愿进行任何修改,并且不需要公开您的修改或宣布它们。

  • 只要您免费分发、作为独立的软件包以及在同一双重许可模式下分发,您就可以自由地创建并公开分发此软件包的修改版本。

  • 根据此许可证,明确不允许将此软件包(或其修改版本)嵌入到对您组织外的开发者可用的免费或付费的软件库或框架中。如果该软件库或框架与GPLv3或更新版本兼容,您可以在GNU AGPLv3许可证下这样做。

  • 以下2项免责声明适用

    • 本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是在合同行为、侵权行为或其他行为中产生的,也不论这些责任是否与软件或软件的使用或其他处理有关。

    • 您承担与软件安装和使用相关的所有风险。许可证持有者独自负责确定使用的适当性,并承担与使用相关的所有风险,包括但不限于程序错误的风险、设备损坏、数据或软件程序丢失、操作不可用或中断的风险。