Laravel 4中服务提供商的问题

时间:2014-02-23 02:38:38

标签: php laravel laravel-4

作为Laravel的新手,我在Laracasts上关注 Repositories Simplified 并创建了一个BackendServiceProvider类。

现在,当我想做的时候

php artisan generate:controller TestController

我收到错误:

PHP Fatal error:  Class '_testic\repos\BackendServiceProvider' not found in
/vagrant/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php
on line 158

出了什么问题?我该如何解决?

到目前为止我做了什么:

  1. 将我的服务提供商放入config/app.php
  2. 然后将其添加到composer.json内的psr-0

    {
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "require": {
        "laravel/framework": "4.1.*"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/database/seeds",
            "app/tests/TestCase.php"
        ]
    },
    "psr-0": {
            "_testic": "app/"  // <----- my entry
        },
    "scripts": { ...
    
  3. 运行composer dump-autoload -o

2 个答案:

答案 0 :(得分:2)

psr-0进入自动加载。就在classmap旁边。

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ],
    "psr-0": {
        "_testic": "app/"  // <----- my entry
    }
}

答案 1 :(得分:1)

通常这些问题来自名称空间,文件名或目录结构中的错误。

您将PSR-0命名空间定义为:

"_testic": "app/" --> which means 'my _testic namespace is stored in the folder app/'

并且,根据错误消息,您将文件命名为

_testic\repos\BackendServiceProvider

所以我必须假设您将在其他文件中使用该特定文件:

use _testic\repos\BackendServiceProvider;

这也意味着您必须在文件夹

中包含BackendServiceProvider.php文件
/whateverRootFoldersYouMayHave/app/_testic/repos/BackendServiceProvider.php

如果这不是您的文件夹结构,您将收到此错误。

请注意,在PSR-0中,整个文件夹结构必须与您定义为根命名空间的文件夹结构相同。

相关问题