正如我之前所说,如何覆盖双下划线函数?
我不想使用辅助文件夹。
我想创建一个新类,在这个类中我想重写这个 __ 函数。我想用简单的 __("lorem") 从任何地方调用这个函数。
<?php
namespace App\Classes;
use bla bla;
class Translater{
//Some transactions
}
关闭我的类大括号后,我编写自己的 __ 函数。
function __($text){
static $translaterClass = null;
if($translaterClass == null) $translaterClass = new Translater();
return $translaterClass->translate($text);
}
我尝试添加app.php的别名
'Lang' => App\Classes\Translater::class,
我也尝试过app.php的提供者
App\Classes\Translater::class,
在此步骤之后,我在不使用和使用 App\Classes\Translater 的情况下调用此函数;它返回异常“目标类 [会话] 不存在,反之亦然”。
但是如果我从 app.php 的提供程序中删除 App\Classes\Translater::class 。
我的函数不起作用,但它不会抛出异常。
以我有限的知识,我认为不修改帮助文件是不可能的,但我可以建议在项目中查找以 __( 开头的所有内容并将其替换为自定义函数名称。双下划线函数名称是无论如何都是任意的。
我设法通过在
public/index.php
中定义我的翻译函数来做到这一点
由于该方法将在应用程序初始化后调用,因此您不应该遇到任何问题
index.php 内部:
// Overriding the default __() function to use the __translate() function
function __($text, $replace = [], $language = 'en'): string
{
// in this case i have a __translate function defined somewhere inside laravel files
return __translate($text, $replace, $language);
}
$app = require_once __DIR__.'/../bootstrap/app.php';
// other code