php - 如何从服务提供者中更改 Laravel 容器属性?
问题描述
Laravel 像这样将 pathis 绑定到 Container 中
$this->instance('path.lang', $this->langPath());
在 /vendor/laravel/framework/src/Illuminate/Foundation/Application.php 的 bindPathsInContainer() 中,我想将此路径从我的服务提供者中更改为其他内容。
我知道容器实例可以通过 $this->app 从服务提供者中访问,所以我认为我可以这样做
$this->app->instance('path.lang', 'my/path');
然而,这会返回“类实例不存在”。谁能解释这里发生了什么?另外,为什么要引用容器的任何属性,如
$this->app->someProperty
导致这个错误?有没有办法从服务提供商内部编辑 someProperty?注意:我知道这可以通过扩展 \Illuminate\Foundation\Application 来完成,正如这里所解释的,但我想这样做而不必触及 Laravel 的默认文件。
解决方案
我认为路径必须是绝对的:
php artisan tinker
app()->instance('path.lang', '/home/user/you/project/something/something/that/exists);
你也可以在你的 AppServiceProvider 中这样尝试:
$this->app->instance('path.lang', $this->app->resourcePath().DIRECTORY_SEPARATOR.'mylang');
推荐阅读
- java - 笔记应用程序mvvm中android studio中的搜索问题
- java - Kotlin 运行 Apk 时“无法处理包”
- python - 将时间戳日期添加到 X 以进行机器学习
- python - 以非固定时间间隔插入数据
- php - 来自 XML 的 Foreach 文章(图片+价格)
- android - Android Room belongsTo(一对一)关系
- c# - .NET Analyzer 规则集优先级
- app-store - 应用问题 - 如何阻止多个用户共享登录详细信息?
- python - 大 O 表示法中变量的值和变量大小之间的差异
- powershell - 带有ohmyposh主题的VScode remote-ssh Powershell终端看起来不正确