laravel 8 - 我可以在我的配置中访问常量内的变量吗

Posted

技术标签:

【中文标题】laravel 8 - 我可以在我的配置中访问常量内的变量吗【英文标题】:laravel 8 - can i access a variable inside a constant inside my config 【发布时间】:2021-12-21 18:48:42 【问题描述】:

我有一系列用于应用程序的常量字符串,放置在我的配置目录中名为 gameconstants 的文件中

我正在使用 config() 函数来获取各种消息,因此文件看起来类似于此

return [

'furiouspunches' => ' furiously punches ',
'kick' => ' kicks $loser in the junk ',

有没有办法让我访问那个 $loser 变量?我正在使用这些常量为我正在构建的应用程序返回字符串,所以我最终将这个返回值连接起来,最终输出类似于

$winner . config('gameconstants.kick') . $loser

但字符串并不总是与这种方式配合得很好,所以我想访问该变量,以便返回该字符串的不同变体。

我试过了

config('gameconstants.kick.$loser') 但这不起作用。有什么想法吗?

提前致谢。

【问题讨论】:

【参考方案1】:

你会想要使用字符串替换,例如

return [

'furiouspunches' => ' furiously punches ',
'kick' => ' kicks loser in the junk ',

然后

$string = $winner . str_replace('loser', $loser, config('gameconstants.kick'))

【讨论】:

【参考方案2】:

您可以使用翻译文件而不是配置文件。翻译文件也支持参数替换。

resources/lang/en/strings.php创建一个文件:

<?php

// resources/lang/en/strings.php

return [
    'furiouspunches' => ' furiously punches ',
    'kick' => ' kicks :loser in the junk ',
];

然后您使用双下划线方法 (__()) 访问您的字符串,并传入占位符值数组:

$string = $winner . __('strings.kick', ['loser' => $loser]);

您可以阅读translation documentation and variable substitution here。


根据您的用例,您可能希望在字符串中包含这两个项目。也许是这样的:

<?php

// resources/lang/en/strings.php

return [
    'furiouspunches' => ':subject furiously punches :object',
    'kick' => ':subject kicks :object in the junk',
];

然后传入两个替换:

$string = __('strings.kick', ['subject' => $winner, 'object' => $loser]);

【讨论】:

感谢您的回复,我其实很喜欢使用翻译文件的想法。这似乎是我将重写我的应用程序以利用的东西。每天学习新东西:)

以上是关于laravel 8 - 我可以在我的配置中访问常量内的变量吗的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 8 的 Request 类中访问模型实例?

在 Laravel 8 中阻止 http 访问

Laravel 缓存已认证用户的关系

dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF

如何通过 laravel 8 惯性中的模型访问关系

刀片中的 Laravel 8 路线