我只是做了一个注册论坛,但验证不起作用。我收到以下错误:Builder.php第2071行中的BadMethodCallException:
每当我尝试注册表单时,都会出现相同的错误。已经过了一个小时了,但还是不明白。我的验证不起作用 即使我完全发布了注册表表单,它仍然显示相同的错误 实际上,BadMethodCallException和builder.php第2071行是我所不知道的。我有以下错误:我只是做了一个注册论坛,但验证不起作用。我收到以下错误:Builder.php第2071行中的BadMethodCallException:,php,laravel-5,Php,Laravel 5,每当我尝试注册表单时,都会出现相同的错误。已经过了一个小时了,但还是不明白。我的验证不起作用 即使我完全发布了注册表表单,它仍然显示相同的错误 实际上,BadMethodCallException和builder.php第2071行是我所不知道的。我有以下错误: Call to undefined method Illuminate\Database\Query\Builder::validate() 这是我的User@Controller: <?php namespace App\H
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();
}
}
}
问题出在您的用户
型号上。您的模型应如下所示:
您需要扩展雄辩的模型,而不是您自己的基本模型。在这种情况下,您还可以删除use
语句,因为用户
模型与基本模型
位于同一命名空间中,因为在用户
模型中,您正在扩展模型
。您已经在BaseModel
中定义了validate
方法。因此,要纠正该错误,请执行以下操作:
/**
* 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!');;
}
替换此行:
class user extends Model
class user extends BaseModel
这一行:
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!');;
}
要散列密码,请将用户
模型更新为:
/**
* Hash the password attibute before saving in database.
*
* @param string $password
*/
public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
使用setPasswordAttribute
方法,您不必担心手动对密码进行散列,因为laravel非常聪明,可以使用上述代码对密码进行散列
希望这对你有所帮助。干杯。您能发布完整的stacktrace吗?你能告诉我们stacktrace失败的确切代码吗?BadMethodCallException是一个标准的PHP异常,你可以在这里找到更多信息谢谢。我这样做了,但UserController.php第45行中仍然出现FatalErrorException:类“App\Http\Controllers\Redirect”错误。您能建议如何解决此问题吗?这是一个完全不同的问题,您没有提供足够的信息。堆栈跟踪会很方便!是的,你是对的。我可以使用Request方法。我刚刚复制了你所有的代码,但是当我设置为check validation时,它会显示foridden,而不是u@user3514160建议的验证。这是因为在同一个文件中,有一个名为authorize
的方法。。您需要将false
替换为true
。。错误应该会消失。是的,它可以工作。谢谢@user3514160。如果出现任何问题,我一定会联系的。当然。。没问题。。听到这个消息我很高兴。。快乐编码。。干杯……)使用表单后,我得到以下错误:Connection.php第651行中的QueryException:SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“username”(SQL:选择count(*)作为来自用户的聚合(其中username
=anandshrestha57)