我在Laravel 4中习惯了整个路线和控制器时遇到了一些麻烦。
根据我的理解,路由应仅用于决定在何处指向URL,以便它不应用于处理上传或类似的任何内容。
所以基本上我的路线文件验证了用户字段,然后我如何将它指向控制器以处理上传和类似的事情。
我目前有以下代码,但是当验证通过并且它应该转到控制器文件时,它只显示一个空白屏幕。
非常感谢任何帮助。
Route::post('create-profile', function()
{
// Validation rules
$rules = array(
'username' => 'required|unique:users,username|min:4|alpha_dash',
'emailaddress' => 'required|email|unique:users,email',
'country' => 'required',
'state' => 'required',
'genre' => 'required',
'filename' => 'image',
'password' => 'required|min:5|confirmed',
'password_confirmation' => 'required'
);
// Validate the inputs
$v = Validator::make( Input::all(), $rules );
// Was the validation successful?
if ( $v->fails() )
{
// Something went wrong
return Redirect::to('create-profile')->withErrors( $v )->withInput(Input::except('password', 'password_confirmation'));
} else {
// Here is where it seems to all go wrong.
Route::get('create-profile', 'CreateProfileController@processSignup');
}
});
答案 0 :(得分:5)
假设您的网址为:
http://site.com/create-profile
我所展示的内容并不理想,但我认为您的代码应该更像下面的内容:
routes.php文件
<?php
Route::post('create-profile', 'CreateProfileController@processSignup');
Route::get('create-profile', 'CreateProfileController@signup');
CreateProfileController.php
<?php
Class CreateProfileController extends Controller {
public function processSignup()
{
// Validation rules
$rules = array(
'username' => 'required|unique:users,username|min:4|alpha_dash',
'emailaddress' => 'required|email|unique:users,email',
'country' => 'required',
'state' => 'required',
'genre' => 'required',
'filename' => 'image',
'password' => 'required|min:5|confirmed',
'password_confirmation' => 'required'
);
// Validate the inputs
$v = Validator::make( Input::all(), $rules );
// Was the validation successful?
if ( $v->fails() )
{
// Something went wrong
return Redirect::to('create-profile')->withErrors( $v )->withInput(Input::except('password', 'password_confirmation'));
}
return View::make('success');
}
public function signup()
{
return View::make('signup');
}
}
让所有路线指向控制器操作并让他们完成工作更好,而且,它更易读,更容易理解。
使用资源控制器,您可以减少路由名称:
Route::resource('profile', 'ProfileController', array('only' => array('create', 'store')));
将会给你这些路线:
http://site.com/profile/create
http://site.com/profile/store