Почему я получаю «Доступ к необъявленному статическому свойству»? (Ларавел)

Я пытаюсь проверить некоторые данные. Я нашел этот учебник на scotch.io. Я использую следующее в своем UsersController, чтобы попытаться проверить некоторые данные:

public function store(){

        $validator = Validator::make(Input::all(), User::$rules);

        return Redirect::action("UserController@index");

    }

Однако я продолжаю получать сообщение об ошибке «Доступ к необъявленному статическому свойству: User::$rules». Я делаю что-то неправильно? Я попытался использовать «автозагрузку php artisan dump-autoload».

<?php

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password', 'remember_token');

    protected $fillable = array(
                          'username',
                          'forename',
                          'surname',
                          'email',
                          'telephone',
                          'password',
                          'admin',
                          'customer',
                          'verification_link'
                        ); 


    public static $rules = array(
        'name'             => 'required',                       // just a normal required validation
        'email'            => 'required|email|unique:ducks',    // required and must be unique in the ducks table
        'password'         => 'required',
        'password_confirm' => 'required|same:password'          // required and has to match the password field
    );

}

person Sheldon    schedule 23.10.2014    source источник
comment
Честно говоря, все выглядит хорошо. Попробуйте снова запустить php artisan dump-autoload. Может быть, вы случайно запустили его в другой папке (со мной это уже случалось..). Или попробуйте сделать переменную объектом, а не статической.   -  person Diederik    schedule 23.10.2014
comment
Попробовал ваш код, ошибок нет. Вероятно, вы можете переместить правила в контроллер, так как за проверку отвечает контроллер, а не модель.   -  person Xiao Liu    schedule 26.10.2014


Ответы (1)


У меня была та же проблема, и я не мог найти решение для себя в Интернете, и я проследил проблему с PHPStorm и обнаружил, что мой класс был определен «ДВАЖДЫ», и поэтому он читал первый, а не тот, который я хотел который является вторым.

Проблема, с которой вы, вероятно, сталкиваетесь, заключается в том, что ваши файлы миграции включают файл миграции для таблицы «Пользователь», который определяет свой класс как Class User extends Migration {, а определение Class User в вашей модели будет выглядеть как Class User extends Eloquent, поэтому решение состоит в том, чтобы изменить один из их либо:

Class CreateUser extends Migration or Class UserModel extends Eloquent

а затем используйте метод модели в соответствии с вашим изменением, поэтому вы либо сохраняете его

User::$rules или UserModel::$rules, и это только в том случае, если вы изменили имя класса модели.

person Community    schedule 31.12.2014