【发布时间】:2015-02-23 21:34:45
【问题描述】:
我对命名空间还是很陌生,很难弄清楚如何使用它们。我正在使用 Silex 微框架并尝试设置我的文件夹结构。到目前为止,我有:
cms/
ACP/
Controller/
HomeController.php
View/
Front/
Controller/
HomeController.php
View/
Template/
page.php
home.php
app.php
bootstrap.php
我正在尝试将 HomeController 加载到 Front/Controller 文件夹中。在我的 app.php 文件中,我将控制器称为 home。
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->get("/", "cms\Front\Controller\HomeController::index");
$app->get('/test', function() {
return new Symfony\Component\HttpFoundation\Response("Test successful");
});
return $app;
如果我在浏览器中转到/test,它可以正常工作。但是,当我转到 / 时,我得到一个错误。
ControllerResolver.php 第 153 行中的 InvalidArgumentException:
类“cms\Front\Controller\HomeController”不存在。
我已经在 composer.json 和 HomeController 中将 cms 定义为命名空间
<?php namespace cms\Front\Controller;
class HomeController {
public function index() {
return "Hello World, I'm the front page!";
}
}
我还尝试将HomeController.php 文件直接移动到cms 目录中,将文件中的命名空间更改为cms,然后运行$app->get("/", "cms\HomeController::index");,但它仍然不起作用。我得到了不存在的相同错误。
这是我的作曲家文件:
{
"require": {
"silex/silex": "~1.1",
// ...other requirements
},
"require-dev": {
"symfony/var-dumper": "dev-master"
},
"autoload": {
"psr-0": {
"cms": "cms/"
}
}
}
我需要做什么才能让它工作?我似乎在 Silex 网站或 Google 上找不到任何东西。有人可以帮助我了解命名空间以及它是如何工作的吗?
【问题讨论】:
-
我对 Silex 不熟悉,但在我脑海中,当您在
get()方法的第二个参数前加上反斜杠时会发生什么?例如。"\cms\Front\Controller\HomeController::index"我想知道它是否必须是一个完全限定的名称。 -
没什么,没什么区别。 Silex 是基于 Symphony 2 构建的,因此如果您熟悉它,它应该是相同的,或者非常相似。
标签: php namespaces silex