我有一个很大的PHP项目,我没有使用任何框架(也没有MVC模式),我想逐渐将它移植到Laravel上,(几乎)没有停机时间。
我正在寻找一种方法,使已经移植到Laravel的代码片段的迁移透明化,同时保持功能较旧的普通PHP代码。
例如,Laravel使用类和方法(例如Input::get())"覆盖"超全局变量($_GET, $_POST等)。我的纯PHP项目当然直接使用了超全局变量。我怎样才能克服Laravel下的这些"不兼容性",而不必立即重写我所有的PHP代码?
否则,如果你认为这个任务太难了,有没有什么PHP框架,由于它的内部结构,可以使这个任务更容易?
更新:
在laravel中仍然可以使用超全局。我得到了一个狡猾的错误:Laravel内部设置error_reporting为E_ALL,并显示一个自定义的错误堆栈跟踪页面,甚至为PHP E_NOTICE,但没有显式指定错误级别(这是一个NOTICE错误),即使这是由PHP错误报告消息引擎默认完成的。
让我说,对于Laravel核心开发者,我认为这种"部分沉默"的行为通常会误导任何试图将自己的代码移植到他们的框架上的PHP开发者。
TL;DR
不要这样做。
常见的误解
如果您有一个现有的项目,那么将它嫁接到框架上将不会给您带来任何好处。框架是而不是一些魔法酱,它奇迹般地使代码更好或使站点运行得更快。
相反,框架是一种工具,(据说)可以帮助你在更短的时间内完成"常见任务"。此外,作为一个副作用,在项目中停止使用框架是极其困难的(例如,如果它停止使用),因为现在您的所有代码都紧密地焊接到框架上。
这就是你目前遇到这些问题的原因:
-
我如何克服这些"不兼容"在Laravel下,而不必立即重写我所有的PHP代码?
你不能。按照Laravel框架的要求重写它,否则它将无法工作。
-
(…)是否有任何PHP框架,由于其内部结构,将使这项任务更容易?
不,没有。所有流行的框架都希望你重写你的代码,以便它被绑定到一个框架。
更好的方法
但是你已经有一个工作的应用程序了。如果您专注于改进现有的代码库,您将获得更好的结果:
- 确保你遵循坚实的原则
- 将业务逻辑与表示和数据库抽象分离
- 开始为代码中非常不显眼的部分添加单元测试
- refactor, refactor, refactor
<子> 注::这里列出的材料可能会有帮助子>