Я решил выбросить папку с моделями и переместить все в структуру репо: app/Acme/Foo
Все правильно распределено по именам, но когда я пытаюсь получить доступ к своему Bar
класс внутри app/Acme/Foo/Bar.php
Я могу только создать экземпляр этого как new Acme\Foo\Bar();
, В противном случае Laravel ищет его в папке моделей. Единственный обходной путь — псевдоним пространства имен поверх файла, который реализует Bar
учебный класс. Любое решение? Насколько я понимаю, laravel 5 обрабатывает это автоматически, но переключение не является предпочтительным вариантом.
Я могу только создать его экземпляр как новый Acme \ Foo \ Bar (); … Единственный обходной путь — псевдоним пространства имен поверх файла, который реализует класс Bar. Любое решение?
Там (в основном, см. Ниже) нет работы, так работает современный PHP. Полное имя вашего класса на самом деле Acme\Foo\Bar
так что это то, что вам нужно использовать для ссылки на него. Если вы хотите сослаться на это по короткому имени (Bar
), то вы используете use
оператор в верхней части вашего файла после объявления пространства имен. Это как все работает сейчас.
У Laravel есть решение для этого. Если вы посмотрите в app/config/app.php
, вы увидите следующий раздел
#File: app/config/app.php
...
'aliases' => array(
'App' => 'Illuminate\Support\Facades\App',
'Artisan' => 'Illuminate\Support\Facades\Artisan',
'Auth' => 'Illuminate\Support\Facades\Auth',
'Blade' => 'Illuminate\Support\Facades\Blade',
'Cache' => 'Illuminate\Support\Facades\Cache',
...
'Eloquent' => 'Illuminate\Database\Eloquent\Model',
Массив позволяет вам устанавливать короткие псевдонимы для полностью пространственных классов. Laravel использует его в основном для фасадов, но это также то, что позволяет вам делать class MyModel extends Eloquent
, где Eloquent
действительно Illuminate\Database\Eloquent\Model
, Вы можете добавить свой псевдоним в этот массив
'Bar' => 'Acme\Foo\Bar'
А затем обратитесь к вашему классу во всем мире с Bar
, Тем не менее, вам, вероятно, будет лучше привыкнуть к идее именованных классов, так как именно в этом направлении движется большинство фреймворков PHP.
Кроме того, если вам интересно, псевдонимы в aliases
Вышеуказанные массивы реализованы через PHP class_alias
функция.
Других решений пока нет …