2

我想将 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”中有一个拼写错误,它不会按预期工作。这里没有智能感知/代码完成来帮助!

另外,如果我想将“食谱”改成其他东西怎么办?我必须手动搜索所有代码并找出它是常规文本还是魔术字符串之一。

其他 PHP MVC 框架更好吗?(阅读:更少或没有魔术字符串)

关于如何避免魔术字符串的任何链接(至少尽可能多)......?

4

3 回答 3

2

Cake 遵循“约定优于配置”的方法。它是一个框架,可用于快速原型化和部署(主要是)基于 CRUD 的应用程序。它在幕后发生了很多“魔法”,如果你不知道幕后发生了什么,这并不总是一个好的选择。

至于你的具体例子,还不错。配方实际上是指与模型相关RecipeUser模型。Cake 有一个内置的 ORM,它使用一些模型变量来正确设置模型关系。我想说,在任何 ORM 框架中都是如此。除非您更改了类名,否则您不需要更改所有引用,这在任何 PHP 代码中都是正确的。

至于其他框架建议。我建议您在开始使用框架之前使用自己的 PHP MVC 堆栈。如果您对 PHP 有一定的了解,可以查看CodeIgniterKohona框架。这些没有蛋糕那么严格。您还可以查看Zend 框架。还有许多其他具有不同功能的框架(或多或少提供不同的控制变化),您需要做的就是环顾四周。

于 2012-01-02T15:46:42.293 回答
0

我看到你在那里做了什么

另外,如果我想重新制作“食谱”怎么办...

无论您选择哪个 ORM 库,总会有魔术字符串。只是没有足够的信息来自动将您的类映射到数据库表(最简单的情况除外)。魔术字符串实际上是 ORM 创建映射所需的元数据。

您可以尝试通过定义常量或创建公共静态字段来避免使用魔术字符串,但最终您最多只能将它们合并到一个文件中。

使用 ORM 时,无论如何您都必须提供元数据。考虑到这一点,您应该选择让您感觉最舒适的 ORM。

于 2012-01-02T16:09:30.897 回答
0

您正在搜索的是好的 ORM。尝试使用其中之一:

有关 ORM 的更多信息: http ://en.wikipedia.org/wiki/Object-relational_mapping

于 2012-01-02T15:43:13.653 回答