psr-4 自动加载在 Laravel 4 中不起作用

psr-4 autoloading not working in Laravel 4

我正在尝试创建一个目录来存储自定义 classes,因此我在该文件夹中创建了目录 app/ArgumentClub/Transformers 和 class UserTransformer.php

然后我自动加载:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ],
    "psr-4": {
        "ArgumentClub\": "app/ArgumentClub"
    }
},

和运行 composer dump-autoload。和这样的命名空间:

<?php namespace ArgumentClub\Transformers;

class UserTransformer {

我在另一个 class 中这样称呼这个 class:

<?php

use Sorskod\Larasponse\Larasponse;
use ArgumentClub\Transformers;

class UsersController extends \BaseController {

    ...

    $transformed = $this->fractal->collection($users, new UserTransformer());

但我收到错误:

Class 'UserTransformer' not found

我做错了什么?

您没有正确使用 use

use ArgumentClub\Transformers; 导入该命名空间,但不导入您要使用的 class。

要修复它,您可以扩展 use 语句(您应该这样):

use ArgumentClub\Transformers\UserTransformer

或者您可以将 Transformers 命名空间添加到实例化 UserTransformer 的位置 class

$transformed = $this->fractal->collection($users, new Transformers\UserTransformer());

当你想实例化一个命名空间 class 而不是完整的命名空间时,你需要将完整的 class 路径放在 use 语句中。