为什么我的表格请求是blackholed cakephp 2?

时间:2012-06-01 10:21:42

标签: cakephp cakephp-2.1

我有2个型号:广告记录广告 hasOne 记录记录 belongsTo 广告 我的添加表单和编辑表单正在工作,但如果我使用secrurity组件,我的请求是黑洞。也许我没有使用最佳实践。 Controller 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'); ?>

谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

那是因为表单中有文件输入。您需要在创建表单时指定它:

echo $this->Form->create('Ad', array('action'=>'edit', 'type' => 'file'));

答案 1 :(得分:0)

使用表单上的“文件输入字段”,您需要enctype=multipart/form-data, 为此,您需要添加'type'=>'file',否则当使用cakephp'Security'组件时,您的保存/更新请求将被视为黑洞。

echo $this->Form->create('Ad', array('action'=>'edit', 'type' => 'file'));