Laravel - 仅为本地环境添加别名

3

我需要在我的Laravel 5应用程序中设置一个门面别名facade,但我希望它仅在我的本地环境中可用。

我正在尝试添加的存储库是Laravel-Debugbar

因此,我以这种方式在Http/Providers/AppServiceProvider中注册了提供者:

public function register()
{
    if( $this->app->environment() == "local")
    {
        $this->app->register('Barryvdh\Debugbar\ServiceProvider');
    }
}

我该如何为别名做同样的事情?
'Debugbar' => 'Barryvdh\Debugbar\Facade',
2个回答

13

请按以下步骤进行。

1) 将"--dev"添加到您的composer require命令中。例如:

 sudo composer require barryvdh/laravel-ide-helper --dev

或者,在composer.json文件中将你的开发环境所需内容移动到"require-dev"部分中:

"require": {
    "laravel/framework": "5.0.*"
},
"require-dev": {
    "laracasts/generators": "~1.1",
    "barryvdh/laravel-ide-helper": "~2.0",
    "barryvdh/laravel-debugbar": "~2.0"
},

然后进行composer update。

2)设置新的ServiceProvider:

php artisan make:provider LocalEnvironmentServiceProvider

3) 在 config/app 中将 LocalEnvironmentServiceProvider 添加到 providers 数组中:

'providers' => [ ...
    'app\Providers\ConfigServiceProvider',
    'app\Providers\EventServiceProvider',
    'app\Providers\RouteServiceProvider',

   /*
    * Our Local Environment Service Providers...
    */
    'app\Providers\LocalEnvironmentServiceProvider',
],

4) 修改你的新应用程序/提供商/LocalEnvironmentServiceProvider文件:

<?php namespace App\Providers;

use Illuminate\Foundation\AliasLoader;
use Illuminate\Support\ServiceProvider;

class LocalEnvironmentServiceProvider extends ServiceProvider {

    /**
     * List of Local Environment Providers
     * @var array
     */
    protected $localProviders = [
        'Laracasts\Generators\GeneratorsServiceProvider'
        'Barryvdh\Debugbar\ServiceProvider',
        'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
    ];

    /**
     * List of only Local Environment Facade Aliases
     * @var array
     */
    protected $facadeAliases = [
        'Debugbar' => 'Barryvdh\Debugbar\Facade',
    ];

    /**
     * Bootstrap the application services.
     * @return void
     */
    public function boot() {
        if ($this->app->isLocal()) {
            $this->registerServiceProviders();
            $this->registerFacadeAliases();
        }
    }

    /**
     * Register the application services.
     * @return void
     */
    public function register() {
    }

    /**
     * Load local service providers
     */
    protected function registerServiceProviders() {
        foreach ($this->localProviders as $provider) {
            $this->app->register($provider);
        }
    }

    /**
     * Load additional Aliases
     */
    public function registerFacadeAliases() {
        $loader = AliasLoader::getInstance();
        foreach ($this->facadeAliases as $alias => $facade) {
            $loader->alias($alias, $facade);
        }
    }
}

我还添加了其他几个典型的开发提供者和门面,希望你能理解如何轻松地扩展它。

当然,使用这种方法,您只需更改 $this->app->isLocal() 来匹配其他环境即可。


3

您可以像为ServiceProvider添加别名一样添加别名。在您的Http/Providers/AppServiceProvider中,将register方法更新为以下内容:

public function register()
{
    if ($this->app->environment() == 'local') {
        // Providers
        $this->app->register('Barryvdh\Debugbar\ServiceProvider');

        // Aliases
        $this->app->alias('Debugbar', 'Barryvdh\Debugbar\Facade');
    }
}

$this->app->alias('Debugbar', 'Barryvdh\Debugbar\Facade'); 对我不起作用,当我尝试在控制器中使用门面时,会出现以下错误:Class 'App\Http\Controllers\Debugbar' not found。我尝试了 Debugbar::error 和 \Debugbar::error 两种方式,有什么想法吗? :) - galdikas
1
在我看来,这是最好的答案。@galdikas 我认为你忘记了在App\Http前面加''。 - Maurice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接