0

私はcakePHPを初めて使用し、フレームワークに頭を悩ませて、要件を実装する方法を確認しようとしています。

私のアプリケーションでは、(管理者)ユーザーがForms(親)とFormElements(子)を定義できます。これらは後でオンザフライで作成され、エンドユーザーに表示されます。

プロトタイピングを開始するために、すべてのピースをベイク処理し、期待どおりに両方のテーブルに行を入力できます。

質問を単純化するために編集します。

フォームコントローラにはすでにフォームのリストが表示されており、フォームが選択されると(アクションの表示)、そのフォームのFormElementのリストが表示されます。しかし...新しいFormElementを追加するときは、要素が関連付けられるフォームを再度選択する必要があります。

代わりに、FormElementsコントローラー/モデルに、最初に選択されたフォームを認識させ、form_idに自動的に入力してもらいたいと思います。

これを処理する方法に関する「ベストプラクティス」アプローチはありますか?

必要な場合に備えて:

CREATE TABLE IF NOT EXISTS `forms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(60) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `form_elements` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `form_id` int(11) NOT NULL,
  `name` varchar(40) NOT NULL,
  `type` int(11) NOT NULL,
  `widget` int(11) NOT NULL,
  `mandatory` tinyint(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
4

1 に答える 1

1

これはあなたが思っているよりも頻繁に起こります。QuestionModel hasMany AnswerModelがあり、AnswersController内にAnswersを追加したいと思いました。「親」オブジェクトのQuestionModel名とその他の属性を表示する必要がありました。AnswersController内の追加アクションは次のようになります。

public function add($question_id = null) {
    $this->Answer->Question->id = $question_id;
    if (!$this->Answer->Question->exists()) {
        throw new NotFoundException(__('Invalid question'));
    }

    if ($this->request->is('post')) {
        $this->request->data['Answer']['question_id'] = $question_id;
        $this->request->data['Answer']['user_id'] = $this->Auth->user('id');

        if ($this->Answer->save($this->request->data)) {
            $this->Session->setFlashSuccess(__('Your answer has been saved'));
        } else {
            $this->Session->setFlashError(__('Your answer could not be saved. Please, try again.'));
        }
        $this->redirect(array('controller'=>'questions','action' => 'view', $question_id));
    }

    $question = $this->Answer->Question->read();
    $this->set('question', $question);
}

Question.idをAnswersControllerの追加アクションに渡していることに気付くでしょう。これにより、DBから質問を取得し、ユーザーが[この質問に回答を追加]をクリックする前に、ユーザーが行っていた特定の質問にリダイレクトできるようになります。

于 2013-03-31T17:59:38.820 に答える