2017-08-30 111 views
0

laravel5.2,我在Requests目录下创建UserRequest.php,但在控制器中,显示错误public function add(UserRequest $request),但使用public function add(Request $request)属于正常。

UserRequest

namespace App\Http\Requests; 

use App\Http\Requests\Request; 

class UserRequest extends Request 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      'user_sn' => 'required|unique', 
      'user_name' => 'required', 
      'email'  => 'required|unique', 
      'password' => 'required', 
     ]; 
    } 
} 

UserController中

namespace App\Http\Controllers; 

use App\Http\Requests\UserRequest; 
use Illuminate\Support\Facades\DB; 
use Illuminate\Support\Facades\Validator; 

class UserController extends Controller 
{ 

    public function add(UserRequest $request) 
    { 
     if ($request->get('dosubmit')) { 
      $validator = Validator::make($request->all(), $request 
       ->rules(), $request->messages()); 
      if ($validator->fails()) { 
       return redirect('user/add')->withErrors($validator) 
        ->withInput(); 
      } 
     } 
     $corporation_list = DB::table('corporation')->get(); 
     $department_list = DB::table('department')->get(); 

     return view('user.add', ['corporation_list' => $corporation_list, 'department_list' => $department_list]); 
    } 
} 

路线

Route::group(['middleware'],function(){ 
Route::any('user/add',['as'=>'user.add','uses'=>'[email protected]']); 

});

+1

您需要在文件上添加'use'声明'UserRequest'!例如:'use App \ Http \ Requests \ UserRequest;' –

+0

你是用add()方法来显示表单还是处理表单提交或两者兼而有之? –

+0

是的,两者都是问题吗? – zahdxj

回答

1

通常有2个原因可能导致此问题。

  1. 你还没有加入use声明为UserRequest

    在控制器的顶部(在class以上)加:

    use App\Http\Requests\UserRequest 
    

    假设是正确的命名空间。

  2. 您可能需要运行composer dump-autoload以确保该类已添加到自动装载器中。

编辑

首先,用下面的方法代替add()方法:

Route::any('user/add',['as'=>'user.add','uses'=>'UserControl‌​[email protected]']) 

到:

public function create() 
{ 
    $corporation_list = DB::table('corporation')->get(); 
    $department_list = DB::table('department')->get(); 

    return view('user.add', compact('corporation_list', 'department_list')); 
} 

public function store(UserRequest $request) 
{ 
    // If you get to this point the validation will have passed 

    // Process the request 
} 

然后你的路线从改变:

Route::get('user/add', ['as' => 'user.add', 'uses' => 'UserControl‌​[email protected]']); 
Route::post('user/add', ['as' => 'user.store', 'uses' => 'UserControl‌​[email protected]']); 

显然,随意在路线的as改变什么,他们应该独一无二虽然。

最后,我会建议看看Resource Controllers这是一种RESTful方法。

希望这会有所帮助!

+0

your issue1我已经使用这个语句,所以我尝试了第2个问题,但问题仍然存在,当我在我的项目中使用iframe时出现此问题,当我点击左侧菜单时,右侧显示“欢迎页面”不正确page.but当我使用请求$请求,右侧显示右侧 – zahdxj

+0

@zahdxj你能够将'UserRequest'的代码添加到你的问题吗? –

+0

我已经发布我的UserRequest – zahdxj

0

的问题是,你还没有确定UserController的您正在使用UserRequest文件

use App\Http\Requests\UserRequest 

它会解决这个问题

+0

我已经使用过控制器中的状态 – zahdxj