我希望将MVC框架与PHP一起使用,以便在代码和表示之间实现良好的分离。我现在开始看看CakePHP。它看起来不错,但关于所有这些神奇的字符串是什么?
看看下面的代码(取自CakePHP食谱):
class User extends AppModel {
var $name = 'User';
var $hasOne = 'Profile';
var $hasMany = array(
'Recipe' => array(
'className' => 'Recipe',
'conditions' => array('Recipe.approved' => '1'),
'order' => 'Recipe.created DESC'
)
);
}
这些神奇的字符串困扰着我。代码中的字符串应该只是要输出的文本!
'Recipe.created DESC'中的一个拼写错误,它将无法正常工作。这里没有智能感知/代码完成帮助!
另外,如果我想将'Recipe'重新整合到别的东西怎么办?我必须手动搜索所有代码,并找出它是常规文本还是其他魔术字符串。
其他PHP MVC框架更好吗? (阅读:少或没有魔术字符串)
关于如何避免魔术弦的任何链接(至少尽可能多)......?
答案 0 :(得分:2)
Cake遵循'Convention over Configuration'方法。它是一个框架,可用于快速原型化和部署(主要)基于CRUD的应用程序。在幕后发生了很多“魔术”,如果你不知道幕后发生了什么,并不总是让它成为一个好的选择。
至于你的具体例子,它并不算太糟糕。配方实际上是指与Recipe
模型相关的User
模型。 Cake有一个内置的ORM,它使用一些模型变量来正确设置模型关系。我会说,任何ORM框架都会出现这种情况。除非您更改了类名,否则您不需要更改所有引用,这在任何PHP代码中都是如此。
至于其他框架建议。在你开始使用框架之前,我建议你使用自己的PHP MVC堆栈。如果您对PHP有一个公平的理解,那么您可以查看CodeIgniter或Kohona框架。这些没有蛋糕那么严格。您还可以查看Zend Framework。还有许多其他框架具有不同的功能(或多或少具有不同的控制变体),您需要做的就是环顾四周。
答案 1 :(得分:0)
您正在寻找的是良好的ORM。尝试使用以下其中一种:
有关ORM的更多信息: http://en.wikipedia.org/wiki/Object-relational_mapping
答案 2 :(得分:0)
我看到你在那里做了什么
此外,如果我想重新'食谱'...
该怎么办?
无论您选择哪个ORM库,总会有魔术字符串。没有足够的信息来自动将您的类映射到数据库表(最简单的情况除外)。魔术字符串实际上是ORM创建映射所需的元数据。
您可以尝试通过定义常量或创建公共静态字段来避免魔术字符串,但最终您只能将它们合并到一个文件中。
使用ORM时,无论如何都必须提供元数据。考虑到这一点,您应该选择最适合您的ORM。