我只是做了一个注册论坛,但验证不起作用.我得到以下错误:Builder.php第2071行中的BadMethodCall


i just make a register forum but validation doesnot work. I get following errors:BadMethodCallException in Builder.php line 2071:

每当我尝试注册表单时,我都会遇到同样的错误。已经一个小时了,但还是想不通。我的验证不起作用。

即使我完全张贴了注册表,它仍然显示相同的错误。

BadMethodCallException和我不知道的builder.php行2071到底是什么。我有以下错误:

Call to undefined method Illuminate'Database'Query'Builder::validate()

这是我的User@Controller:

<?php
namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Http'Requests;
use App'Http'Controllers'Controller;
use View;
use App'Basemodel;
use App'user;
use Input;
class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return 'Illuminate'Http'Response
     */
     public $restful = true;
    public function index()
    {
        return View::make('users.new')->with('title', 'Make it snappy Q&A - Register');
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return 'Illuminate'Http'Response
     */
    public function create()
    {
        $validation = User::validate(Input::all());
        if($validation->passes()){
            User::create(array(
                'username'=>Input::get('username'),
                'password'=>Hash::make(Input::get('password'))
                ));
             return Redirect::to_route('home')->with('message','Thanks for registering!');
        } else{
            return Redirect::to_route('register')->with_errors($validation)->with_input();
        }
    }
}

我的基本模型是:

<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
use user;
class Basemodel extends Model
{
    public static function validate($data){
        return Validator::make($data,static::$rules);
    }
}

我的用户模型是:

<?php
namespace App;
use Illuminate'Database'Eloquent'Model;
use Basemodel;
class user extends Model
{
    public static $rules = array( 
    'username'=>'required|unique:users|alpha_dash|min:4',
    'password'=>'required|alpha_num|between:4,8|confirmed',
    'password_confirmation'=>'required|alpha_num|between:4,8'
    ); 
}

您收到该错误是因为在user模型中,您正在扩展Model。您已经在BaseModel中定义了validate方法。因此,要纠正该错误,请执行以下操作:

替换此行:

class user extends Model

使用此行:

class user extends BaseModel

错误应该会消失。

只是附带说明:

我不知道为什么要这样做,但正确的方法是创建FormRequest对象。

从终端发出以下命令:

php artisan make:request YourFormRequest

上述命令将在app/Http/Requests文件夹中创建名为YourFormRequest的文件。在编辑器中打开该文件。

现在,在rules方法中,传递所有验证规则。所以,在你的情况下,它会是这样的:

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'username'              => 'required|unique:users|alpha_dash|min:4',
        'password'              => 'required|alpha_num|between:4,8|confirmed',
        'password_confirmation' => 'required|alpha_num|between:4,8'
    ];
}

现在在您的控制器中,将create方法更新为以下内容:

/**
 * Show the form for creating a new resource.
 * Import the YourFormRequest class
 *
 * @param 'App'Http'Requests'YourFormRequest $request
 * @return 'Illuminate'Http'Redirect
 */
public function create(YourFormRequest $request)
{
    User::create($request->all());
    return redirect('home')->with('message','Thanks for registering!');;
}

为了散列密码,将User模型更新为:

/**
 * Hash the password attibute before saving in database.
 * 
 * @param string $password
 */
public function setPasswordAttribute($password)
{
    $this->attributes['password'] = bcrypt($password);
}

使用setPasswordAttribute方法,您不必担心手动散列密码,因为laravel足够聪明,可以用上面的代码进行散列。

希望这能帮到你。干杯

问题出在user模型中。你的模型应该是这样的:

namespace App;
class user extends Basemodel
{
    public static $rules = array( 
    'username'=>'required|unique:users|alpha_dash|min:4',
    'password'=>'required|alpha_num|between:4,8|confirmed',
    'password_confirmation'=>'required|alpha_num|between:4,8'
    ); 
}

您正在扩展Eloquent模型,而不是您自己的基本模型。在这种情况下,您还可以去掉use语句,因为user模型与Basemodel位于同一命名空间中。