更新:我提出的问题并没有完全涵盖我进行此升级的深度!如果你偶然发现这个,我希望我推出的答案对你有用
所以,为了让“论坛”插件正常工作,我决定将cakephp从1.3升级到2.1
(这是因为论坛插件使用了一些名为CakeDC的工具,而且他们已经达到了cakephp 2.0,令人惊讶的是,2.3版本的论坛并不清楚哪个工具可以使用...)
好的,所以我按照此处的说明运行了蛋糕升级魔术的事情:
http://book.cakephp.org/2.0/en/console-and-shells/upgrade-shell.html#upgrade-shell
然后我运行了升级程序,它说它做了很多事情,看起来做了做了很多事情。
现在,当我访问我的网站时,它已经关闭 - 根本没有回应。
apache中的错误日志读取:
[Thu Apr 05 02:58:04 2012] [错误] [客户端173.45.125.112] PHP致命错误:找不到应用程序核心文件。请创建/cake_install/app/config/core.php,并确保它可由PHP读取。在第393行的/cake_install/cake/libs/configure.php
该文件不存在的原因是它在升级中已更改为大写“C”Config。我错过了什么?
答案 0 :(得分:3)
您可能在app/webroot/index.php
中设置了自定义Cake路径。 Cake 2.0的目录结构略有改变,通常这将由新代码处理,该代码自动为CAKE_CORE_INCLUDE_PATH
找到正确的值。另外,请确保在同一APP_DIR
文件中正确设置index.php
。
确保app/webroot/index.php
包含Cake的正确路径,即/path/to/cake/lib
。
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', DS.'path'.DS.'to'.DS.'cake'.DS.'lib');
}
如果设置Cake的方式不太习惯,那么恢复到标准define('CAKE_CORE_INCLUDE_PATH', ROOT)
可能也会有效。
答案 1 :(得分:3)
这是关于从1.3迁移到2.x的博文:http://www.forceflow.be/2011/11/12/migrating-from-cakephp-1-3-to-2-0/
为了将来参考,我在此处列出了该帖子的内容。享受!
入门
有几种方法可以更新,但对于中小型项目,我发现最好只需解压缩新的CakePHP 2结构,然后手动将控制器和视图复制到新文件夹。请注意,文件夹结构已发生显着变化。例如,控制器映射现在是Controller。注意你复制文件的位置 - 不要担心文件名本身,我们稍后会讨论。
确保使用应用程序的值更新core.php和database.php(现在位于(cakephp root)/ app / Config中)。确保从旧安装中复制salt和cipherseed值,因为CakePHP将在您使用默认值时继续抱怨 - 这是一个安全风险。此外,要启动并再次运行数据库连接,语法已更改:
'driver' => 'mysqli'
变为
'datasource' => 'Database/Mysql'
批量工作:通过控制台升级
为了将所有app文件重命名为新的CakePHP文件结构,有一个控制台命令。 CakePHP 2.0的新功能是每个应用程序现在都有自己的控制台。在/ app / Console中导航到应用程序的控制台(而不是/ lib / Cake中的控制台!),确保控制台命令可执行,方法是执行chmod + x,然后执行:
./cake upgrade all
这会将所有文件重命名为新的蛋糕标准,并更新PHP代码中的所有引用。
清理
不幸的是,这不是结束。您的代码现在运行正常可能很薄。有关更多信息,请查看CakePHP 2.0迁移指南。我将在这里总结我最常处理的问题:
在您的视图中,您现在必须通过 $ this 对象来解决Helper类。不再打电话,例如
$html->link(
,它是
$this->Html->link(
现在,先生。
此外:
已删除 AjaxHelper ,以及用于AJAX样式搜索的便捷功能,例如 observefield 。我使用jQuery烹饪了自己的 observefield - 使用风险自负。我序列化一个表单,在这种情况下,它包含一个查询输入框,允许我对预订进行实时搜索和更新。
$this->Js->get('#query')->event('keyup', $this->Js->request(
array('controller' => 'sales','action' => 'searchReservations', $event['Event']['id']),
array(
'update' => '#view',
'async' => true,
'dataExpression' => true,
'method' => 'post',
'data' => $this->Js->serializeForm(array('isForm' => false, 'inline' => true)))
答案 2 :(得分:1)
使用Cake Shell升级工具后,我遇到了同样的问题。虽然我们的网络应用程序很大,但我们从未自定义index.php文件。
用新下载的CakePHP cakephp-2.3.4 / app / webroot / index.php 替换 myapp / app / webroot / index.php 解决了此问题我
我不确定为什么CakePHP Upgrade Shell或它的说明没有指定更改index.php文件,但正如@ bharal冗长而且很好的答案所示,自从有了更多的工作要做升级Shell不会做任何事情。