Silex 命名空间
Silex namespaces
我对命名空间还是很陌生,很难理解如何使用它们。我正在使用 Silex Microframework 并尝试设置我的文件夹结构。到目前为止我有:
cms/
ACP/
Controller/
HomeController.php
View/
Front/
Controller/
HomeController.php
View/
Template/
page.php
home.php
app.php
bootstrap.php
我正在尝试加载 Front/Controller 文件夹中的 HomeController。在我的 app.php 文件中,我正在调用家庭控制器。
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
,它工作正常。但是,当我转到 /
时出现错误。
InvalidArgumentException in ControllerResolver.php line 153:
Class "cms\Front\Controller\HomeController" does not exist.
我在 composer.json 中将 cms
定义为命名空间,在 HomeController 中我有
<?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 上找到任何内容。有人可以帮助我了解命名空间及其工作原理吗?
您需要将源文件夹添加到 composer 自动加载中 (https://getcomposer.org/doc/01-basic-usage.md#autoloading)
"autoload": {
"psr-4": {"Acme\": "./"}
}
在您的情况下,路径“./”应该有效(尚未测试),否则您应该尝试将 cms
文件夹放入 src
之类的文件夹并将路径设置为 "src/"
记得要运行composer dump-autoload
重新生成autoload.php
我对命名空间还是很陌生,很难理解如何使用它们。我正在使用 Silex Microframework 并尝试设置我的文件夹结构。到目前为止我有:
cms/
ACP/
Controller/
HomeController.php
View/
Front/
Controller/
HomeController.php
View/
Template/
page.php
home.php
app.php
bootstrap.php
我正在尝试加载 Front/Controller 文件夹中的 HomeController。在我的 app.php 文件中,我正在调用家庭控制器。
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
,它工作正常。但是,当我转到 /
时出现错误。
InvalidArgumentException in ControllerResolver.php line 153:
Class "cms\Front\Controller\HomeController" does not exist.
我在 composer.json 中将 cms
定义为命名空间,在 HomeController 中我有
<?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 上找到任何内容。有人可以帮助我了解命名空间及其工作原理吗?
您需要将源文件夹添加到 composer 自动加载中 (https://getcomposer.org/doc/01-basic-usage.md#autoloading)
"autoload": {
"psr-4": {"Acme\": "./"}
}
在您的情况下,路径“./”应该有效(尚未测试),否则您应该尝试将 cms
文件夹放入 src
之类的文件夹并将路径设置为 "src/"
记得要运行composer dump-autoload
重新生成autoload.php