Sty*_*hon 3 php namespaces silex
我仍然是名称空间的新手,并且很难理解如何使用它们.我正在使用Silex Microframework并尝试设置我的文件夹结构.到目前为止,我有:
cms/
ACP/
Controller/
HomeController.php
View/
Front/
Controller/
HomeController.php
View/
Template/
page.php
home.php
app.php
bootstrap.php
Run Code Online (Sandbox Code Playgroud)
我正在尝试在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;
Run Code Online (Sandbox Code Playgroud)
如果我进入/test浏览器它工作正常.然而,当我去/那时我得到一个错误.
ControllerResolver.php第153行中的InvalidArgumentException:
类"cms\Front\Controller\HomeController"不存在.
我已经cms在composer.json和HomeController中定义为命名空间
<?php namespace cms\Front\Controller;
class HomeController {
public function index() {
return "Hello World, I'm the front page!";
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将HomeController.php文件直接移动到cms目录中,将文件中的命名空间更改为just 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/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了让这个工作,我需要做什么?我似乎无法在Silex网站或Google上找到任何内容.有人可以帮助我了解名称空间以及它是如何工作的吗?
您需要将源文件夹添加到作曲家自动加载中(https://getcomposer.org/doc/01-basic-usage.md#autoloading)
"autoload": {
"psr-4": {"Acme\\": "./"}
}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,路径"./"应该工作(没有测试),如果不是你应该尝试将cms文件夹放入文件夹src,并将路径设置为"src /"
记得跑去composer dump-autoload重生autoload.php
| 归档时间: |
|
| 查看次数: |
1229 次 |
| 最近记录: |