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
语句中。
我正在尝试创建一个目录来存储自定义 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
语句中。