Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Subir archivos y guardar datos en la tabla de CakePHP

Estas en el tema de Subir archivos y guardar datos en la tabla de CakePHP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/09/2012, 17:24
Avatar de carlosmedinna  
Fecha de Ingreso: julio-2012
Ubicación: Barcelona
Mensajes: 10
Antigüedad: 11 años, 9 meses
Puntos: 0
Subir archivos y guardar datos en la tabla de CakePHP

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 :(
  #2 (permalink)  
Antiguo 07/11/2012, 16:58
 
Fecha de Ingreso: noviembre-2012
Mensajes: 1
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Subir archivos y guardar datos en la tabla de CakePHP

Hola soy nuevo en esto el prblema está en linea $file = new File($this->data['Sector']['foto_uno']['tmp_name']);
en vez de eso debes de colocar

$file = new File($this->request->data['Sector']['foto_uno']['tmp_name'], true, 0644);


en la nueversion de cakephp 2.x trabaja con request asi que cambia el $this->data por
$this->request->data


para no hacer eso en cada foto puede generalizarlo en un componente...
Att. suerte!!!
  #3 (permalink)  
Antiguo 23/03/2016, 12:19
 
Fecha de Ingreso: marzo-2016
Mensajes: 1
Antigüedad: 8 años
Puntos: 0
Respuesta: Subir archivos y guardar datos en la tabla de CakePHP

Hola, estoy recien aprendiendo este framework y tengo el problema de editar, se suponer que se procede igual que la función add o me equivoco ??

Etiquetas: cakephp, framework, mvc
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:02.