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

我只是做了一个注册论坛,但验证不起作用。我收到以下错误: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

每当我尝试注册表单时,都会出现相同的错误。已经过了一个小时了,但还是不明白。我的验证不起作用

即使我完全发布了注册表表单,它仍然显示相同的错误

实际上,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();
        }
    }
}

问题出在您的
用户
型号上。您的模型应如下所示:


您需要扩展雄辩的模型,而不是您自己的基本模型。在这种情况下,您还可以删除
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)