当前位置: 首页 > 知识库问答 >
问题:

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

卜勇
2023-03-14

我有两个控制器文件家庭控制器和后端控制器。创建全局函数并从两个文件访问它的最佳方法是什么?

我发现阿里安·阿科斯塔的回答很有帮助,但我想知道是否有最简单的方法。如有任何建议,我将不胜感激。

共有3个答案

濮阳立果
2023-03-14

更新:

步骤1在应用文件夹应用中添加文件夹-

步骤2:在Helper文件夹中添加php类,例如Helper。php

将命名空间和类添加到帮助器。php

namespace App\Helper;

class Helper
{

}

注册这个助手。php转换为config/app。php文件

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

现在,在Helper中编写所有函数。php和它将在任何地方都可以访问。

如何从控制器访问?

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

use App\Helper\Helper;

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

$information = Helper::getInformation()
艾焕
2023-03-14

>

  • 应用程序目录中创建一个新的助手文件夹。

    创建一个名为your\u helper\u函数的php文件。php在该帮助程序文件夹中。

    您的\u helper\u函数中添加您的函数。php

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

    将此文件添加到您的composer.json的Files键中

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

    然后最后重新生成composer自动加载文件。(在项目目录中运行此操作)

    composer dump-autoload

    就这样了!现在,您可以在Laravel项目的任何部分访问your_function()your_another_function()

    如果您仍然有任何困惑,请查看我的博客文章,了解如何做到这一点:

    如何添加一个全局函数在Laravel使用作曲家?

  • 姚麒
    2023-03-14

    一种方法是创建一个类并使用它的实例,这样您不仅可以访问控制器、刀片服务器或任何其他类中的类对象。

    在应用文件夹中创建名为Helpers的文件夹,并在其中创建文件名AppHelper或您选择的任何文件名

    <?php
    namespace App\Helpers;
    
    class AppHelper
    {
          public function bladeHelper($someValue)
          {
                 return "increment $someValue";
          }
    
         public function startQueryLog()
         {
               \DB::enableQueryLog();
         }
    
         public function showQueries()
         {
              dd(\DB::getQueryLog());
         }
    
         public static function instance()
         {
             return new AppHelper();
         }
    }
    

    在控制器中,您可以调用各种函数

    public function index()
    {
        //some code
    
       //need to debug query
       \App\Helpers\AppHelper::instance()->startQueryLog();
    
       //some code that executes queries
       \App\Helpers\AppHelper::instance()->showQueries();
    }
    

    假设您在一个刀片文件中,下面是如何调用应用程序刀片助手功能

    some html code
    {{ \App\Helpers\AppHelper::instance()->bladeHelper($value) }}
    and then some html code
    

    您还可以通过在config\app.php中为AppHelper类创建别名来减少调用完整函数命名空间\App\Helper的开销

    'aliases' => [
           ....
           'AppHelper' => App\Helpers\AppHelper::class
     ]
    

    在控制器或刀片文件中,您可以直接调用

    \AppHelper::instance()->functioName();
    
     类似资料:
    • 问题内容: 假设我们提供以下服务: 然后,从控制器,我会说: 问题分为两部分: 全局可访问性 :如果我有100个控制器,并且所有人都需要访问该服务,则我不想显式注入它100次。 如何使服务在全球范围内可用? 目前,我唯一能想到的就是从根范围内包装它,这违背了目的。 视图的 可访问性:如何 从视图 内访问服务? 这篇文章建议从控制器内部包装服务。如果要花这么长的时间,似乎我应该只在根范围上实现功能?

    • 我在建一个拉威尔的网站。我希望提交的表单数据运行查询,并将结果插入表格式。我正在使用oracle DB,并已将其连接到Laravel。另外,我已经创建了表单,查询结果正确。我不能做的是将结果成功地传递到表中。 我的文件如下: > Routes.php(或web.php较新的laravel版本): 搜索。刀身php(带有post方法的表单) 我的控制器(NewController.php)运行查询。

    • 问题内容: 我正在尝试通过常规函数访问全局变量,这可能吗? 我已经使用$ rootScope设置了一些变量,并且我试图通过回调函数来访问它。从控制器调用此回调。我不想传递该回调。 有什么办法可以访问吗? 我愿意使用服务。 请提出建议。 谢谢 我试图按以下方式访问rootScope: 我的服务是: 它在updateStatus fn下显示isFBLoggedin为true,但未反映在视图上 我正在打

    • 如果可能的话,我愿意使用服务。 请建议。 谢谢 我还使用来呈现视图

    • 问题内容: 我将所有AngularJS控制器都放在一个文件controllers.js中。该文件的结构如下: 我想做的是将Ctrl1和Ctrl2放入单独的文件中。然后,我会将这两个文件都包含在index.html中,但是应该如何构造呢?我尝试做这样的事情,它在网络浏览器控制台中引发错误,提示找不到控制器。有什么提示吗? 问题答案: 文件一: 文件二: 文件三: 按该顺序包括。我推荐3个文件,因此模

    • 我的所有AngularJS控制器都在一个文件controllers.js中。该文件的结构如下: 我想做的是将Ctrl1和Ctrl2放入单独的文件中。然后,我会在index.html中包含这两个文件,但该如何结构化呢?我试着做这样的事情,它在web浏览器控制台中抛出一个错误,说它找不到我的控制器。有什么提示吗? 我搜索了StackOverflow并发现了这个类似的问题--然而,这个语法在Angula