0

Policy というテーブルと Declination というテーブルがあります。ポリシーには多くの偏差があります。赤緯はポリシーに属します。そうは言っても、ポリシーの ID を Declination テーブルの Policy_id というフィールドに保存しようとしています。残念ながら、私には運がありません。自分の見方に問題があると思います。私が何をしているのか説明させてください..コントローラーで1つのレコードを読み取り、その配列からIDをpolicy_idに設定しています。それをしたら、その変数を set() 経由でビューに送信します。そこで、隠しフィールドでその変数を使用しています。そこでスクリプトを実行すると、データは保存されますが、ID は入力されません。私はこれに 2 日間行き詰まっており、頭を抱えることはできません! 追加できることの 1 つは、そのポリシーの ID を URL 経由で渡していることです。したがって、URL は localhost/site/add/xxxx-xxxx-xxxx のようになります。そこから取得する必要があるかどうかはわかりません。必要に応じて、私がどこで学ぶことができるかを説明するか、どこかを教えてください. すべきでない場合は、その理由をお知らせください。ありがとう!

モデル

 <?php

class Declination extends AppModel { public $name = 'Declination';

public $virtualFields = array(
    'name' => 'CONCAT(Declination.first_name,\' \',Declination.last_name)'
);

public $belongsTo = array(
    'Policy' => array(
        'className' => 'Policy',
        'foreignKey' => 'policy_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Reason' => array(
        'className' => 'Reason',
        'foreignKey' => 'reason_id'
    ),
    'ContactType' => array(
        'className' => 'ContactType',
        'foreignKey' => 'contact_type_id'
    )
);

public function beforeSave() {
    if (array_key_exists('dated', $this->data[$this->alias]) && !empty($this->data[$this->alias]['dated'])) {
        $this->data[$this->alias]['dated'] = date('Y-m-d', strtotime($this->data[$this->alias]['dated']));
    }
    if(array_key_exists('reason_id', $this->data[$this->alias])) {
        if (!$this->Reason->isOther($this->data[$this->alias]['reason_id'])) {
            $this->data[$this->alias]['other'] = null;
        }
    }
    return true;
}

コントローラ

class DeclinationsController extends AppController {

public $name = 'Declinations';

/**
 * add function.
 * 
 * @access public
 * @param mixed $id (default: null)
 * @return void
 */
public function add($id = null) {
    if (!empty($this->data)) {
        $this->loadmodel('Policy');
        $policy = $this->Policy->read('id', $id);
        $policy_id = $policy['Policy']['id'];

        $this->Declination->create();
        if ($this->Declination->saveAll($this->data['Declination'])) {
            $this->Session->setFlash(__('Declinations saved.', true));
            $this->redirect(array(
                'controller' => 'coverages',
                'action' => 'view',
                $id
            ));
        } else {
            $this->Session->setFlash(__('Declinations failed to save.', true));
        }
    }

    $reasons = $this->Declination->Reason->find('list');
    $contactTypes = $this->Declination->ContactType->find('list');
    $this->set(compact('id', 'reasons', 'contactTypes', '$policy_id'));
}

意見

    <?php echo $this->Ui->widgetHeader(__('Policy Declinations', true)); ?>
<?php $this->Ui->widgetContent(); ?>
    <?php echo $this->UiForm->create('Declination', array(
        'url' => array(
            'controller' => 'declinations',
            'action' => 'add',
            $id
        )
    )); ?>
    <?php for ($i = 0; $i < 3; $i++): ?>
        <h4>Declination <?php echo ($i + 1); ?></h4>


        <?php echo $this->UiForm->create("Declination.{$i}.policy_id", array('type' => 'hidden', 'value' => '$policy_id')); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.first_name"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.last_name"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.company"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.contact_type_id"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.phone_number"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.reason_id"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.other", array(
            'label' => 'If other, please supply a reason'
        )); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.dated", array(
            'type' => 'text',
            'readonly' => 'readonly',
            'data-datepicker' => ''
        )); ?>
    <?php endfor; ?>
    <?php echo $this->UiForm->end('Continue'); ?>
<?php echo $this->Ui->widgetContentEnd(); ?>
4

2 に答える 2

0

UiForm はある種のカスタム ヘルパーだと思います。フォーム ヘルパーに似ている場合は、create ステートメントのエラーのように見えます。そのはず:

<?php echo $this->UiForm->create('Declination'); ?>
<?php echo $this->UiForm->input("Declination.{$i}.policy_id", array('type' => 'hidden', 'value' => '$policy_id')); ?>
于 2013-06-04T01:31:30.843 に答える
0

私はそれを考え出した。ビューにある $id 変数を取得し、値として設定しました。したがって、私の値は $policy_id ではなく、$id です。また、コントローラーから不要なものをいくつか削除しました。下記を参照してください。これが誰かを助けることを願っています!

意見

    <?php echo $this->Ui->widgetHeader(__('Policy Declinations', true)); ?>
<?php $this->Ui->widgetContent(); ?>
    <?php echo $this->UiForm->create('Declination', array(
        'url' => array(
            'controller' => 'declinations',
            'action' => 'add',
            $id
        )
    )); ?>
    <?php for ($i = 0; $i < 3; $i++): ?>
        <h4>Declination <?php echo ($i + 1); ?></h4>

        <?php echo $this->UiForm->create('Declination'); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.policy_id", array('type' => 'hidden', 'value' => $id)); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.first_name"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.last_name"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.company"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.contact_type_id"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.phone_number"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.reason_id"); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.other", array(
            'label' => 'If other, please supply a reason'
        )); ?>
        <?php echo $this->UiForm->input("Declination.{$i}.dated", array(
            'type' => 'text',
            'readonly' => 'readonly',
            'data-datepicker' => ''
        )); ?>
    <?php endfor; ?>
    <?php echo $this->UiForm->end('Continue'); ?>
<?php echo $this->Ui->widgetContentEnd(); ?>

コントローラ

 public function add($id = null) {
    if (!empty($this->data)) {
        $this->Declination->create();
        if ($this->Declination->saveAll($this->data['Declination'])) {
            $this->Session->setFlash(__('Declinations saved.', true));
            $this->redirect(array(
                'controller' => 'policies',
                'action' => 'view',
                $id
            ));
        } else {
            $this->Session->setFlash(__('Declinations failed to save.', true));
        }
    }

    $reasons = $this->Declination->Reason->find('list');
    $contactTypes = $this->Declination->ContactType->find('list');
    $this->set(compact('id', 'reasons', 'contactTypes'));
}
于 2013-06-05T16:15:53.977 に答える