在我的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文档中没有提到ioc.php ......
我可以放置这些功能吗?
请注意,所有视图都使用这些功能。
答案 0 :(得分:0)
通常,您的个人服务应该有自己的ServiceProvder。这些可以放在任何特定目录中,您可以在config/app.php
中注册所有服务提供商,以便自动加载和运行。
您将在config/app.php
中看到基础Laravel项目预先注册了一些供应商,用于常用的外墙,例如DB
。
只需确保服务提供商的名称遵循PSR-4 standard,以便Laravel的自动加载程序可以正确解析该类!
如果您在Laravel 5中查找“IOC”上的文档,它现在称为“服务容器” - here是文档。