0

私は2つのテーブルを持っています:

送信者情報:

  ID | 名前 | email_add | 住所 |
============================================
  1 | アミット | 1@1.com | 公園通り|

受信者情報:

  ID | 名前 | email_add| 住所 |
=======================================
  1 | SOS | 2@2.com | パーク1

モデル、ビュー、およびコントローラーコードを提供しています:

モデル

送信者情報:

<?php
App::uses('AppModel', 'Model');
/**
 * Admin Login Model
 *
 */
 class Senderinfo extends AppModel
 {
    public $name='Senderinfo';
    public $usetables='senderinfos';

    public $validate = array(


      'contact' =>
      array(
      'rule'       => 'notEmpty', // or: array('ruleName', 'param1', 'param2' ...)
      'allowEmpty' => false,
      'message'    => 'Please Enter Contact.'
      ),

     'name' =>
      array(
      'rule'       => 'notEmpty', // or: array('ruleName', 'param1', 'param2' ...)
      'allowEmpty' => false,
      'message'    => 'Please Enter Sender Name.'
      ),


     'email_add' => array(

            'email_add' => array(
            'rule' => 'email',
            'allowEmpty' => true,
            'message' => 'Please Enter Valid Email',
            'last' => true
    )),


    );

 }
?>

受信情報:

<?php
App::uses('AppModel', 'Model');
/**
 * Admin Login Model
 *
 */
 class Receiverinfo extends AppModel
 {
    public $name='Receiverinfo';
    public $usetables='receiverinfos';

    public $validate = array(


      'contact' =>
      array(
      'rule'       => 'notEmpty', // or: array('ruleName', 'param1', 'param2' ...)
      'allowEmpty' => false,
      'message'    => 'Please Enter Contact.'
      ),

     'name' =>
      array(
      'rule'       => 'notEmpty', // or: array('ruleName', 'param1', 'param2' ...)
      'allowEmpty' => false,
      'message'    => 'Please Enter Sender Name.'
      ),


     'email_add' => array(

            'email_add' => array(
            'rule' => 'email',
            'allowEmpty' => true,
            'message' => 'Please Enter Valid Email',
            'last' => true
    )),


    );

 }
?>

意見

send_money.ctp

<content>
            <div class="pg_title txtLeft">Send Money</div>
                <?php echo $this->Form->create('Agents', array('action' => 'send_money'));?>

                    <div style="display:none;"><input type="hidden" value="POST" name="_method"></div>
                    <fieldset title="SENDER'S INFORMATION"><legend>SENDER'S INFORMATION</legend>
                    <table>
                        <tbody>
                            <tr>
                                <td><label>Contact No.<span class="red">*</span></label></td>
                                <td><?php echo $this->Form->input('Senderinfo.contact',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>
                            <tr>
                                <td><label>Sender's Name<span class="red">*</span></label></td>
                                <td><?php echo $this->Form->input('Senderinfo.name',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>
                            <tr>
                                <td><label>Email Address</label></td>
                                <td><?php echo $this->Form->input('Senderinfo.email_add',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>
                            <tr>
                                <td><label>Mailing Address</label></td>
                                <td><?php echo $this->Form->input('Senderinfo.address',array('label'=>false,'div'=>false,'type'=>'textarea','cols'=>39,'rows'=>3,'class'=>'textarea','style'=>'width:330px')); ?></td>
                            </tr>
                            </tbody>
                    </table>
                    </fieldset>
                    <fieldset title=""><legend>RECEIVER'S INFORMATION</legend>
                    <table>
                        <tbody>
                            <tr>
                                <td><label>Contact No.<span class="red">*</span></label></td>
                                <td><?php echo $this->Form->input('Receiverinfo.contact',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>
                            <tr>
                                <td><label>Receiver's Name<span class="red">*</span></label></td>
                                <td><?php echo $this->Form->input('Receiverinfo.name',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>
                            <tr>
                                <td><label>Email Address</label></td>
                                <td><?php echo $this->Form->input('Receiverinfo.email_add',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>
                            <tr>
                                <td><label>Mailing Address</label></td>
                                <td><?php echo $this->Form->input('Receiverinfo.address',array('label'=>false,'div'=>false,'type'=>'textarea','cols'=>39,'rows'=>3,'class'=>'textarea','style'=>'width:330px')); ?></td>
                            </tr>

                            </tbody>
                    </table> 
                    </fieldset>

                     <fieldset><legend>MONEY TRANSFER</legend>
                    <table>
                        <tbody> 
                            <tr>
                                <td><label>Amount(tk)<span class="red">*</span></label></td>
                                <td><?php echo $this->Form->input('Transaction.sending_amount',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>
                            <tr>
                                <td><label>Charge(tk)<span class="red">*</span></label></td>
                                <td><?php echo $this->Form->input('Transaction.charge',array('label'=>false,'div'=>false,'size'=>50,'style'=>'width:330px')); ?></td>
                            </tr>

                           <tr>
                           <?php 
                           $foo = "";
                            $options = array('1' => 'Paid','0' => ' Due');
                            $attributes = array(
                                'legend' => false,
                                'value' => true,
                                'checked'=> ($foo == "Paid"),
                            );
                            ?>
                            <td>
                             <?php echo $this->Form->radio('transaction.status',$options, $attributes);?>
                           </td>
                           </tr>


                        </tbody>
                    </table> 
                    </fieldset>
                    <fieldset><legend>CUSTOM MESSAGE</legend>
                    <table>
                        <tbody> 
                            <tr>
                                <td style="width: 158px;"><label>Message</label></td>
                                <td><?php echo $this->Form->input('transaction.message',array('label'=>false,'div'=>false,'type'=>'textarea','cols'=>39,'rows'=>3,'class'=>'textarea','style'=>'width:330px')); ?></td>
                            </tr>
                        </tbody>
                    </table> 
                    </fieldset>
                    <table>
                        <tbody>
                            <tr>
                                <td colspan="2" align="right"><input type="reset" value="Reset"> | <?php echo $this->Form->submit('SEND', array('div' => false,'formnovalidate' => true));?></td>
                            </tr>
                        </tbody>
                    </table> 
               <?php print $this->Form->end();?> 
    </content>
    <div class="clear"></div>



Controller : 

    public  function send_money()
            {
                    $this->layout='agent';
                    if(empty($this->data) == false)
                    {
                            if($this->Senderinfo->save($this->data))
                            {

                                $this->Receiverinfo->save($this->data);
                                //$this->Session->setFlash('Data inserted successfully.');
                                //$this->redirect('send_money');
                            }

                            /*if($this->Receiverinfo->save($this->data))
                            {
                                //$this->Session->setFlash('Data inserted successfully.');
                                $this->redirect('send_money');
                            }
                            */
                    }
                    else
                    {
                        //$this->set('errors', $this->Senderinfo->invalidFields()); 
                        //$this->set('errors', $this->Receiverinfo->invalidFields());       
                    } 

            }

私は完全な検証で2つのテーブルにレコードを挿入したい.しかし、私の検証部分は完全に機能していない.つまり、ビューページを見ると、送信者情報、受信者情報、html凡例でラップされたお金が表示されます.送信ボタンをクリックした後、必要なフィールドを一度に検証します。受信者情報の部分の検証のみが機能します。どうすればよいですか?

4

1 に答える 1

0

初めに; 明らかに、アプリケーションには「送信者」と「受信者」の間に「関係」がありますが、モデル/データベース定義にはありません。データベースの「自動インクリメント」ID に依存する (たとえば、受信者 1 と送信者 1 が一緒に属している) ことは信頼できません。自動インクリメント ID両方のテーブル間で「非同期」になり、'receiver 123'実際には に「接続」されるべき状況になり'sender 125'ます。

このフォームが何をするかを正しく理解していれば、データベースに「お金の取引」を作成します。リストから既存の送信者/受信者を「選択」するオプションを提供しない限り、(この場合) 送信者と受信者を別々のデータベースに保存しないでください。

どちらの状況でも、アプリケーションには 2 つを「接続」するテーブル/モデルが必要です。そうしないと、送金者と送金者のランダムなリストが作成され、誰が送金したいか知る方法がありません。どの受信者に

送信者/受信者を「再利用」しない場合、正しいデータベース設計は次のようになります。

id| sender_name | sender_email | sender_address | receiver_name | receiver_email | receiver_address
1 | Amid        | 1@1.com      | Parkstreet     | SOS           | 2@2.com        | park 1

このテーブルに「送金」、モデルに「送金」という名前を付けます。

両方を 1 つのモデルにすることで、検証が簡素化され、送信者と受信者の両方の情報が存在し、正しいことが保証されます。

2 つの別々のレコードを手動で保存したい場合(上記の説明に基づいて、これを行わないことを強くお勧めします)、これを行う必要があります。

  • 両方のレコードを手動で検証する$this->Mymodel->validates($data)
  • 両方の保存をトランザクションに含め、いずれかが失敗した場合はロールバックします

コントローラー内で手動で検証する方法の詳細については、http: //book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.htmlを参照してください。

CakePHP でトランザクションを使用する方法の詳細については、http: //book.cakephp.org/2.0/en/models/transactions.htmlを参照してください。

[アップデート]

「フォーム」をさらにブラウジングすると、「トランザクション」モデルも「あるように見えます」? この場合 Model-relations が CakePHP で適切に定義されていれば、 Model::saveAssociated() を使用してすべての関連レコードを保存できます。これにより、すべての保存がトランザクション (アトミック) に含まれます。

ここを参照してください: http://book.cakephp.org/2.0/en/models/ Saving-your-data.html#model-saveassociated-array-data-null-array-options-array

于 2013-02-26T23:31:40.640 に答える