CakePHP:如何组织可重复的表单?

时间:2012-03-04 19:01:55

标签: cakephp organization reusability

我有并添加/编辑添加/编辑的表单,具体取决于是否传递了ID。

这种模式可由三种不同类型的用户在3种完全不同的情况下访问 - 不同的控制器,不同的菜单,不同的面包屑,不同的一切。然而,形式是相同的,逻辑是相同的。

所以基本上我有两个问题 - 重复视图形式和重复控制器代码。

我试图把它放在一个元素中,但是我必须传递一个表格action的变量来指向不同的控制器。如果我有相同的动作并使用相同的控制器,那么我必须有某种referer()并且几乎不可能传递所有不同的数据用于面包屑,菜单,侧边栏等。我缺少一些主要的东西计划出来。

我应该如何组织我的代码,以便拥有最少的代码和最小的开销,因为我的应用程序每天都在变化,我不想更新3个地方而忘记其中一些等等。

1 个答案:

答案 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,这样您就不必传递当前操作等琐碎的事情。