lenderspender / laravel-wizard
使用向导控制网页步骤。
3.3.0
2024-08-28 09:27 UTC
Requires
- php: ^8.2
- laravel/framework: ^11.0 | ^10.0
Requires (Dev)
- lenderspender/php-cs-fixer-rules: dev-master
- mockery/mockery: ^1.4.2
- orchestra/testbench: ^9.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^1.5.0
- phpstan/phpstan-mockery: 1.1.0
- phpunit/phpunit: ^10.0
- dev-master
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.0
- 2.0.0
- 1.3.0
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.0
- dev-tijmen/first-step-is-nullable
- dev-laravel-11
- dev-dependabot/github_actions/actions/cache-3.3.1
- dev-dependabot/composer/phpstan/phpstan-mockery-1.1.1
- dev-LSP-2266-upgrade-to-php-unit-10-in-laravel-wizard
- dev-dependabot/github_actions/stefanzweifel/git-auto-commit-action-4.16.0
- dev-LSP-2224-upgrade-to-laravel-10-in-laravel-wizard
- dev-LSP-1021-php-8
This package is auto-updated.
Last update: 2024-09-28 09:42:38 UTC
README
Laravel wizard 是创建条件步骤的简单方法。
安装
您可以通过 composer 安装此软件包。
composer require lenderspender/laravel-wizard
用法
创建步骤
步骤是定义该步骤逻辑和视图的地方。步骤也可以是条件性的。
您可以将所需的任何依赖项注入步骤的 view
和 store
方法。Laravel 服务容器将自动注入所有类型提示的依赖项。
<?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Http\Request; use LenderSpender\LaravelWizard\StepDetails; use LenderSpender\LaravelWizard\WizardStep; use Symfony\Component\HttpFoundation\Response; class FirstStep extends WizardStep { public function view(): Response { return view('steps.first-step'); } public function store(Request $request): void { $data = $request->validate([ 'foo' => 'required', ]); SomeModel::update(['foo' => $data['foo']]); } public function getStepDetails(): StepDetails { return new StepDetails('First step', 'This is the first step', 'first-step'); } public function isCompleted(?Authenticatable $user): bool { return true; } public function isRequired(?Authenticatable $user): bool { return true; } }
抛出附加错误
有时您可能希望抛出附加错误。当您的步骤中 store
方法抛出 StoreStepException
时,用户会自动带着错误信息返回到上一页。
use LenderSpender\LaravelWizard\Exceptions\StoreStepException; public function store(Authenticatable $user) { if (! $user->emailVerified()) { throw new StoreStepException('Email address is not yet verified'); } $user->update(['foo' => 'bar']); }
设置控制器和路由
创建一个新的控制器来处理您的步骤。
<?php declare(strict_types=1); namespace App\Http\Controllers; use Illuminate\Contracts\Auth\Authenticatable; use LenderSpender\LaravelWizard\Wizard; use Symfony\Component\HttpFoundation\Response; class WizardController { public function show(string $step, Authenticatable $user): Response { return $this->getWizard($user) ->view($step); } public function store(string $step, Authenticatable $user): Response { $wizard = $this->getWizard($user); if ($redirect = $wizard->store($step)) { return $redirect; } return redirect(action( [WizardController::class, 'show'], [ 'step' => (string) $wizard->nextStep($wizard->getStepFromSlug($step)), ] )); } private function getWizard(Authenticatable $user): Wizard { return new Wizard( [ new FirstStep(), new SecondStep(), ], false, $user ); } }
然后您应该定义您的路由。
Route::get('/wizard/{step}', [WizardController::class, 'show']); Route::post('/wizard/{step}', [WizardController::class, 'store']);
设置向导
可以通过创建一个新的 Wizard
对象来初始化新的向导。
$wizard = new Wizard([ FirstStep::class, new FirstStep($param), [FirstStep::class => ['param' => $param]] ]);