3

AdRecordAd hasOne RecordRecord belongsTo Ad の2 つのモデルがあります。 追加フォームと編集フォームは機能していますが、セキュリティ コンポーネントを使用すると、リクエストがブラック ホールになります。多分私はベストプラクティスを使用していません。コントローラ AdsController.php :

public function admin_edit($id = null){
    $this->Ad->id = $id;
    if ($this->request->is('get')){
        $this->request->data = $this->Ad->read();
    } else {
        if ($this->Ad->save($this->request->data)) {
            $this->Ad->Record->save($this->request->data);
            $this->Session->setFlash('Vos données ont étées mises à jour');
            $this->redirect(array('action' => 'admin_index'));
        }else {
            $this->Session->setFlash('Impossible d\'éditer l\'annonce !');
        }

    }
}

ここに私のフォーム admin_edit.ctp があります:

<!-- Ads/admin_edit -->
<?php
  /* Breadcrumb */
  $this->Html->addCrumb('Annonces', '/admin/ads');
  $this->Html->addCrumb('Edition annonce', '/admin/ads/edit');
?>

<h1>Editer une annonce</h1>
<hr>
<div class="row">
<div class="span6 pull-left">
<h3>Annonce</h3>
<?php
    echo $this->Form->create('Ad', array('action'=>'edit'));
        echo $this->Form->input('name', array('label' => 'Nom de l\'annonce', 'error' => array('attributes' => array('wrap' => 'div', 'class' => 'alert alert-error'))));
        echo $this->Form->input('category',array('label'=>'Définir si location ou vente','options'=>array('location' =>'location', 'vente' => 'vente'), 'empty' => 'choisir', 'error' => array('attributes' => array('wrap' => 'div', 'class' => 'alert alert-error'))));
        echo $this->Form->input('type', array('label' => 'Choisir le type de bien',
                                              'options' => array('appartement' => 'appartement', 'maison/villa' =>'maison/villa', 'terrain' => 'terrain'),
                                              'empty' => 'choisir',
                                              'error' => array('attributes' => array('wrap' => 'div', 'class' => 'alert alert-error')
                                              )));
        echo $this->Form->input('room', array('label' => 'Nombre de pièces *indiquer un chiffre', 
                                                'error' => array('attributes' => array('wrap' => 'div', 'class' => 'alert alert-error'))));
        echo $this->Form->input('country', array('label' => 'Le Pays',
                                                 'options' => array('France' => 'France', 'Espagne' => 'Espagne'),
                                                 'empty' => 'choisir',
                                                 'error' => array('attributes' => array('wrap' => 'div', 'class' => 'alert alert-error')
                                                )));
        echo $this->Form->input('city', array('label' => 'Ville',
                                              'options' => array('Antibes' => 'Antibes', 'Beaulieu' => 'Beaulieu', 'Cagnes sur mer' => 'Cagnes sur mer', 'Cannes' => 'Cannes', 'Cap d\'Ail' => 'Cap d\'Ail', 'Eze' => 'Eze', 'Juan les Pins' => 'Juan les Pins', 'La Turbie' => 'La Turbie', 'Menton' => 'Menton', 'Nice' => 'Nice', 'Roquebrune Cap Martin' => 'Roquebrune Cap Martin', 'Saint Jean Cap Ferrat' => 'Saint Jean Cap Ferrat', 'Saint Laurent du Var' => 'Saint Laurent du Var', 'Saint Tropez et alentours' => 'Saint Tropez et alentours', 'Villefrance' => 'Villefrance', 'Villeneuve Loubet' => 'Villeneuve Loubet', 'Alicante' => 'Alicante', 'Altea' => 'Altea', 'Benidorm' => 'Benidorm', 'Calpe' => 'Calpe', 'Santa Pola' => 'Santa Pola', 'Villajoyosa' => 'Villajoyosa' ),
                                              'empty' => 'choisir'
                                            ));
        echo $this->Form->input('price', array('label' => 'Prix *indiquer un chiffre, exemple pour 300 000 euros, écrire 300000'));
        echo $this->Form->input('description', array('label' => 'Description'));
        echo $this->Form->input('picture', array('label' => 'Liens image', 'type' => 'file'));
?>
</div>
<div class="span6 pull-right">
    <h3>Dossier lié à l'annonce (contacts du propriétaire, addresse du bien immobilier)</h3>
    <?php echo $this->Form->input('Record.address', array('label' => 'Addresse de l\'appartement')); ?>
    <?php echo $this->Form->input('Record.id', array('type' => 'hidden')); ?>
</div>
</div>

<?php /*echo $this->Form->button('Envoyer', array('type' => 'submit',
                                                'class' => 'btn btn-primary'));*/ ?>
<?php echo $this->Form->end('Valider'); ?>

ありがとうございます!

4

2 に答える 2

1

これは、フォームにファイル入力があるためです。フォームを作成するときに指定する必要があります。

echo $this->Form->create('Ad', array('action'=>'edit', 'type' => 'file'));
于 2012-06-01T19:46:47.053 に答える
0

フォームに「ファイル入力フィールド」が必要ですenctype=multipart/form-data。そのためには、追加する必要があります。そうし'type'=>'file'ないと、cakephp の「セキュリティ」コンポーネントが使用されている間、保存/更新リクエストがブラック ホールと見なされます。

echo $this->Form->create('Ad', array('action'=>'edit', 'type' => 'file'));
于 2015-03-02T08:36:21.087 に答える