【问题标题】:Can't autoload a helper file - Laravel 5.3无法自动加载帮助文件 - Laravel 5.3
【发布时间】:2017-03-12 18:50:13
【问题描述】:

我有一个帮助文件位于

app/Helpers/Navigation.php

具有命名空间的帮助文件:

   <?php

namespace App\Helpers;

class Navigation
{
    public static function isActiveRoute($route, $output = 'active')
    {
        if (Route::currentRouteName() == $route) {
            return $output;
        }
    }
}

我想自动加载这个文件。所以在我的 composer.json 我有这个:

"autoload": {
    "classmap": [
      "database"
    ],
    "psr-4": {
      "App\\": "app/"
    },
    "files": [
      "app/Helpers/Navigation.php"
    ]
  },

在我看来,我想这样做:

<li class="{{ isActiveRoute('main') }}">

但我得到了错误:

Call to undefined function isActiveRoute()

不知道我做错了什么。当我更改作曲家文件时,我做了作曲家 dumpautoload。我尝试再次安装作曲家,也没有改变任何东西。

【问题讨论】:

    标签: php laravel-5 composer-php


    【解决方案1】:

    我有同样的问题,我假设您使用的是 inspinia laravel 版本,所以问题是他们忘记删除文件 app/Helpers/Navigation.php

    如果您查看他们正在使用的 AppServiceProvider '/../Http/Helpers/Helpers.php'

    如果你想做 Navigation::isActiveRoute 然后使用类文件

    但是如果你想使用{{ isActiveRoute('youRouteName') }}那么你需要使用'/../Http/Helpers/Helpers.php'中的函数并且不需要使用de composer.json(这是在另一个另一个问题的解决方案)

    我知道我有同样的感觉......

    ps:请原谅我的英语

    【讨论】:

      【解决方案2】:

      对于helpers 文件,您不想使用类。您只需定义要使用的功能。

      此外,最好将函数包装在检查中以确保该函数不存在。

      Naviation.php的内容替换为:

      <?php
      
      if (! function_exists('isActiveRoute')) {
      
          /**
           * [Description of this function]
           * 
           * @param $route
           * @param string $output
           * @return string
           */
          function isActiveRoute($route, $output = 'active')
          {
              if (Route::currentRouteName() == $route) {
                  return $output;
              }
          }
      }
      

      希望这会有所帮助!

      【讨论】:

      • 这似乎是一个很好的提示,但它并不能解决我的自动加载问题。我替换了我的代码,我仍然得到同样的错误
      • 不是您应该需要,但您是否再次运行composer dumpautoload?此外,请仔细检查您在作曲家文件中的路径是否正确,即大小写和拼写。最后,检查是否没有任何类型的缓存,例如opcache.
      • 是的,我确信这一定是拼写问题,但我检查了所有内容,但似乎并非如此。我可能只是去服务提供商的路线让它工作。虽然这只是在避免问题。
      • 好的,所以当我完成您的解决方案并删除命名空间时它起作用了,因为显然 Route:: 位于另一个命名空间中。谢谢!
      【解决方案3】:

      如果您的帮助文件是一个类,则无需自动加载它。

      只需在config/app.php 中创建一个别名:

      'aliases' => [
       ...
          'NavigationHelper' => App\Helpers\Navigation::class,
       ...
      

      在你的 Blade 模板中使用它:

      <li class="{{ NavigationHelper::isActiveRoute('main') }}">
      

      最后,您可以从composer.json文件中删除以下代码并运行composer dumpautoload

      "files": [
        "app/Helpers/Navigation.php"
      ]
      

      【讨论】:

      • 这行得通,但我觉得它有点避免这个问题。但这解决了我的错误,所以它是一个有效的解决方案!谢谢
      • @Ross Wilson 的解决方案更符合我的要求。但你得到了赞成!
      猜你喜欢
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2014-04-20
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多