2

Laravel 4 で独自のバリデーション クラスを作成しようとしています。これを行うために、 という新しいディレクトリを作成しましたapp/validators。次に、このディレクトリをcomposer.jsonクラスマップに追加して、次composer updateのように実行しました。

"classmap": [
    "app/commands",
    "app/controllers",
    "app/models",
    "app/validators",           <- added here
    "app/database/migrations",
    "app/database/seeds",
    "app/tests/TestCase.php"
]

私の検証クラスは次のようになります。

class LinkValidation extends Illuminate\Validation\Validator {
{
    public function validateHost($field, $value, $params)
    {
        return $value == 'test';
    }
}

私のコントローラーでは、バリデーターを次のように拡張しようとしています:

Validator::extend('awesome', 'LinkValidation@supportedHost');

ただし、ページをロードするときに次のエラーが発生します。

{
    "error":{
        "type":"ReflectionException",
        "message":"Class LinkValidation does not exist",
        "file":"C:\\xampp\\htdocs\\laravel\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php",
        "line":301
    }
}

Laravel がクラスをロードしない理由はありますか? コンポーザーのクラスマップに追加すれば自動的に実行されると思いました。

4

2 に答える 2

1

composer dumpautoload新しいクラスオブジェクトを作成した後は常に実行してください。

于 2013-12-15T08:02:07.733 に答える
1

うまくいかない理由はわかりませんが、app/start/global.phpに追加してみてください。

/*
|--------------------------------------------------------------------------
| Register The Laravel Class Loader
|--------------------------------------------------------------------------
|
| In addition to using Composer, you may use the Laravel class loader to
| load your controllers and models. This is useful for keeping all of
| your classes in the "global" namespace without Composer updating.
|
*/

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/models',
    app_path().'/database/seeds',
    app_path().'/validators',

));
于 2013-10-25T23:15:31.193 に答える