【问题标题】:Laravel custom helper class not found未找到 Laravel 自定义助手类
【发布时间】:2023-12-18 06:51:01
【问题描述】:

我创建了一个自定义 php 帮助器类,用于我的 Laravel 4 项目。

SASHelper.php 文件位于 app/libraries/elf/sas 中,在将库添加到 composer.json 文件后,我完成了 composer dumpautoload。

autload_classmap(仅最后一行):

'elf\\sas\\SASHelper' => $baseDir . '/app/libraries/elf/sas/SASHelper.php',

Helper 类(为简洁起见):

<?php

namespace elf\sas;

class SASHelper
{
static public function SupportIntToText($status)
{
        return 'Supported';
}

static public function LicTypeToText($lic)
{
        return '32-Bit';
}
}

当我尝试从我的控制器调用任一静态方法时:

$statustext = SASHelper::SupportIntToText($client->SupportStatus);

此时 Fiddler 正在报告:
“找不到类 SASHelper。”

【问题讨论】:

  • 你试过 global.php 了吗?它不需要composer dump-autoload,轻松加载类
  • 我刚刚尝试过: (app_path() .'/libraries' 和 app_path() .'/libraries/elf/sas') 到 ClassLoader::addDirectories 但没有任何效果区别。
  • 尝试评论命名空间行
  • @TryingTobemyselfRahul - 有效(添加了 /libraries/elf/sas 路径)!如果您添加这是一个我会接受的答案,只是好奇,知道它为什么起作用(或者为什么另一个不起作用)?
  • 最好的猜测是当你使用命名空间时它只对那个命名空间可用,所以当直接使用类名时它会抛出错误

标签: laravel laravel-4 helper


【解决方案1】:

说您在文件夹 app/Http/xxx/yyy 下创建了一些类,并希望自动加载它们。

  1. 在 composer.json 中添加以下内容:

    "autoload": {    
     "classmap": [    
          "database",  
          "app/Http/xxx/yyy"
      ],
    

    ... },

  2. 运行composer dump-autoload

  3. 检查文件是否存在于vendor/composer/autoload_classmap.php中

【讨论】:

    【解决方案2】:

    如果你想使用命名空间,别忘了composer dump-autoload

    在你的情况下:

    1 - 你的文件夹\你的文件.php

    <?php
    namespace elf\sas;
    
    class SASHelper{
    
    static public function SupportIntToText($status){
            return 'Supported';
    }
    
    static public function LicTypeToText($lic){
            return '32-Bit';
    }
    }
    

    2 - 配置\app.php

    添加到您的别名

    'SASHelper' => 'elf\sas\SASHelper'
    

    3 - 运行composer dump-autoload

    【讨论】:

    • 对我有用!坦克!
    【解决方案3】:

    您尝试过 global.php 吗?它不需要 composer dump-autoload,并且可以轻松加载类 – Trying Tobemyself Rahul

    我刚刚尝试过: (app_path() .'/libraries' 和 app_path() .'/libraries/elf/sas') 到 ClassLoader::addDirectories 但它没有任何区别。 – SteB

    尝试评论命名空间行 – Trying Tobemyself Rahul

    @TryingTobemyselfRahul - 有效(添加了 /libraries/elf/sas 路径)!如果您添加这是一个我会接受的答案,只是好奇,知道它为什么起作用(或者为什么另一个不起作用)? – SteB

    最好的猜测是当你使用命名空间时它只对那个命名空间可用,所以当直接使用类名时它会抛出错误。

    所以要么不使用命名空间,要么在类名之前添加命名空间,在您的示例中 $statustext = elf\sas\SASHelper::SupportIntToText($client-&gt;SupportStatus); 这应该可以工作

    【讨论】: