我有并添加/编辑添加/编辑的表单,具体取决于是否传递了ID。
这种模式可由三种不同类型的用户在3种完全不同的情况下访问 - 不同的控制器,不同的菜单,不同的面包屑,不同的一切。然而,形式是相同的,逻辑是相同的。
所以基本上我有两个问题 - 重复视图形式和重复控制器代码。
我试图把它放在一个元素中,但是我必须传递一个表格action
的变量来指向不同的控制器。如果我有相同的动作并使用相同的控制器,那么我必须有某种referer()
并且几乎不可能传递所有不同的数据用于面包屑,菜单,侧边栏等。我缺少一些主要的东西计划出来。
我应该如何组织我的代码,以便拥有最少的代码和最小的开销,因为我的应用程序每天都在变化,我不想更新3个地方而忘记其中一些等等。
答案 0 :(得分:1)
您可以按creating a component重复使用控制器逻辑(或在AppController
中放置逻辑):
// controllers/first_controller.php
class FirstController extends AppController {
public $components = array('MyForm');
public function firstAction($id = null) {
$this->MyForm->processForm(/* params */); // inserts reusable logic
$this->redirect(array('action' => 'index'));
}
}
(重复SecondController::secondAction()
和ThirdController::thirdAction()
。)
您可以通过创建元素重用视图逻辑:
// views/first/first_action.ctp
$this->Html->addCrumb('First');
echo $this->Html->tag('h2', 'First');
$this->element('my_form', array(/* params */)); // inserts reusable logic
(对其他观点重复。)
我试图把它放在一个元素中,但是我必须传递一个变量,以便表单的动作指向不同的控制器。
您可以从元素内部访问$this->params
,这样您就不必传递当前操作等琐碎的事情。