将命名空间添加到Laravel 4

时间:2014-01-17 16:33:29

标签: namespaces laravel laravel-4

我在使用Laravel4中的命名空间时遇到问题。

我们使用Laravel3构建了一个API,在其中我们创建了一个名为Components的整个命名空间目录,RESTful Laravel控制器访问它以在每个请求上执行逻辑。 Components命名空间是以这种方式创建的,以便我们可以跨多个应用程序重用逻辑来保持DRY。

在Laravel3中,在 application / start.php 文件中添加一个简单的事项:

Autoloader::namespaces(array(
    'Components' => 'path\to\Components',
));

这使我们可以简单地通过

在我们的任何RESTful控制器中引用静态方法
$result = Components\Services\Common::method();

在Laravel4中,它显然是一种不同的方法。我已将以下内容添加到composer.json文件

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ],
    "psr-0": {
        "Components": "path/to/API/Components"
    }
},

并运行composer dump-autoload命令将命名空间添加到 autoload_namespaces.php 文件中。

但是,我无法在Laravel4中的任何新控制器中引用命名空间。我只是在HomeController.php中找到了“Class'Component \ Services \ Common'”。

我已经检查了 autoload_real.php 文件并输出了loader变量,其中我的新命名空间列在数组的'C'元素下。但是使用它并不高兴。

我知道命名空间的工作原理与我们的Laravel3 applciation一直在使用。我宁愿不将目录复制到我们新的Laravel4应用程序中,否则我们以这种方式设计东西的原因将被否定,我们最终会维护两个代码库。命名空间目录存在于我们的Web根目录中,但不在我们的Laravel3和Laravel4应用程序之外。

感谢帮助人员

1 个答案:

答案 0 :(得分:0)

如果您的命名空间是

Components

你的申请表在

/var/www/application

您的命名空间类位于子文件夹

app/API

这是类文件名的一个例子:

/var/www/application/app/API/Components/Services/Common.php

然后你必须添加到你的作曲家json:

"autoload": {
    "psr-0": {
        "Components": "app/API"
    }
},

如果您从另一个基本路径加载并且您的命名空间类位于/var/www/Components,您可以:

"autoload": {
    "psr-0": {
        "Components": "/var/www"
    }
},

但如果他们在/var/www/components/Components,那么你必须

"autoload": {
    "psr-0": {
        "Components": "/var/www/components"
    }
},

因为"Components"是命名空间的基础,并且总是会在Composer搜索文件之前添加到路径中进行自动加载。