如何在Laravel 5.6中自动加载服务名称空间

时间:2019-01-01 12:51:53

标签: laravel laravel-5 composer-php

我在app\Library中创建了一些图书馆服务。我使用AppServiceProvider使用以下代码来绑定该服务:

$this->app->bind('App\Library\Globalfunction', function ($app) {
    return new Globalfunction();
});

app \ Library \ Globalfunction.php

<?php
namespace App\Library;

    class Globalfunction {
        protected $_ci;
        public $siteConfig=array();
        public $smtpConfig=array();
        public $socialConfig=array();

        public $paramConfig;
        public $paramFrom;

        public function test($param) {
            return $param;
        }
    }
?>

要在控制器中使用此test(),我要使用以下内容包括名称空间:

use App\Library\Globalfunction;

包含名称空间一次,我使用以下代码:

$globalFunction = new Globalfunction();
echo $globalFunction->test('hello');

所有这些代码都可以正常工作,但是我不想在每个文件中添加use App\Library\Globalfunction;,所以我可以这样做吗?我可以放置任何自动加载文件并且可以访问Globalfunction吗?

我为此使用了google解决方案,我尝试了几种解决方案,例如在composer中添加此文件或创建包等,但是它无法正常工作,因此,如果有人对此问题有解决方案,请告诉我。

1 个答案:

答案 0 :(得分:1)

也许您可以采用与Laravel相同的方法?

让我为您提供一个有关如何实现此目标的示例。

首先,在Helpers.php中创建一个app/Helpers.php文件。 您还需要自动加载。

"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories",
        "database/providers"
    ],
    "files": [
        "app/Helpers.php"
    ],
    "psr-4": {
        "App\\": "app/"
    }
}

完成后,您可以在新近自动加载的Helpers.php中定义一个函数:

if(! function_exists('global_function')) {

    function global_function()
    {
        return new \App\Library\Globalfunction();
    }
}

然后在任何地方使用它,您都可以这样做。

global_function()->test('hello');

这只是一个简单的例子。显然,在执行此操作之前,您需要考虑很多因素。 但是,Laravel具有提供全局助手功能的类似方法。例如:

use Illuminate\Support\Facades\Session; 

// This
echo Session::get('key'); 

// is the same as 

echo session()->get('key');