命名空间助手不会在Laravel 4中加载

时间:2014-03-06 15:31:55

标签: namespaces laravel-4 helper

我有一个控制器在我的app / helpers目录中调用一个帮助器类,然后帮助器调用它的命名空间中的另一个类,但它找不到该类。

所以这是我的控制器:

<?php

namespace App\Controllers\Dash;

use \App\Models\SalesFlyer;
use \App\Helpers\MyPdf;

class FlyerBuilderController extends BaseController {

    public function getPdf($flyerId = null) {
        $flyer = new SalesFlyer();
        $flyerData = $flyer->getSalesFlyerName($flyerId);

        $flyerPath = public_path().'/assets/media/flyers/'.Session::get('userid').'/'.$flyerData->name.'-'.$flyerId.'.html';

        return MyPdf::downloadPdf($flyerPath, $flyerData->name);
    }
}

它完全可以捕获MyPdf类。这是MyPdf类:

<?php

namespace App\Helpers;

class MyPdf {

    public static function downloadPdf($filePath, $filename) {

        $client = new PdfCrowd("anthonythomas", "1ebd0d6e3ec1dfa83a6c5f3dd32906f0");

        // other code here
    }
}

PdfCrowd类位于App \ Helpers命名空间内,如下所示:

<?php

namespace App\Helpers;

//
// Pdfcrowd API client.
// 
class PdfCrowd { }
  

Class&#39; App \ Helpers \ PdfCrowd&#39;找不到

这是我的start / global.php文件:

<?php

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/controllers/dash',
    app_path().'/controllers/dash/product',
    app_path().'/models/Product',
    app_path().'/models',
    app_path().'/database/seeds',
    app_path().'/helpers',

));

然后这是我的作曲家:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/controllers/dash",
        "app/controllers/dash/product",
        "app/models",
        "app/models/Product",
        "app/helpers",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
}

知道为什么我会收到这个错误吗?..

2 个答案:

答案 0 :(得分:2)

一切看起来都不错,但你也要记得

composer dump-autoload

每次创建新课程。另外,检查文件

vendor/composer/autoload_classmap.php

你必须在那里看到你的助手课程。

但是如果您使用PSR-4,则可以使用相同的命名空间,而不会再次执行composer dump-autoload

"autoload": {
    "psr-4": {
        "App\\Helpers\\": "app/helpers"
    }
},

请记住从类别地图中删除"app/helpers",

答案 1 :(得分:0)

对于共享托管服务提供商来说没问题...即使你用psr-4添加一个新的命名空间和更新作曲家,你也必须用当地计算机上的当前计算机替换供应商目录,以便它实际通过!在我意识到每次在本地发出composer dump-autoload时我必须更换供应商目录时,这节省了我很多时间。

相关问题