wdelfuego / nova-wizard
Nova 4 中创建向导工具。
Requires
- php: ^7.3|^8.0
- laravel/nova: ^4.0
README
允许您构建多步向导表单,支持 Laravel Nova 4 应用程序中的所有本地和自定义字段。
许可摘要
任何人都可以以任何方式使用和修改此包,包括商业用途,只要商业用途是 a) 创建已实现的向导和/或 b) 使用已实现的向导。
基本上,唯一条件是不能将此包作为子许可证分发或将其嵌入框架中,除非您在 AGPLv3 许可证下这样做(这与 Nova 框架不兼容)。更多详细信息 下面。
安装
-
将包添加到您的项目中;
composer require wdelfuego/nova-wizard
-
发布配置文件;
php artisan vendor:publish --provider="Wdelfuego\NovaWizard\ToolServiceProvider" --tag="config"
-
更新配置文件(在
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
中以添加向导视图。 -
更新您的
NovaServiceProvider
;-
在文件顶部添加以下语句
use Wdelfuego\NovaWizard\NovaWizard;
-
将向导工具添加到
tools()
方法返回的数组中,并将其构造函数中的向导密钥作为参数传递public function tools() { return [ new NovaWizard('add-user') ]; }
-
如果您在
boot()
方法中手动指定应用程序菜单,请添加一个MenuSection
或MenuItem
,以便将其链接到该向导。指定向导密钥,以便可以生成正确的 URL,如下所示
MenuItem::link('Add a user', NovaWizard::pathToWizard('add-user'))
-
-
最后,实现向导;
- 创建您的向导的类文件。它可以放在任何您想的地方,但如果没有首选位置,则
/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
本版权和许可声明必须包含在任何副本、备份、分叉或任何其他修改版本的此软件包中。
您可以使用以下两种许可证之一使用此软件包
-
GNU AGPLv3,适用于与GPLv3或更新版本兼容的开源项目。请注意,此许可证与Nova的使用不兼容,因此在此许可证下无法使用此软件包,直到存在一个可以包含在Laravel/Vue3项目中而不依赖于Nova的版本。您可以在本存储库中的LICENSE-agpl-3.0.txt中找到此许可证的完整条款,也可以在https://gnu.ac.cn/licenses/上找到副本。
-
这是一个永久性、不可撤销的、100%免费(如啤酒般免费)的许可证,允许在以下6个条件下进行非商业和商业使用
-
您可以使用此软件包在任意数量的服务器上、任意数量的应用程序中实施和/或使用任意数量的向导,并收取您想要的费用,只要您和/或您的组织是以下之一:a) 负责实施向导的开发者,或b) 实施向导的最终用户,或c) 两者都是。
-
根据此许可证,不允许将此软件包(或其修改版本)的分销许可证、重新许可、转售或收费授予其他开发者,以供他们实施向导视图。
-
您可以根据自己的意愿进行任何修改,并且不需要公开您的修改或宣布它们。
-
只要您免费分发、作为独立的软件包以及在同一双重许可模式下分发,您就可以自由地创建并公开分发此软件包的修改版本。
-
根据此许可证,明确不允许将此软件包(或其修改版本)嵌入到对您组织外的开发者可用的免费或付费的软件库或框架中。如果该软件库或框架与GPLv3或更新版本兼容,您可以在GNU AGPLv3许可证下这样做。
-
以下2项免责声明适用
-
本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是在合同行为、侵权行为或其他行为中产生的,也不论这些责任是否与软件或软件的使用或其他处理有关。
-
您承担与软件安装和使用相关的所有风险。许可证持有者独自负责确定使用的适当性,并承担与使用相关的所有风险,包括但不限于程序错误的风险、设备损坏、数据或软件程序丢失、操作不可用或中断的风险。
-