我有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'); ?>
谢谢你的帮助!
答案 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'));