Laravel 5.2报错:UserController::Signup()方法不存在,求助
问题分析与解决办法
嘿,这个问题其实一眼就能看出来——你遇到的ReflectionException完全是因为路由里指定的控制器方法和实际存在的方法不匹配!
问题根源
你在路由里写的是:
'uses' => 'UserController@Signup'
但你的UserController里定义的方法是postSignUp,不管是方法名的拼写(Signup vs postSignUp)还是大小写(首字母大写的Signup)都对不上,Laravel找不到对应的方法,自然就抛出了这个错误。
两种修正方案
方案一:修改路由(推荐)
保持控制器的postSignUp命名(这是Laravel里对应POST请求的常用命名规范),把路由里的方法名改成正确的postSignUp:
Route::post('/signup', [ 'uses' => 'UserController@postSignUp', 'as' => 'signup', ]);
方案二:修改控制器方法名
如果你想保持路由里的Signup写法,那把控制器里的方法名改成Signup(注意大小写要完全一致):
public function Signup(Request $request) { // 原postSignUp里的代码不变 $email = $request['email']; $first_name = $request['first_name']; $password = bcrypt($request['password']); $user = new User(); $user->email = $email; $user->first_name = $first_name; $user->password = $password; $user->save(); return redirect()->back(); }
验证其他部分
你的控制器代码逻辑和welcome视图的表单部分都是没问题的,只要修正路由和控制器方法的对应关系,提交表单就不会报错了。另外注意Laravel 5.2里的web中间件组已经默认包含了会话、CSRF保护等必要功能,你当前的路由分组配置是正确的。
原代码参考
UserController(原代码)
<?php namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; class UserController extends Controller { public function postSignUp(Request $request) { $email = $request['email']; $first_name = $request['first_name']; $password = bcrypt($request['password']); $user = new User(); $user->email = $email; $user->first_name = $first_name; $user->password = $password; $user->save(); return redirect()->back(); } public function postSignIn(Request $request) { } }
Routes(原代码)
<?php /* |-------------------------------------------------------------------------- | Application Routes |-------------------------------------------------------------------------- | | Here is where you can register all of the routes for an application. | It's a breeze. Simply tell Laravel the URIs it should respond to | and give it the controller to call when that URI is requested. | */ Route::group(['middleware' => ['web']], function () { Route::get('/', function () { return view('welcome'); }); Route::post('/signup', [ 'uses' => 'UserController@Signup', 'as' => 'signup', ]); });
welcome.blade.php(原代码)
@extends('layouts.master') @section('title') Welcome! @endsection @section('content') <div class="row"> <div class="col-md-6"> <h2>Sign Up</h2> <form action="{{route('signup')}}" method="post"> <div class="form-group"> <label for="email">Your Email</label> <input class="form-control" type="text" name="email" id="email"> </div> <div class="form-group"> <label for="first_name">Your First Name</label> <input class="form-control" type="text" name="first_name" id="first_name"> </div> <div class="form-group"> <label for="password">Your Password</label> <input class="form-control" type="text" name="password" id="password"> </div> <button type="submit" class="btn btn-primary">Submit</button> <input type="hidden" name="_token" value="{{Session::token()}}"> </form> </div> <div class="col-md-6"> <h2>Sign In</h2> <form action="#" method="post"> <div class="form-group"> <label for="email">Your Email</label> <input class="form-control" type="text" name="email" id="email"></div> <div class="form-group"> <label for="password">Your Password</label> <input class="form-control" type="text" name="password" id="password"></div> <button type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> @endsection
内容的提问来源于stack exchange,提问作者cdscomputer
相关产品推荐
相关产品推荐

