2015-02-06 3 views
0

Я хотел бы получить путь к общему каталогу пакета (css и т. Д.) На основе псевдонима пакета.Динамически получить общедоступный путь для пакета workbench в laravel

Есть ли что-то уже встроенное в рамки laravel?

Другими словами что-то вроде:

public_path('myalias'); 

Когда я говорю о псевдониме, то, как правило, «псевдоним» модуль, добавив следующий в метод загрузки поставщика услуг:

$this->package('namespace/package','alias_name'); 

Для тех, кто задается вопросом, почему кто-то может захотеть это сделать:

Мы запускаем приложение с несколькими доменами/субдоменами, которое использует центральную часть кода для всех t он домены, а затем конкретные пакеты для домена (я буду называть их воронками).

Каждая воронка имеет свои собственные контроллеры, которые могут расширять базовые контроллеры для реализации своих собственных функций при повторном использовании кода, где они могут. У них также есть свои взгляды.

Воронка относится к своим собственным взглядам на пути что-то вроде: Посмотреть :: макияжа («воронка :: path.to.view»)

Путь мы достигаем это делать некоторые бизнес-логику загружать страницу только для загрузки FunnelServiceProvider, связанного с этим конкретным доменом, и накладывать его на «воронку». Таким образом, наши базовые контроллеры также могут ссылаться на воронку и не привязываться к конкретным представлениям пакетов, включает в себя блоки и т. Д.

Надеюсь сделать что-то подобное на представлениях, чтобы я мог просто называть что-то вроде get_funnel_path() чтобы получить путь к воронке, которая в настоящее время загружается.

Значение может быть использовано для загрузки css, js, изображений и т. Д., Не беспокоясь о пути последовательности.

Это позволит нам просто скопировать и вставить виды из одного домена в другой, не изменяя все пути в потенциально нескольких файлах. Мы могли бы также использовать глобально включенные файлы во всех/большинстве представлений.

Примером этого может быть голова. Раздел главы должен быть одинаковым для 99% файлов, однако путь, в котором он загружает свои ресурсы, должен изменяться в зависимости от последовательности.

Мы используем те же соглашения об именах для файлов css, а также используем sass, импортируем, объединяем для всех воронки; поэтому только путь должен измениться.

+0

Что именно вы имеете в виду * пакет псевдоним *, где, определивший ? Или вы просто имеете в виду это имя? ('vendor/package') – lukasgeiter

+0

@lukasgeiter См. выше добавленное к вопросу. – ajameswolf

+0

Я вижу. Ну, это не совсем то, о чем вы просили, но как насчет 'public_path ('packages/namespace/package')'? – lukasgeiter

ответ

1

Вы можете сделать что-то вроде этого, хотя оно будет работать только с вашими собственными пакетами и потребует немного работы. Поскольку псевдоним на самом деле не хранится где-то, вы можете легко получить доступ к этому, вы должны сделать это сами.

Сначала создайте класс для хранения имен ваших пакетов.Я назвал рудник PackageManager:

class PackageManager { 

    private $packages = array(); 

    public function addPackage($fullName, $alias){ 
     $this->packages[$alias] = $fullName; 
     return $this; 
    } 

    public function getPublicPath($alias){ 
     if(!isset($this->packages[$alias])) return public_path(); 
     $path = 'packages/' . $this->packages[$alias]; 
     return public_path($path); 
    } 
} 

Теперь давайте зарегистрировать этот класс в качестве одноэлементных в поставщика услуг:

$this->app->singleton('packagemanager', function(){ 
    return new PackageManager(); 
}); 

Затем в каждом пакете вы хотите зарегистрировать, добавить этот вызов в правильный метод загрузки рядом с $this->package():

$this->app['packagemanager']->addPackage('vendor/package', 'alias'); 

После того, что вы можете сделать это где-нибудь в вашем приложении:

app('packagemanager')->getPublicPath('alias'); 

Если вы хотите более короткий синтаксис, добавьте эту вспомогательную функцию где-нибудь:

function public_package_path($alias){ 
    return app('packagemanager')->getPublicPath($alias); 
} 

И вобще:

public_package_path('alias'); 
+0

Это будет работать, я надеялся на более ларавел-ориентированный способ сделать это. Дает чек, если я не увижу что-то в этом роде. Спасибо lukas! – ajameswolf

Смежные вопросы