автозагрузка трейта laravel 4 в моделях

Хорошо, я борюсь уже более 2 часов...

Должно быть, это один из тех моментов, когда "о боже, это было так очевидно", когда ты так устал и не видишь решения...

Я хочу расширить красноречивую модель, включив в нее черту.

так выглядит мой класс

<?php 
class Note extends Eloquent{
  use \Admin\GreatTrait;

  ...
}

и я создал структуру каталогов app/Traits/Admin и создал файл с именем GreatTrait.php со следующим содержимым:

<?php namespace Admin;

trait GreatTrait{
  ...
}

и, конечно же, я отредактировал start/global.php, чтобы включить каталог в ClassLoader вот так

ClassLoader::addDirectories(array(
    app_path().'/commands',
    ... more ...
    app_path().'/traits',
    app_path().'/traits/Admin',
));

и получаю следующую ошибку...

Symfony \ Component \ Debug \ Exception \ FatalErrorException

Trait 'Admin\GreatTrait' not found

Есть что предложить?


person papas-source    schedule 28.02.2014    source источник
comment
Вы использовали composer dump-autoload?   -  person user1669496    schedule 01.03.2014


Ответы (2)


Следуя вашему коду, я заставил его работать со следующими изменениями:

  1. Включите в composer.json это:

    "autoload": {
        "classmap": [
            "app/traits"
        ] 
    }
  2. Включить в модель после объявления класса (просто имя трейта, без каталога):

    php 
    class Note extends Eloquent {
        use \GreatTrait;
        ...
    }
    ?>
person juaniiton1    schedule 28.04.2014

У меня были некоторые проблемы с автозагрузкой в ​​global.php, вы можете сделать то же самое, используя compposer.json:

Добавьте путь к массиву автозагрузки в composer.json.

"autoload": {
                "classmap": [
                        "app/traits"
                ]
        },

Беги composer dump-autoload

В пути app/traits у вас должна быть папка администратора app/traits/admin с классом, устанавливающим пространство имен Admin.

<?php
namespace Admin
class GreatTrait { ... }

Затем вы можете использовать

<?php 
use \Admin\GreatTrait;
class Note extends Eloquent{

  ...
}
person marcanuy    schedule 28.02.2014