为什么CakePHP使用不同的复数/单数命名约定?

Sim*_*ast 5 cakephp naming-conventions inflection rationale

有人可能在这里解释为什么在地球上CakePHP有一个使用多个名称的数据库表和控制器和单数模型的约定?为什么不总是使用单数术语,或总是复数?对我来说,总是不得不想"现在我在这里使用复数还是单数?"似乎令人困惑.(或者有一种简单的方法可以记住吗??)然后你有连接表使用两者的组合!

我认为在某个地方有一个很好的理由,但只是没有碰到它.
(我真的希望这不仅仅是因为Ruby-on-Rails的工作原理.)

西蒙.

dec*_*eze 10

CakePHP约定

CakePHP的惯例已经从多年的Web开发经验和最佳实践中提炼出来.虽然我们建议您在使用CakePHP进行开发时使用这些约定,但我们应该提到许多这些原则很容易被覆盖 - 这在使用遗留系统时尤其方便.

我认为这个想法是让它更流畅地阅读和以正确的方式思考元素.数据库表总是复数,因为它们包含许多记录.该模型是单一的,因为您应该考虑使用它来查找单个记录.选择字段model_id将自动从中获取选项$models,因为您可以选择其中之一.

$model = $this->Model->find('first');  // reads like English
$model = $this->Models->find('first'); // slightly trips you up

$models = $this->Model->find('all');   // works okay
$models = $this->Models->find('all');  // more logical, but "this models" still trips
Run Code Online (Sandbox Code Playgroud)

它并不总是完美的,但我认为一旦你习惯它,这是一个很好的约定.我可以看到它在开始时是如何混淆的.

  • 同意.模型是数据模式的抽象,而在英语中,这些模型总是单一的(你不会说"汽车的本质是什么").控制器处理抽象的多个实例(它将它们全部纠缠在一起).IMO与我们用英语做事的方式非常一致. (2认同)