辅助函数未加载 laravel 5 - 调用未定义函数

Posted

技术标签:

【中文标题】辅助函数未加载 laravel 5 - 调用未定义函数【英文标题】:helper functions not loading laravel 5 - Call to undefined function 【发布时间】:2015-06-24 23:24:54 【问题描述】:

我在 Laravel 5 中加载我的帮助文件并从​​视图调用函数时遇到问题。下面是我如何尝试在我的 L5 项目中设置助手的快速概述。

    在 app/Http 中创建了一个 helpers.php 文件;

    帮助文件包含一个基本函数,用于生成页面标题。

    public function full_title($title)
    
         $base_title = 'Social Tracking Application';
    
         if (isset($title) && $title != '')
            $comp_title = $title . " | " .  $base_title;    
          else 
           $comp_title = $base_title;
         
    
    return $comp_title;
    
    

    更新了 composer.json 以自动加载新的帮助文件。

    "autoload": 
    "classmap": [
        "database"
    ],
    "psr-4": 
        "App\\": "app/"
    ,
    "files":["app/Http/helpers.php"]
    

    ,

    从终端运行 composer dump-autoload。

在这些步骤之后,我的印象是我可以从视图和控制器中使用我的助手。因此,我使用以下命令在主布局视图中调用了新的辅助函数:

<title> full_title($title)  </title>

但是,当我导航到任何页面时,我都会收到对未定义函数 full_title 的 FatalErrorMessage 调用。 (注意消息通常在标题栏中,因此我将其移至正文标签以查看错误消息)。

我无法弄清楚我在这里做错了什么,我已经看到其他人以类似方式使用自定义帮助文件的例子,但我的似乎不起作用我错过了一些明显的东西吗?

我正在管理 Homestead。

完整代码库:https://github.com/n1k41l/SocialTrak/tree/middleware-currentUser

【问题讨论】:

可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。 【参考方案1】:

我自己设法解决了这个问题,问题是我将我的 Helpers 文件创建为一个 php 类。帮助文件应该只是一个 php 文件 - 带有函数而不是带有函数的类......(一旦我发现它就明显错误:S)。

【讨论】:

【参考方案2】:

在视图或控制器中调用函数时,可能需要在函数前面使用类名,例如:

Helper::my_function()

【讨论】:

【参考方案3】:

我发现我在某些时候也遇到了这个问题,我把我的助手放在 app/Helpers/functions.php 下而不是 app/Http/helpers.php 下。将它们移到后者使一切开始正常。

【讨论】:

【参考方案4】:

我的问题是我在helper.php 文件中使用了namespace。基本上它没有类没有命名空间只是一些你想放在那里的普通函数

【讨论】:

以上是关于辅助函数未加载 laravel 5 - 调用未定义函数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.1 错误调用未定义函数 App\Http\Controllers\Auth\sendRegistermail()

PHP 致命错误:未捕获的错误:使用 Laravel 5.8 和 PHP 7.4 调用未定义函数 Whoops\Exception\xdebug_is_enabled()

Laravel 5.7 on apache 错误调用未定义函数 Illuminate\Encryption\openssl_cipher_iv_length()

将 Laravel 从 5.6 升级到 6.0 后,调用未定义的 str_random() 函数不起作用

在 Codeigniter 中调用扩展辅助函数时未定义的函数

laravel 调用未定义函数 get()