SaveField Cakephp 验证
Posted
技术标签:
【中文标题】SaveField Cakephp 验证【英文标题】:SaveField Cakephp validation 【发布时间】:2013-08-01 21:23:37 【问题描述】:我有这个问题.. 我无法验证表单的 2 个字段并使用 SaveField 保存数据但无法验证.. 检查代码:
Archivo.php(模型)
<?php
class Archivo extends AppModel
var $name = 'Archivos';
public $validate = array(
'mes' => array(
'rule' =>
array('multiple', array(
'min' => 1
)
),
'message' => 'Debe Seleccionar Una (1) Opción',
'required' => true,
),
'ano' => array(
'rule' =>
array('multiple', array(
'min' => 1
)
),
'message' => 'Debe Seleccionar Una (1) Opción',
'required' => true,
),
);
?>
ArchivosController
<?php
class ArchivosController extends AppController
var $name = 'Archivos';
var $helpers = array('html','Form');
//var $scaffold;
.
.
.
function add() ###FORMULARIO PARA SUBIR ARCHIVOS DE TEXTO AL SISTEMA
$this->Archivo->create();
#### SI LA INFORMACION ENVIADA ES 'POST' SE PROCEDE A TRABAJAR CON EL ARCHIVO SINO CREARA UN FORMULARIO EN BLANCO
if ($this->request->is('post'))
debug($this->request->data);
##### DEL POST SE VERIFICA SI EL ARCHIVO TIENE ALGUN FALLO O SI NO TIENE NADA
if( $this->data['Archivo']['archivo']['error'] == 0 && $this->data['Archivo']['archivo']['size'] > 0)
// Informacion del tipo de archivo subido $this->data['Upload']['archivo']['type']
####DONDE SE GUARDARAN LOS ARCHIVOS SUBIDOS
$destino = WWW_ROOT.'files'.DS;
##### MOVEMOS EL ARCHIVO DE LA CARPETA TEMPORAL A LA RUTA SELECCIONADA ($DESTINO),
##### EN BASE DE DATOS SOLO SE GUARDARA LA RUTA, EL MES Y EL AÑO DEL ARCHIVO
if(move_uploaded_file($this->data['Archivo']['archivo']['tmp_name'], $destino.$this->data['Archivo']['archivo']['name']))
$this->Archivo->saveField('ruta', $destino.$this->data['Archivo']['archivo']['name']);
$this->Archivo->saveField('mes', $this->data['Archivo']['mes'], true);
$this->Archivo->saveField('ano', $this->data['Archivo']['ano']['year'], true);
$this->Session->setFlash(__('Archivo Guardado'));
else
$this->Session->setFlash(__('El archivo no se pudo subir, por favor intentelo de nuevo'));
$this->redirect(array('action' => 'index'));
else
$this->Session->setFlash(__('Error al intentar subir el archivo'));
?>
添加.ctp
<?php echo $this->Form->create('Archivo', array('type' => 'file'));?>
<fieldset>
<legend>Añadir Nuevo Archivo</legend>
<?php
//echo $this->Form->input('mes',array('type'=>'date'));
echo $this->Form->input('mes', array(
'options'=>array(
'Enero'=>'Enero',
'Febrero'=>'Febrero',
'Marzo'=>'Marzo',
'Abril'=>'Abril',
'Junio'=>'Junio',
'Agosto'=>'Agosto',
'Septiembre'=>'Septiembre',
'Octubre'=>'Octubre',
'Noviembre'=>'Noviembre',
'Diciembre'=>'Diciembre'),
'empty'=>'(Seleccione un Mes)',
'label'=>'Mes'
)
);
//echo $this->Form->year('ano','2013',date('Y'),array('empty'=>'(Seleccione un Año)','label' =>'Año'));
echo $this->Form->input('ano', array(
'type' => 'date',
'dateFormat' => 'Y',
'minYear' => date('Y'),
'maxYear' => date('Y') + 1,
'label' => 'Año',
'empty' => '(Seleccione un Año)',
//'default' => date('Y')
));
echo $this->Form->input('archivo',array('type' => 'file','label'=>''));
//echo $this->Form->input('valido', array('checked'=>'true'));
?>
</fieldset>
<?php echo $this->Form->end('Enviar') ?>
<?php echo $this->Html->link('Mostrar Todos Los Archivos',array('action'=>'index')); ?>
无法验证的字段是“mes”和“ano”并保存数据
$this->Archivo->saveField('mes', $this->data['Archivo']['mes'], true); $this->Archivo->saveField('ano', $this->data['Archivo']['ano']['year'], true);
我试着把代码写成这样
$this->Archivo->saveField('ano', $this->data['Archivo']['ano']['year'], array('validate' => true));
但是没用
请帮忙,谢谢
【问题讨论】:
为什么你打电话给saveField
3 次,而不是打电话给save
一次?
【参考方案1】:
saveField 将验证设置为 false
【讨论】:
但验证可以设置为真(文档说),但它不起作用【参考方案2】:改为这样:
$this->data['Archivo']['ruta'] = $destino . $this->data['Archivo']['archivo'];
if(move_uploaded_file($this->data['Archivo']['archivo']['tmp_name'], $destino.$this->data['Archivo']['archivo']['name']) && $this->Archivo->save($this->data))
$this->Session->setFlash(__('Archivo Guardado'));
它应该工作得更好 - 我不认为自动验证适用于 saveField()
。正如另一位用户指出的那样,当您可以调用一次save
时,多次使用saveField
是没有意义的。
布埃纳苏尔特!
【讨论】:
我将代码更改为: if(move_uploaded_file($this->data['Archivo']['archivo']['tmp_name'], $destino.$this->data ['Archivo']['archivo']['name'])) $this->request->data['Archivo']['ano'] = $this->data['Archivo']['ano ']['年']; $this->request->data['Archivo']['ruta'] = $destino 。 $this->data['Archivo']['archivo']['name']; $this->Archivo->save($this->request->data); $this->Session->setFlash(__('Archivo Guardado'));
我认为您对数组索引感到困惑。为什么是['Archivo']['archivo']['tmp_name']
和['Archivo']['ano']
?我认为应该只有 2 个级别。
我用 Archivo->save 更改了代码(并且可以工作)......但无论如何都无法验证......在视图中似乎验证了,因为出现了必需的(*)但是当我点击保存表单的按钮省略了验证@SharkofMirkwood以上是关于SaveField Cakephp 验证的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP 2.2.1 - 在表单上显示 CakePHP 错误 - 自定义验证