Hola.
Tengo el formulario del modelo Producto, que tiene una serie de atributos, como precio,…, en la base de datos, guardo esos atributos y el nombre de la foto con su tipo es decir "1.jpg", el controlador tendría que guardar la foto en el directorio x pero con el nombre modificado al de id de su inserción y con su extensión.
El problema está, en que nada más empezar con esto y siguiendo los pasos de este link, parece que no me funciona, el formulario de error me dice: (Archivo no puede ser nulo), cuando sí que se lo he especificado un archivo.
Si alguien sabe que hago mal
Modelo
class Productos extends CActiveRecord {
$public archivo;
public function rules() {
return array(
array('foto', 'required'),
array('foto','length', 'max' => 100),
array('archivo','file','types'=>'jpg, gif, png'),
};
}
public function attributeLabels() {
return array(
'foto'=>'Foto',
'archivo'=>'Archivo',
};
}
}
Controlador
...
public function actionCreate() {
$model = new Productos;
if (isset($_POST['Productos'])) {
$model->attributes = $_POST['Productos'];
$archivo=CUploadedFile::getInstance($model,'archivo');
$model->foto=$archivo->name;
if ($model->save()){
$model->archivo->saveAs('/images/productos/');
$this->redirect(array('view', 'id' => $model->id));
}
}
$this->render('create', array('model' => $model,));
}
...
Formulario (_form.php)
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'productos-form',
'enableAjaxValidation' => false,
));
$form->errorSummary($model);
?>
<div class="row">
<?php echo $form->labelEx($model, 'archivo'); ?>
<?php echo $form->FileField($model, 'archivo'); ?>
<?php echo $form->error($model, 'archivo'); ?>
</div>
<?php echo CHtml::submitButton($model->isNewRecord ? 'Guardar' : 'Save'); ?>
<?php $this->endWidget(); ?>