每当我尝试注册表单时,我都会遇到同样的错误。已经一个小时了,但还是想不通。我的验证不起作用。
即使我完全张贴了注册表,它仍然显示相同的错误。
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
位于同一命名空间中。