【问题标题】:how to create multiple models against multiple function in single controller in CakePHP如何在 CakePHP 的单个控制器中针对多个功能创建多个模型
【发布时间】:2014-11-29 00:21:40
【问题描述】:

我认为,在“CakePHP”中,一个模型针对每个控制器,但我在单个控制器中有多个函数,每个函数代表不同的页面和数据库表。 即

public function manage_categories(){}
public function manage_sub_categories(){}

以上 2 个函数在 Admin Controller 中,但现在的问题是如何针对每个函数创建模型来表示数据库。每个函数在数据库中都有唯一的属性。 还有一件事,模型名称应与控制器名称“admin”相同,否则此名称将与函数名称相同。而在正常情况下,模型名称与控制器名称相同。

“Users”模型名称用于“UsersController” 请指导我解决上述问题。我尝试了足够多的方法来解决它机器人无法解决的问题。 提前致谢。

【问题讨论】:

  • 您使用的是哪个 CakePHP 版本,总是说出确切的版本!
  • 我使用的是 cakephp 2.5.5 版本
  • 那么你会建议任何好的解决方案还是你只是问版本?

标签: php cakephp model controller cakephp-2.5


【解决方案1】:

如果您有两个数据库表,那么就SoC 而言,拥有两个控制器而不是将许多不属于同一域的不同内容放入单个控制器中是合乎逻辑的最佳实践。

有时当您只想使用关联模型中的部分数据时,您可以通过关联访问它:

$this->Model->SubModel->foo();

您还说您有一个管理控制器,这是一种有效但不是很好的方法。取而代之的是 CakePHP 的功能 prefix routing。因此,像 /admin/categories/some_action 这样访问的操作将路由到 CategoriesController some_action() 操作。

“Users”模型名称用于“UsersController”

错了,按照惯例,模型应该命名为单数,而不是复数。您的 UsersController 找不到用户模型,因为它正在寻找用户模型。

远离 Model::query(),尽可能使用 ORM。

public function manage_categories(){}
public function manage_sub_categories(){}

应该变成:

class CategoriesController extends AppController {
    public function admin_index() { /*...*/ }
}
class SubCategoriesController extends AppController {
    public function admin_index() { /*...*/ }
}

但假设子类别属于同一个表的类别,我认为根本不需要第二个模型或第二个控制器。

【讨论】:

  • 假设“运动”是一个类别,而板球、足球、曲棍球、十、排球等是运动的子类别。然后我假设两个不同的表应该将类别保存在一个表中,将子类别保存在另一个表中。你不觉得以这种方式将数据保存在数据库中是个好方法吗?
  • 不,使用“父子”或“嵌套集”。类别树不需要有两个表。还要检查 CakePHP TreeBehavior,它有助于实现树结构。 CakeDC 还提供了一个 Categories 插件。
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2019-12-04
  • 2018-08-12
相关资源
最近更新 更多