如何在 Laravel 8 中重写双下划线函数?

问题描述 投票:0回答:2

正如我之前所说,如何覆盖双下划线函数?

我不想使用辅助文件夹。

我想创建一个新类,在这个类中我想重写这个 __ 函数。我想用简单的 __("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 。

我的函数不起作用,但它不会抛出异常。

php laravel class exception helper
2个回答
0
投票

以我有限的知识,我认为不修改帮助文件是不可能的,但我可以建议在项目中查找以 __( 开头的所有内容并将其替换为自定义函数名称。双下划线函数名称是无论如何都是任意的。


0
投票

我设法通过在

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
© www.soinside.com 2019 - 2024. All rights reserved.