同一控制器Laravel 6中的多种更新方法

时间:2019-12-29 12:04:25

标签: laravel laravel-6

我目前正在尝试使用编辑字段构建用户注册系统。在编辑部分,我必须创建单独的视图来编辑/更新个人详细信息,电子邮件和密码。

我从一个空的资源控制器开始。它只有一种编辑方法。因此,我添加了其他编辑方法。每种方法可以有单独的路线。但是,我很难在每个部分中为每种更新方法设置一条单独的路由,因为该资源在docs中只有这样的一条路由:

  

PUT / PATCH / photos / {photo}更新photos.update

有什么解决方法吗?

控制器

class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware(['auth', 'verified']);
    }

    public function index()
    {
        return view('users.index');
    }

    public function edit_personal(User $user)
    {
        $user_profile = User::find($user->id);

        return view('users.edit.personal', ['users' => $user_profile]);
    }

    public function update_personal(Request $request, User $user)
    {
        // How to write route for this method.
    }

    public function edit_email(User $user)
    {
        $user_profile = User::find($user->id);

        return view('users.edit.email', ['users' => $user_profile]);
    }

    public function update_email(Request $request, User $user)
    {
        // How to write route for this method.
    }

    public function edit_password(User $user)
    {
        $user_profile = User::find($user->id);

        return view('users.edit.password', ['users' => $user_profile]);
    }
}

路线

Auth::routes(['verify' => true]);
Route::get('/', function () {
    return view('welcome');
});
Route::get('/users/{user}/personal', 'UserController@edit_personal')->name('users.personal');
Route::get('/users/{user}/email', 'UserController@edit_email')->name('users.email');
Route::get('/users/{user}/password', 'UserController@edit_password')->name('users.password');
Route::resource('users', 'UserController');

基本上,我已经将用户控制器的编辑部分分为个人,电子邮件和密码两部分,它们具有不同的形式。我想为UserController中的每个部分编写更新功能。

1 个答案:

答案 0 :(得分:1)

不知道您为什么要使用单独的表单来更新每个字段,而您却可以用一个表单来完成。但是,您可以使用put / patch或post方法进行更新。这是我使用帖子的例子。 路线:

Route::get('users/{user}/personal', 'UserController@edit_personal')->name('users.personal');
Route::post('users/{user}/personal', 'UserController@update_personal')->name('users.update-personal');
Route::get('users/{user}/email', 'UserController@edit_email')->name('users.email');
Route::post('users/{user}/email', 'UserController@update_email')->name('users.update-email');
Route::get('users/{user}/password', 'UserController@edit_password')->name('users.password');
Route::post('users/{user}/password', 'UserController@update_password')->name('users.update-password');

在使用路由模型绑定时,您可以直接获取对象。

public function edit_personal(User $user)
    {
        return view('users.edit.personal', ['users' => $user]);
    }

public function update_personal(Request $request, User $user)
    {
        //validation goes here
        $user->update([
            'value' => $request->value,
            ........... 
        ]);
    }