1

あるコントローラー (テンプレート) から別のコントローラー (フィールド) に ID を取得しようとしています。テンプレートの ID を取得して、フォームの追加 (ビュー) 入力フィールドに自動的に表示しようとしています。

試したセグメントを持つ FieldsController:

$template = $this->Template->find('first');
$current_template = $this->Template->request->data($template['Template']['id']);

フィールドの追加ビューからの入力フィールド:

 echo $this->Form->input('templates_id', array('label'=>'Template ID: ', 'type' => 'text', 'default' => $current_template['templates_id']));

では、このタスクを完了するにはどうすればよいでしょうか? 私が試したことがうまくいくと思ったのですが、うまくいきませんでした。

「templates_id」は、「テンプレート」テーブルの「id」にリンクする「フィールド」テーブルの外部キーです。

編集:

LoadModel (以下) を追加し、エラーを吐き出します: 非オブジェクトでメンバー関数 data() を呼び出します。

以下を正しく行っていますか?それとも $this->request->data($template['Template']['id']); である必要がありますか?

$this->loadModel('Template');
    $template = $this->Template->find('first');
    $current_template = $this->Template->request->data($template['Template']['id']);

編集2:

add 関数を使用した FieldsController:

function add(){

    $this->set('title_for_layout', 'Please Enter Your Invoice Headings');
    $this->set('stylesheet_used', 'style');
    $this->set('image_used', 'eBOXLogo.jpg');   

    $this->Session->setFlash("Please create your required fields.");


    $this->loadModel('Template');
    $template = $this->Template->find('first');
    //$current_template = $template['Template']['id'];

    // right way to do it, but Template is undefined, and says undefined var
    //$current_template = $this->request->data['Template']['id'];

    // makes sense with the find, no errors, but still doesnt print in form, says undefined var
    $current_template = $this->request->data($template['Template']['id']);

        if($this->request->is('post'))
        {

        $this->Field->create(); 

        if ($this->Field->save($this->request->data)) 
        {   
            if($this->request->data['submit'] == "type_1") 
                { 
                    $this->Session->setFlash('The field has been saved');  
                    $this->redirect( array('controller' => 'fields','action' => 'add'));
                } 
                if($this->request->data['submit'] == "type_2") 
                { 
                    $this->Session->setFlash('The template has been saved'); 
                    $this->redirect( array('controller' => 'templates','action' => 'index'));
                } 


        }
        else
        {
            $this->Session->setFlash('The field could not be saved. Please, try again.'); 
        } 
    } 
  }

add というビューからのフォーム:

<?php


    echo $this->Form->create('Field', array('action'=>'add'));


    echo $this->Form->create('Field', array('action'=>'add'));
    echo $this->Form->input('name', array('label'=>'Name: '));
    echo $this->Form->input('description', array('label'=>'Description: '));
    echo $this->Form->input('templates_id', array('label'=>'Template ID: ', 'type' => 'text', 'default' => $current_template['templates_id']));//this would be the conventional fk fieldname
    echo $this->Form->button('Continue adding fields', array('name' => 'submit', 'value' => 'type_1'));
    echo $this->Form->button('Finish adding fields', array('name' => 'submit', 'value' => 'type_2'));
    echo $this->Form->end();


?>
4

2 に答える 2

1
$this->Template->request->data($template['Template']['id']);

間違っている。

MVC パターンを見てください。 ここに画像の説明を入力

ディスパッチャはコントローラにデータを送信します。

コードを見てください:

 $this->Template->request->data($template['Template']['id']);


$this

コントローラーです。

->Template

関連付けられたモデルを呼び出します。

request->data()

ビューからのデータを使用して、このモデルから関数を呼び出します。

要するに、ビューからモデルにデータを渡しているため、MVC パターンが壊れています。

そのはず:

 $this->request->data['Template']['id'];

編集:私が思う2つの問題:

  1. 私はそれがあるべきだと思います:

    $current_template = $this->request->data['Field']['template_id'];

  2. $current_template = $this->request->data($template['Template']['id']);

この変数は設定されていません。

このようなものを入れてください:

$this->set(compact('current_template'));
于 2012-08-03T07:26:33.177 に答える
0

別のモデルからデータを取得するには、最初にロードする必要があります。

$this->loadModel('Template');
$this->Template->find('first');
于 2012-08-03T05:29:20.633 に答える