首页 > 解决方案 > 在laravel中采用不止一种方法路由

问题描述

所以,我正在做一个表格,我想从我的控制器中采用多个方法到 Laravel 8 中的同一条路线。

可能吗?因为我一直在搜索,但我看到的所有答案都是针对旧版本的,其中路由有点不同。

我试图像这样适应,但我发现我做错了:/

Route::post('/editProfile', [
    'avatar' => [UserController::class, 'updateAvatar'],
    'bgImage' => [UserController::class, 'updateBGImage'],
]);

在 UserController 我有:

class UserController extends Controller
{
    //
    public function profile(){
        return view('profile', array('user' => Auth::user()));

    }

    

    public function updateAvatar(Request $request) {
        
        //Handle the user upload of the avatar
        if($request->hasFile('avatar')) {
            $avatar = $request->file('avatar');
            $filename = time() . '.' . $avatar->getClientOriginalExtension();
            Image::make($avatar)->resize(300, 300)->save( public_path('uploads/avatars/' . $filename));

            $user = Auth::user();
            $user->avatar = $filename;
            $user->save();

        }
        return view('profile', array('user' => Auth::user()));
    }

    public function editProfile(){
        return view('editProfile', array('user' => Auth::user()));

    }

    public function updateBGImage(Request $request) {
        
        //Handle the user upload of the avatar
        if($request->hasFile('bgImage')) {
            $bgImage = $request->file('bgImage');
            $filename = time() . '.' . $bgImage->getClientOriginalExtension();
            Image::make($bgImage)->resize(300, 300)->save( public_path('uploads/bgImages/' . $filename));

            $user = User::find(auth()->user()->id);
            $user->bgImage = $filename;
            $user->save();

        }
        return view('profile', array('user' => Auth::user()));
    }
}

标签: laravelmethodsroutescontrollerlaravel-8

解决方案


虽然有很多方法可以解决这个问题,但我认为最干净的方法可能只是设置不同的路由,而不是其他方法。

Route::post('/editProfileAvatar', [UserController::class, 'updateAvatar']);
Route::post('/editProfileBackground', [UserController::class, 'updateBGImage']);

或者,您可以在控制器中创建一个新方法来处理逻辑,例如:

路线

Route::post('/editProfile', [UserController::class, 'handleRequest']);

控制器

public function handleRequest(Request $request) {
    
    //Handle the user upload of the avatar
    if($request->hasFile('avatar')) {
        return $this->updateAvatar($request);
    }
    
    //Handle the user upload of the background image
    if($request->hasFile('bgImage')) {
        return $this->updateBGImage($request);
    }
}

对于第二个示例,您可以根据需要将 updateAvatar 和 updateBGImage 方法设为私有,


推荐阅读