在laravel中放置应用程序初始化代码的位置


Where to put app initialisation code in laravel

我正在创建一个使用facebookphp-sdk的应用程序,它需要一些配置:

require_once("facebook.php");
  $config = array(
      'appId' => 'YOUR_APP_ID',
      'secret' => 'YOUR_APP_SECRET',
      'fileUpload' => false, // optional
      'allowSignedRequest' => false, // optional, but should be set to false for non-canvas apps
  );
  $facebook = new Facebook($config);

我该把它放在哪里,以便在我的模型和控制器中使用$facebook

在这种情况下,您最好使用Laravel-IoC容器。

创建服务提供商

<?php
require_once("facebook.php");
use Illuminate'Support'ServiceProvider;
class FacebookServiceProvider extends ServiceProvider {
    public function register()
    {
        $app = $this->app;
        $app->bind('facebook', function() 
        {
            $config = array(
              'appId' => 'YOUR_APP_ID',
              'secret' => 'YOUR_APP_SECRET',
              'fileUpload' => false, // optional
              'allowSignedRequest' => false, // optional, but should be set to false for non-canvas apps
            );
            return new Facebook($config);
        });
    }
}

将其添加到您的app/config/app.php

'FacebookServiceProvider',

现在,在应用程序的任何地方,您都可以通过以下操作访问它:

App::make('facebook')->whateverMethod();

如果只需要实例化一次,可以使用singleton:

$app->singleton('facebook', function() 
{
     ....
}

您可以将其放在app/controller/BaseController.php中不过,我不建议在您的模型中使用它,它们应该严格地只以程序方式表示数据。