Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel4:在运行时加载服务提供程序_Php_Dependency Injection_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel4:在运行时加载服务提供程序

Php Laravel4:在运行时加载服务提供程序,php,dependency-injection,laravel,laravel-4,Php,Dependency Injection,Laravel,Laravel 4,乍一看,这似乎是不必要的,因为我们在config/app.php中定义了providers,以自动加载任何ServiceProvider,但事实证明,有一种情况是它们不会自动加载: 当我们从Laravel队列运行作业时-我的服务提供者在配置中似乎被完全忽略,因此DI在目标时失败。。。不可实例化 在作业中的运行时注册我的服务提供程序确实有效。e、 g App::register('MyServiceProvider'); 在这种情况下,Laravel没有自动加载我的服务提供商有什么原因吗 PS:

乍一看,这似乎是不必要的,因为我们在
config/app.php
中定义了
providers
,以自动加载任何
ServiceProvider
,但事实证明,有一种情况是它们不会自动加载:

当我们从Laravel
队列运行作业时
-我的
服务提供者
在配置中似乎被完全忽略,因此DI在
目标时失败。。。不可实例化

在作业中的运行时注册我的服务提供程序确实有效。e、 g

App::register('MyServiceProvider');
在这种情况下,Laravel没有自动加载我的服务提供商有什么原因吗


PS:我也打开了一个问题,因为我不知道这是否是出于设计。

如果您通过URL定义您的环境,这些环境将不会从命令行自动识别-我自己在尝试运行迁移/种子时遇到了这个问题

您可以以任何方式定义环境,因为环境定义接受闭包,但“开箱即用”可以返回与计算机名称或url匹配的正则表达式。这里的例子-

一种解决方案是在app.php中按照配置的路径定义服务提供者(这是默认配置,如果命令行无法识别其他环境,则将使用该配置)或者,如果您需要不同环境的不同设置,您可以尝试通过计算机名称(这是您计算机的主机名)来定义您的环境。在unix框中,您可以在命令行上看到echo$hostname是什么

OP的另一个解决方案

正如OP所发现的,artisan在几乎每个命令上都接受--env标志,这允许您强制环境,因此您可以调用php artisan queue:work--env=local,以强制它在处理队列时使用本地配置


希望这对您有所帮助

如果您通过URL定义环境,那么这些环境将不会从命令行自动识别-我自己在尝试运行迁移/种子时也遇到过这个问题

您可以以任何方式定义环境,因为环境定义接受闭包,但“开箱即用”可以返回与计算机名称或url匹配的正则表达式。这里的例子-

一种解决方案是在app.php中按照配置的路径定义服务提供者(这是默认配置,如果命令行无法识别其他环境,则将使用该配置)或者,如果您需要不同环境的不同设置,您可以尝试通过计算机名称(这是您计算机的主机名)来定义您的环境。在unix框中,您可以在命令行上看到echo$hostname是什么

OP的另一个解决方案

正如OP所发现的,artisan在几乎每个命令上都接受--env标志,这允许您强制环境,因此您可以调用php artisan queue:work--env=local,以强制它在处理队列时使用本地配置


希望这能有所帮助

我没有遇到这个问题,这可能是一个bug,但我只是想勾选一个明显的陷阱-您是在路由配置中定义服务提供商还是在特定环境的配置中定义服务提供商-我通过url定义环境(这显然不是从命令行获取的)被烧坏了几次,所以,如果你的应用程序配置在url定义的环境中,这可以解释它。@webweaver-哦,伙计,你是对的,尽管我确实意识到这可能是个问题,但我还没有仔细研究。关于如何定义不依赖url的环境,有什么建议吗?我已经提交了一个答案,并提供了更多信息-如果您仍然有问题,请告诉我您是如何托管/运行您的开发站点的。我还没有遇到这个问题,这可能是一个错误,但只是勾选一个明显的陷阱-您是否在路由配置中定义了服务提供商或者特定环境的配置-我通过url定义环境(这显然不是从命令行获取的)被烧坏了好几次,所以如果你的应用程序配置在url定义的环境中,这可以解释它。@webweaver-哦,伙计,你是对的,尽管我意识到这可能是个问题,我看得不够仔细。关于如何定义不依赖url的环境,有什么建议吗?我已经提交了一个答案,并提供了更多信息-如果您仍然有问题,请告诉我您是如何托管/运行您的开发站点的。实际上,我认为
artisan
接受
--env
几乎每个命令上的标志,因此,我仍然可以
phpartisanqueue:work--env=local
使用我的本地配置。如果你能加上这一点,我会接受这个答案。我不知道你能做到,谢谢你提供的信息。我已经更新了我的答案,使其更加全面。实际上,我认为
artisan
几乎在每个命令上都接受
--env
标志,因此我仍然可以
php artisan queue:work--env=local
使用我的本地配置。如果你能加上这一点,我会接受这个答案。我不知道你能做到,谢谢你提供的信息。我已经更新了我的答案,使之更全面