如何创建一个全局函数,可以从任何控制器和 Blade 文件中访问

17 浏览
0 Comments

如何创建一个全局函数,可以从任何控制器和 Blade 文件中访问

我有两个控制器文件,homecontroller和backendcontroller。有什么最好的方法可以创建全局函数并从这两个文件中访问它?

我在这里找到了Arian Acosta的答案,链接为https://stackoverflow.com/questions/32419619/how-do-i-make-global-helper-functions-in-laravel-5,我觉得很有帮助,但我想知道是否有更简单的方法。我将非常感谢任何建议。

0
0 Comments

如何创建可以从任何控制器和Blade文件中访问的全局函数

问题的出现原因:

- 需要在多个控制器和Blade文件中共享同一个函数

- 不想在每个控制器和Blade文件中重复定义相同的函数

解决方法:

- 创建一个类,并在需要的地方使用其实例

- 在app文件夹中创建一个名为Helpers的文件夹,在其中创建一个名为AppHelper的文件

- 在AppHelper文件中定义所需的函数

- 在控制器和Blade文件中调用AppHelper类的实例来访问这些函数

代码示例:


在控制器中使用:

public function index()
{
    //需要调试查询
   \App\Helpers\AppHelper::instance()->startQueryLog();
   //执行查询的代码
   \App\Helpers\AppHelper::instance()->showQueries();
}

在Blade文件中使用:

{{ \App\Helpers\AppHelper::instance()->bladeHelper($value) }}

可选:减少命名空间的开销

- 在config\app.php文件中为AppHelper类创建别名

- 在控制器或Blade文件中直接调用别名即可

\AppHelper::instance()->functioName();

问题中提到的其他观点:

- 可以删除instance函数,并将其他函数都定义为静态函数,直接调用AppHelper::bladeHelper()

- 可能需要运行composer dump-autoload命令以供Laravel识别新文件

- 这种方案效率低下,因为每次调用instance时都会创建一个新的类实例。而且,这些“全局”函数似乎完全不相关,并且不使用任何需要“this”对象的内容。因此,它们不应该是同一个类的一部分。这似乎是对面向对象编程概念的完全误用,是一种糟糕的编码风格。

0
0 Comments

问题的出现原因是需要在任何控制器和模板文件中访问全局函数。为了解决这个问题,可以按照以下步骤进行操作:

更新:

步骤1:

在app文件夹内添加一个文件夹。

app->Helper

步骤2:

在Helper文件夹中添加一个PHP类。

例如:Helper.php

在Helper.php文件中添加命名空间和类。

namespace App\Helper;
class Helper
{
}

将Helper.php注册到config/app.php文件中。

'aliases' => [
       ....
       'Helper' => App\Helper\Helper::class
 ]

现在,在Helper.php文件中编写所有的函数,它们将在任何地方都可访问。

如何在控制器中访问?

步骤1:在控制器顶部添加命名空间。

use App\Helper\Helper;

步骤2:调用函数 - 假设Helper类中有一个getInformation()函数。

$information = Helper::getInformation()

嗨,Rahul。这对我有用。我选择了这个答案作为已接受的答案,因为我认为这是最简单的方法。

你在哪里创建文件?是任何地方吗?

你的答案不完整。请更新一下,以便用户可以知道common.php文件的路径。谢谢。

有没有办法在控制器中自动运行该方法,而不需要显式调用它?

如何使用别名调用助手函数?

怎样从控制器调用助手函数?

向控制器添加一个命名空间。例如,如果类名为Helper。使用App\Library\Helper; public function getData() { Helper::getInformation(); }

如何在Lumen 8.0中使用助手函数?请分享您的观点。非常感谢。

如何在Blade文件中访问助手函数?

0
0 Comments

如何创建可以从任何控制器和Blade文件中访问的全局函数

在Laravel项目中,有时我们需要创建可以从任何控制器和Blade文件中访问的全局函数。下面提供了一种简单的解决方法:

1. 在`app`目录下创建一个名为`Helpers`的文件夹。

2. 在`Helpers`目录中创建一个名为`your_helper_function.php`的PHP文件。

3. 在`your_helper_function.php`文件中添加你的函数,例如:

function your_function($parameters){
    //function logic
} 
function your_another_function($parameters){
    //function logic
} 

4. 在`composer.json`文件的`autoload`键下添加该文件的路径,例如:

"autoload": {
    ...
    "files": [
        "app/Helpers/your_helper_function.php"
    ]
    ...
}

5. 最后,重新生成Composer的自动加载文件。在项目目录中运行以下命令:

composer dump-autoload

完成以上步骤后,你就可以在Laravel项目的任何地方访问`your_function()`或`your_another_function()`了。

如果你还有疑问,可以查看我的博客文章,了解如何执行这些操作:[如何在Laravel中使用Composer添加全局函数?](https://www.kerneldev.com/2017/12/05/how-to-add-a-global-function-in-laravel-using-composer/)

关于`composer dump-autoload`命令,它的作用是重新加载Composer自动加载文件。当你对`composer.json`文件进行更改时,运行该命令会重新加载文件。这是一个良好的习惯,可以避免出现问题。

对于大型团队或未来计划扩展的项目,这种方法可能不是推荐的方式,因为它可能会带来一些"神奇"的方法。其他开发人员可能需要花费大量时间来了解这些神奇方法的实现。根据我的观点,使用Helpers的方式更好(与config/app.php结合使用)。

需要注意的是,这种方法要求文件不被命名空间所限制。因此,如果你尝试同时使用这种方法和命名空间,请注意避免冲突。

这就是如何创建一个可以从任何控制器和Blade文件中访问的全局函数的方法。希望对你有所帮助!

0