微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何发送与Laravel Livewire收集的数据到Fortify?

如何解决如何发送与Laravel Livewire收集的数据到Fortify?

我完全不熟悉Vue.js,因此使用Livewire找到了很好的替代品。

我要解决的挑战是使用Fortify + Livewire在我的网站上进行用户友好的注册注册过程是一个多步骤的过程,取决于用户做出的选择,它将加载相关字段。

到目前为止,我通过在FortifyServiceProvider.PHP文件添加以下代码来设置Fortify视图:

Fortify::loginView(function () {
    return view('auth.login');
});

Fortify::registerView(function () {
    return view('auth.register');
});

auth/login.blade.PHP视图加载了livewire组件,该组件基本上是一种形式:

<form action="{{ route('register') }}" method="POST" wire:submit.prevent="submit">
    /**
    * Here would go the inputs that must be shown depends on what users choice 
    * (is it an ordinar user or a company)
    */
    <button type="submit">Save<button/>
</form>

通过将$step属性添加Register.PHP类中,可以解决多格式挑战:

class RegisterForm extends Component
{
    public $step;

    public function mount()
    {
        $this->step = 0;
    }

    public function submit()
    {
        if ($this->step < 3) {
            $this->step++;           
        } else {
            // pass all the data to the fortify register method
            // <-- Here is my trouble!
        }
    }
}

,将通过每个注册步骤($this->step++)来递增。

对我来说,最重要的事情是如何防止表单提交进行验证+表单更改,最后阻止所有数据集通过Fortify注册​​过程?

解决方法

查看要注册的​​强化控制器

public function store(Request $request,CreatesNewUsers $creator): RegisterResponse
    {
        event(new Registered($user = $creator->create($request->all())));
        $this->guard->login($user);
        return app(RegisterResponse::class);
    }

T

use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Auth;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Livewire\Component;

class Register extends Component
{
    public $name;
    public $email;
    public $password;
    public $password_confirmation;

    public function submit(CreatesNewUsers $creator)
    {
        event(new Registered($user = $creator->create([
            'name' => $this->name,'email' => $this->email,'password' => $this->password,'password_confirmation' => $this->password_confirmation,])));

        Auth::guard()->login($user);

        $this->redirect('home');
    }

    public function render()
    {
        return view('livewire.register');
    }
}

类似的情况适用于您的用例。

您仍在使用强化操作并仍在触发事件

,

响应是通过在 Livewire 组件的安装方法中注入 Fortify CreateNewUser 操作来使用 dependency injection

use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Auth;
use App\Actions\Fortify\CreateNewUser;
use Livewire\Component;

class Register extends Component
{
    public $name;
    public $email;
    public $password;
    public $password_confirmation;
    
    protected $creator;

    public function mount(CreateNewUser $creator)
    {
        $this->creator = $creator;
    }

    public function submit()
    {
        event(new Registered($user = $this->creator->create([
            'name' => $this->name,])));

        Auth::guard()->login($user);

        $this->redirect('home');
    }

    public function render()
    {
        return view('livewire.register');
    }
}
,

响应是使用应用容器

<?php

use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Auth;
use App\Actions\Fortify\CreateNewUser;
use Livewire\Component;

class Register extends Component
{
    public $name;
    public $email;
    public $password;
    public $password_confirmation;
    


    public function submit()
    {
        event(new Registered($user = app(CreateNewUser::class)->create([
            'name' => $this->name,])));

        Auth::guard()->login($user);

        $this->redirect('home');
    }

    public function render()
    {
        return view('livewire.register');
    }
}
,

您可以使用刀片示例

@if($step > 3)
     <input name="name" type="text">
@endif

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。