今天早上我读到CakePHP 3已经发布。我跑了一个composer update
并受到MissingControllerException
的欢迎。我很确定除了通过composer进行更新之外我什么都没做(我想添加BootstrapUI插件,但之后还原了所有的更改)。该错误消息告诉我创建一个已存在的文件(src\Controller\IndexController.php
)。
我没有更改路由,但也尝试使用骨架应用程序中的routes.php(剥离注释,仅使用默认路径/
,这将导致索引控制器的索引操作):
Router::defaultRouteClass('Route');
Router::scope('/', function ($routes) {
$routes->connect('/', ['controller' => 'Index', 'action' => 'display', 'home']);
$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
$routes->fallbacks('InflectedRoute');
});
Plugin::routes();
我还检查了作曲家的自动加载。它似乎与骨架应用程序中的相同。在这一点上,我不知道还有什么可以寻找或我可以提供给你的其他数据。也许composer.json会帮助:
{
"name": "xyz/appname",
"description": "",
"type": "project",
"keywords": [""],
"license": "GPL-3.0",
"authors": [
{
"name": "xyz"
}
],
"require": {
"php": ">=5.4.16",
"cakephp/cakephp": "~3.0",
"mobiledetect/mobiledetectlib": "2.*",
"cakephp/migrations": "~1.0",
"cakephp/plugin-installer": "*"
},
"require-dev": {
"phpunit/phpunit": "4.*",
"cakephp/debug_kit": "~3.0",
"cakephp/bake": "~1.0"
},
"config": {
"vendor-dir": "vendor/"
},
"autoload": {
"psr-4": {
"appname\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"appname\\Test\\": "tests",
"Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
}
},
"scripts": {
"post-install-cmd": "App\\Console\\Installer::postInstall",
"post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump"
},
"minimum-stability": "dev",
"prefer-stable": true
}
答案 0 :(得分:0)
我已经解决了D'OH。
我检查了作曲家的autoload_psr4.php
,发现了错误。我的应用程序叫做4Hoarders。但是不允许名称空间和类名以数字开头。所以我将命名空间更改为Hoarders
。 composer.json
的全名为4Hoarders
,因此生成了类加载:
...
'4Hoarders\\Test\\' => array($baseDir . '/tests'),
'4Hoarders\\' => array($baseDir . '/src'),
...
解决方案是改变composer.json:
"autoload": {
"psr-4": {
"4Hoarders\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"4Hoarders\\Test\\": "tests",
"Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
}
},
到那个:
"autoload": {
"psr-4": {
"Hoarders\\": "src"
}
},
"autoload-dev": {
"psr-4": {
"Hoarders\\Test\\": "tests",
"Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
}
},