Laravel 4 - 在路径文件中验证后通过控制器进行处理

时间:2013-06-11 05:51:04

标签: laravel laravel-4

我在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');

}

});

1 个答案:

答案 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