0

laravel 4 に含まれている User クラスを使用しています。ユーザーに属する新しい質問を保存しようとしていますが、作成するにはユーザーがログインする必要があります。質問コントローラーアクションストアを呼び出すと、次のエラーが発生します

Class User contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Illuminate\Auth\UserInterface::getAuthPassword, Illuminate\Auth\Reminders\RemindableInterface::getReminderEmail)

私はphpの抽象メソッドについて少し読んだことがありますが、それらを完全には理解していませんが、エラー自体が問題に対する2つの解決策を提供し、残りのメソッドを実装するクラス抽象を宣言します。これはlaravelに同梱されているモデルクラスであるため、正しい解決策はその宣言をabstractに変更するのではなく、残りのメソッドを実装することだと推測しています。この場合、そして今後、これを正しく行うにはどうすればよいですか?

ユーザーモデル

<?php

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

class User extends BaseModel implements UserInterface, RemindableInterface {

    protected $guarded = [];

    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' 
        );

    public function Questions($value='')
    {
        return $this->hasMany('Question');

    }

    /**
     * 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');

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->password;
    }

    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->email;
    }

}

質問コントローラー

/**
     * Store a newly created resource in storage.
     *
     * @return Response
     */
    public function postStore()
    {
        $validation = Question::validate(Input::all());

        if($validation->passes()) {
            Question::create(array(
                'question'=>Input::get('question'),
                'user_id'=>Auth::user()->id
            ));

            return Redirect::Route('home')
            ->with('message', 'Your question has been posted.');

        } else {
            return Redirect::to('user/register')->withErrors($validation)
            ->withInput();
        }
    }

編集 1: エラー メッセージに「(Illuminate\Auth\UserInterface::getAuthPassword, Illuminate\Auth\Reminders\RemindableInterface::getReminderEmail)」が含まれていますそれらを「実装」するために何か他のことをする必要がありますか?

編集2:

Laravel Src UserInterface クラス

<?php namespace Illuminate\Auth;

interface UserInterface {

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier();

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword();

}

laravel src RemindableInterface クラス

<?php namespace Illuminate\Auth\Reminders;

interface RemindableInterface {

    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail();

}

編集3:

エラー報告に関連する php.ini

; error_reporting
;   Default Value: E_ALL & ~E_NOTICE
;   Development Value: E_ALL | E_STRICT
;   Production Value: E_ALL & ~E_DEPRECATED

error_reporting = E_ALL 

; Eval the expression with current error_reporting().  Set to true if you want
; error_reporting(0) around the eval().
; http://php.net/assert.quiet-eval
;assert.quiet_eval = 0

ベースモデルクラス

<?php

class Basemodel extends Eloquent {

    public static function validate($data) {

        return Validator::make($data, static::$rules);
    }
}


?>

編集 4;

エラーが発生したときと同じように正しいモデルクラスを追加し、修正後の現在の状態

<?php

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

class Question extends BaseModel implements UserInterface, RemindableInterface {

    protected $guarded = [];

    public static $rules = array(
            'questions'=>'required|min:10|max:255',
            //'solved'=>'in:0,1',
        );

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

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

    /**
     * Get the unique identifier for the question.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        return $this->getKey();
    }

    public function user()
    {
        return $this->belongsTo('User');
    }

}

これを追加して修正します

/**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->password;
    }

    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->email;
    }
4

1 に答える 1