如何在 laravel 5.6 中自动加载服务命名空间



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

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

app\Library\Globalfunction.php

<?php
namespace AppLibrary;
    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 AppLibraryGlobalfunction;

包含命名空间后,我使用以下代码:

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

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

为此谷歌解决方案,我尝试了几种解决方案,例如在作曲家中添加此解决方案或创建包等,但它不起作用,所以如果有人有解决此问题的方法,请告诉我。

也许你可以遵循与拉拉维尔相同的方法?

让我举一个如何实现这一目标的例子。

首先,在 app/Helpers.php 中创建一个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 AppLibraryGlobalfunction();
    }
}

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

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

这只是一个简单的例子。显然,在实现这一点之前,您必须考虑很多因素。但是,Laravel在提供全局帮助程序函数方面具有类似的方法。例如:

use IlluminateSupportFacadesSession; 
// This
echo Session::get('key'); 
// is the same as 
echo session()->get('key'); 

相关内容

  • 没有找到相关文章

最新更新