Buenas:
Estoy intentado entrar en esto de los Framworks y me he decidido por Cakephp, he probado a hacer una pequeña aplicación, el modelo es este:
Código:
class Sector extends AppModel {
/**
* Validation rules
*
* @var array
*/
public $validate = array(
'nombre' => array(
'notempty' => array(
'rule' => array('notempty'),
//'message' => 'Your custom message here',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
'descripcion' => array(
'notempty' => array(
'rule' => array('notempty'),
//'message' => 'Your custom message here',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
'foto_uno' => array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Elige una imagen',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
'foto_dos' => array(
'notempty' => array(
//'rule' => array('notempty'),
//'message' => 'Elige una imagen',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
);
En el controlador después de mirar info por google encontré esto, y de momento sube los archivos, pero al momento de guardar en la tabla el "foto_uno" me devuelve error al decirme que el campo está vacio, pero no logro comprender como decirle o indicarle que el nombre que ha de guardar en ese campo es lo que normalemte antes hacia con
$_FILE['foto_uno']['name']... pero ahora hace aquello de guardar con
($this->Sector->save($this->request->data))
De momento este es el código del Controller
Código:
public function add() {
if ($this->request->is('post')) {
//Subir imagenes
if ($this->data['Sector']['foto_uno']) {
$file = new File($this->data['Sector']['foto_uno']['tmp_name']);
$path_parts = pathinfo($this->data['Sector']['foto_uno']['name']);
$ext = $path_parts['extension'];
if ($ext != 'jpg' && $ext != 'jpeg' && $ext != 'gif' && $ext != 'png') {
$this->Session->setFlash('Solo puedes subir imagenes.');
$this->render();
} else {
$date = $this->data['Sector']['foto_uno']['name'];
$filename =$date.'-post-image.'.$ext;
$data = $file->read();
$file->close();
$file = new File(WWW_ROOT.'/img/'.$filename,true);
$file->write($data);
$file->close();
}
}
//Fin subir imagenes
$this->data['Sector']['foto_uno'] = $this->data['Sector']['foto_uno']['name'];
$this->Sector->create();
if ($this->Sector->save($this->request->data)) {
$this->Session->setFlash(__('The sector has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The sector could not be saved. Please, try again.'));
}
}
}
Y el view
Código:
<div class="sectors form">
<?php echo $this->Form->create('Sector', array('type' => 'file')); ?>
<fieldset>
<legend><?php echo __('Add Sector'); ?></legend>
<?php
echo $this->Form->input('nombre');
echo $this->Form->input('descripcion');
echo $this->Form->input('foto_uno', array('type' => 'file'));
echo $this->Form->input('foto_dos', array('type' => 'file'));
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
<div class="actions">
<h3><?php echo __('Actions'); ?></h3>
<ul>
<li><?php echo $this->Html->link(__('List Sectors'), array('action' => 'index')); ?></li>
<li><?php echo $this->Html->link(__('List Franquicias'), array('controller' => 'franquicias', 'action' => 'index')); ?> </li>
<li><?php echo $this->Html->link(__('New Franquicia'), array('controller' => 'franquicias', 'action' => 'add')); ?> </li>
</ul>
</div>
Me gustaría saber que debo hacer para que guarde el valor de los campos
foto_uno y foto_dos en la tabla, y que además suba los archivos a la carpeta adecuada (cosa que de momento ya hace)
Pos eso, gracias
PD: tengo MUY POCA idea sobre POO, así que cosas que parecen evidentes, a veces no lo son :(