【问题标题】:SaveField Cakephp validationSaveField Cakephp 验证
【发布时间】: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 一次?

标签: forms validation cakephp cakephp-2.3


【解决方案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-&gt;data['Archivo']['archivo']['tmp_name'], $destino.$this-&gt;data ['Archivo']['archivo']['name'])){ $this-&gt;request-&gt;data['Archivo']['ano'] = $this-&gt;data['Archivo']['ano ']['年']; $this-&gt;request-&gt;data['Archivo']['ruta'] = $destino 。 $this-&gt;data['Archivo']['archivo']['name']; $this-&gt;Archivo-&gt;save($this-&gt;request-&gt;data); $this-&gt;Session-&gt;setFlash(__('Archivo Guardado')); }
  • 我认为您对数组索引感到困惑。为什么是['Archivo']['archivo']['tmp_name']['Archivo']['ano']?我认为应该只有 2 个级别。
  • 我用 Archivo->save 更改了代码(并且可以工作)......但无论如何都无法验证......在视图中似乎验证了,因为出现了必需的(*)但是当我点击保存表单的按钮省略了验证@SharkofMirkwood
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多