我管理一个CakePHP 1.1 CMS网站,我们的主机刚刚将PHP升级到5.3,导致了一些错误,例如:
Notice: Undefined variable: banner_image in /home2/intiwara/cake/app/views/layouts/public_site.thtml on line 49
Notice: Undefined variable: news_menu in /home2/intiwara/cake/app/views/articles/volunteer_animal_refuge.thtml on line 73
我可以通过改变cake / cake / libs / configure.php第133行隐藏错误:
error_reporting(E_ERROR);
但是仍然找不到变量和模型,因此页面无法呈现。
我意识到我需要升级到CakePHP 2.1,我发现的每篇文章都在讨论这个问题。然而,我是这里唯一的技术志愿者,我明天下午只有几个小时让网站正常工作,然后我在埃塞俄比亚农村工作了两个星期的工作,所以我希望有一个'解决方案'解决方案我可以在此期间到位。 (主持人没有告诉我们这件事即将发生......)
我不需要管理员功能,我不介意隐藏错误 - 我只需要网站进行渲染。有什么方法可以欺骗PHP 5.3来“看到”这些变量吗?
非常感谢你 克里斯
答案 0 :(得分:3)
以下是我从1.1转换为1.2的SVN评论。我没有打扰他们整理,(除了奇怪的“ED:”),因为我可能是最后一个从CakePHP 1.1升级的人,我应该在我离开时把灯关掉..这些是继之后的步骤我在CakePHP网站的附录中完成了标准的'替换蛋糕目录'和'配置'更新:http://book.cakephp.org/view/3/The-Manual#!/1.2/en/view/411/Migrating-from-CakePHP-1-1-to-1-2。
用我生锈的PHP升级一个相当简单的CMS花了我两天的时间,并且由于糟糕的文档和使用框架的复杂性,努力阻止我再次使用CakePHP。 (虽然我浪费了半天时间,当我的主人认为我的一个模板文件是病毒时,所以阻止我可以使用的每个IP地址。)
如果我发现form->错误作为html-> tagErrorMsg的替代,那么最大的节省时间。相反,我将它们全部删除,按照1.2中的标准做法将错误放入模型中,然后重新添加它们。 form->输入自动显示错误,但我更容易使用form-> select而不是form-> input('type'=>'select'..由于转换选项和参数的复杂性从html->选择使用正则表达式进行form->输入。
Html帮助程序已迁移到表单助手
- > renderElement()需要更改为 - > element()
- > del()需要更改为 - > delete()
需要将generateList()迁移到find('list',array())
VALID_EMAIL,VALID_NOT_EMPTY(和VALID_NUMBER)已替换为 array('rule'=> array('email')) 和 array('rule'=> array('minLength',1)) - ED:这些后来更新为包含默认错误消息,但我认为如果我知道form->错误我不需要(
改变 form->输入到form->文本 形状配合>提交 形状配合>密码 请查看此处的代码https://github.com/zeroasterisk/CakePHP-cake_up-shell/blob/master/cake_up.php以获取一些方便的详细信息。
控制器this->重定向现在相对于1.2,所以我把一个初始的“/”放在我没有的1.1版本中
form-> input(Model / property => form-> text(Model.property) html-> tagValue(Model / property => html-> value(Model.property) html-> selectTag(Model / property => form-> select(Model.property $形式 - > textarea的('Article.intro $形式 - > labelTag('Article.body
现在在模型而不是模板文件中指定了错误消息 除了控制器生成的错误,例如添加用户时重复的用户名 - 这些设置方式与之前相同,但只显示echo $ username_error - ED:这也是一个错误 - 后来更改为form->错误('model.field',$ custom_error,选项,例如css类) HTML-> labelTag =>形状配合>标签 tagValue =>值 selectTag =>选择 在帮助程序生成的HTML中,使用句号作为model.field分隔符而不是正斜杠,例如,html-> value(model.field)而不是html-> tagValue(model / field)
删除san-> sql和cleanUpFields 删除默认错误消息tagErrorMsg - ED:这和我的大部分验证更新都是错误的 - 我应该用form->错误替换html-> tagErrorMsg 由于1.2中的新错误无法在选项
创建model.saveString以生成sql insert语句似乎正在工作(ED:我将一个方法放在CakePHP的核心中,为模型生成INSERT stmnt,允许我进行自动电子邮件备份)
使用集成表单显示错误的替代方法 - >输入法 - 更优雅,显示错误和所有类型的HTML输入控件,但是用复杂的自定义参数数组替换特定调用的正则表达式会过于复杂/不可靠的。
在控制器中,替换了model->使用this-> set(this-> data)验证(模型),然后使用model-> validates()
验证: 为每个输入添加了form->错误调用。 (ED:应该使用正则表达式搜索并用form->错误取代html-> tagErrorMsg ..这会节省大量的转换工作)
自定义控制器生成的错误消息必须使字段名无效,并且在模板中,form->错误中的字段必须与该字段名匹配,即使它不是模型字段名,例如password1和password2。 / p>
答案 1 :(得分:0)
如果您遵循惯例,您可能会有一些运气,并且如果您对CakePHP有更高的使用经验,则可以在合理的时间内升级到1.3。从1.1到2.1 ......这不会那么顺利。
在不知道整个代码和所有问题的情况下,很难说出任何问题,甚至不能说是否更好地尝试解决这些问题或者适当升级到1.3。
如果这确实是关键任务,请私下与我联系,我会告诉您与可以完成任务的公司的联系。