Почему мой запрос формы имеет вид blackholecakephp 2?

У меня есть 2 модели: Ad и Record, Ad hasOne Record и Запись belongsTo Объявление. Моя форма добавления и форма редактирования работают, но если я использую компонент безопасности, мой запрос становится черной дырой. Может быть, я не использую передовой опыт. Контроллер 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'); ?>

Спасибо за вашу помощь!


person Elium1984    schedule 01.06.2012    source источник
comment
Я знаю, что на этот конкретный вопрос есть ответ, но если вы нашли это и все еще не можете найти решение, обратите внимание: в моем случае проблема заключалась в том, что входные данные были перезаписаны. Подробнее. ХТН   -  person aexl    schedule 21.03.2016


Ответы (2)


Это потому, что в вашей форме есть ввод файла. Вам нужно указать его при создании формы:

echo $this->Form->create('Ad', array('action'=>'edit', 'type' => 'file'));
person G.J    schedule 01.06.2012
comment
Спасибо, сэр, Simple прекрасен. - person Elium1984; 02.06.2012

С «полями ввода файла» в вашей форме вам нужно enctype=multipart/form-data, для этого вам нужно добавить 'type'=>'file' или ваш запрос на сохранение/обновление будет считаться черной дырой, пока используется компонент «Безопасность» cakephp.

echo $this->Form->create('Ad', array('action'=>'edit', 'type' => 'file'));
person Nikhil Bhardwaj    schedule 02.03.2015