в моих проектах laravel 4.2 я использую файл ioc.php, использовать функции в любом месте моего приложения:
Laravel 4.2 structure
|
|
|app|
|routes.php
|ioc.php <-- place here
Мой контент ioc.php:
<?php
// services class
App::singleton('ApiRpService', function()
{
$config = Config::get('app.web_config.api');
$config['lang'] = Config::get('app.locale');
$config['currency'] = Config::get('app.currency');
$service = new \services\ApiService();
$service -> configure(array_merge($config,Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]));
return $service;
});
App::singleton('CartService', function()
{
//die(Config::get('app.web_config.webs.mantaspersonalizadas.es.local'));
$service = new \services\CartService(App::make('ApiRpService'));
return $service;
});
App::singleton('ApiCcService',function(){
$api_cc = new \services\ApiCcService(Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['secret_key_old_cc']);
return $api_cc;
});
// shared cart when head render
View::composer('layouts.header', function($view)
{
$cart_service = App::make('CartService');
$params = array();
$params['cart'] = $cart_service->getCart();
//Controller::call('PagesController@getPromotionData');
App::make('PagesController')->getPromotionData();
# lenguajes extras
$params['extra_langs'] = [];
$extra_langs = array_merge(@Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['lng_extra'],array(@Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['lng_default']));
if (count($extra_langs) > 0){
foreach($extra_langs as $lang)
{
if ($lang != App::getLocale())
{
$route_name = substr(Route::currentRouteName(), 0, strrpos(Route::currentRouteName(),'_')).'_'.$lang;
//die(URL::route($route_name));
$params['extra_langs'][] = array(
'lang' => $lang,
'url' => URL::route($route_name,array('--',Input::get('id','')))
);
}
}
}
$params['web_url'] = Request::root() . (strlen(Request::segment(1)) == 2? '/'.Request::segment(1):'');
//dd($params['promotion_data']);
$view -> with($params);
});
View::composer('layouts.head', function($view)
{
if (App::environment('production'))
$view -> with('g_analytics_id', @Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['g_analytics']['account']);
});View::composer('layouts.metas', function($view)
{
$params = [];
if (Lang::has('messages.welcome'))
$params['title'] ="";
if (Lang::has('messages.welcome'))
$params['description'] ="";
$view -> with($params);
});
// shared newsletter when footer render
View::composer('layouts.footer', function($view)
{
$api = App::make('ApiRpService');
$view -> with(array(
'token' => $api->getPublicToken(),
'google_plus' => @Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['google_plus'],
'facebook' => @Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['facebook'],
'twitter' => @Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['twitter'],
'chat_online' => @Config::get('app.web_config.webs')[$_SERVER['SERVER_NAME']]['chat_online']
));
});
App::singleton('imghelper', function(){
return new \utils\ImageHelper(Config::get('app.web_config.urlStaticProductsImg'));
});
В Laravel 5 docs не упоминается ioc.php …
Где я могу разместить эти функции?
Обратите внимание, что эти функции используются во всех представлениях.
Как правило, ваши индивидуальные услуги должны иметь свои собственные ServiceProvder. Они могут быть размещены в любом конкретном каталоге, и вы можете зарегистрировать всех своих поставщиков услуг в своем config/app.php
автоматически загружаться и запускаться.
Вы увидите в своем config/app.php
что базовый проект Laravel предварительно регистрирует некоторых поставщиков для ваших обычно используемых фасадов, таких как DB
,
Просто убедитесь, что имена ваших поставщиков услуг соответствуют Стандарт PSR-4 так что автозагрузчик Laravel может правильно разрешить класс!
Если вы ищете документы по «IOC» в Laravel 5, теперь он называется «Service Container» — Вот документы
Других решений пока нет …