将ioc.php文件放在Laravel 5的文件夹结构中?

时间:2015-04-16 09:44:41

标签: php laravel laravel-4 laravel-5 ioc-container

在我的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 ......

我可以放置这些功能吗?

请注意,所有视图都使用这些功能。

1 个答案:

答案 0 :(得分:0)

通常,您的个人服务应该有自己的ServiceProvder。这些可以放在任何特定目录中,您可以在config/app.php中注册所有服务提供商,以便自动加载和运行。

您将在config/app.php中看到基础Laravel项目预先注册了一些供应商,用于常用的外墙,例如DB

只需确保服务提供商的名称遵循PSR-4 standard,以便Laravel的自动加载程序可以正确解析该类!

如果您在Laravel 5中查找“IOC”上的文档,它现在称为“服务容器” - here是文档。