今天早上我读到CakePHP 3已经发布。我跑了一composer update
,迎接我的是MissingControllerException
.我很确定除了通过作曲家更新之外,我什么也没做(我想添加 BootstrapUI 插件,但后来恢复了所有更改(。错误消息告诉我创建一个已经存在的文件(src'Controller'IndexController.php
(。
我没有更改路由,但也尝试使用路由.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
}
我已经解决了 D'OH。我检查了作曲家的autoload_psr4.php
并发现了错误。我的应用程序名为4Hoarders。但是命名空间和类名不允许以数字开头。所以我将命名空间更改为 Hoarders
.composer.json
具有全名 4Hoarders
,因此生成了如下所示的类加载:
...
'4Hoarders''Test''' => array($baseDir . '/tests'),
'4Hoarders''' => array($baseDir . '/src'),
...
解决方案是从这里更改作曲家.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"
}
},