在laravel中采用不止一种方法路由
Posted
技术标签:
【中文标题】在laravel中采用不止一种方法路由【英文标题】:Taking more than one method to route in laravel 【发布时间】:2021-12-05 01:20:02 【问题描述】:所以,我正在做一个表单,我想在 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()));
【问题讨论】:
【参考方案1】:虽然有很多方法可以解决这个问题,但我认为最简洁的方法可能是设置不同的路由,而不是其他选择。
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 方法设为私有,
【讨论】:
使用第二种方法,“updateAvatar”功能有效,但“bgImage”只返回一个白页,它不会改变图像。这很可惜,因为它确实是我想要的。因为我试图将所有内容都放在同一个表单中,所以我不能使用不同的路由链接 我真的无法从我的椅子上解决这个问题。也许你也在请求中发送头像,但它是空的,所以它永远不会到达第二个 IF,也许有一个 php 错误但你关闭了错误。我的回答更像是概念证明,因为我无法查看/调试或理解您的应用程序的其余部分。以上是关于在laravel中采用不止一种方法路由的主要内容,如果未能解决你的问题,请参考以下文章