Slim PHP y MongoDB ( III ) Manejo Datos

Continuando con este micro-framework, ahora toca ver el manejo de los datos enviados por un formulario y guardarlos en la BD.

Supongamos que nuestro form es así

<form class="form-horizontal" method="post" action="/PedidoExpress">
	<fieldset>
		<div id="legend">
			<legend>Pedido</legend>
		</div>
		<div class="control-group">
			<label class="control-label" for="origen">Origen</label>
			<div class="controls">
				<input type="text" name="origen" class="input-xlarge">
				<p class="help-block">D&oacute;nde debe ir a buscarte el m&oacute;vil ?</p>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label" for="destino">Destino</label>
			<div class="controls">
				<input type="text" name="destino" class="input-xlarge">
				<p class="help-block">D&oacute;nde debe llevarte el m&oacute;vil?</p>
			</div>
		</div>
		<div class="control-group">
			<label class="control-label" for="telefono">Tel&eacute;fono</label>
			<div class="controls">
				<input type="text" name="telefono" class="input-xlarge">
				<p class="help-block">Para confirmar t&uacute; pedido</p>
			</div>
		</div>
		<div class="control-group">
			<div class="controls">
				<button class="btn btn-success">Go !</button>
			</div>
		</div>
	</fieldset>
</form>

Como ven, envía los datos por Post a /PedidoExpress. En las rutas tenemos lo siguiente

$app -> post('/PedidoExpress', function() use($app){
	require "models/PedidoExpress.php";
	$pedidoEx = new PedidoExpress(
		$app -> request() ->params("origen"),
		$app -> request() ->params("destino"),
		$app -> request() ->params("telefono")
	);
	$data = array(
		"Mensaje" => print_r($pedidoEx -> Guardar(), TRUE),
		"Detalle" => "La empresa que acepte tu pedido debería llamarte en un plazo no mayor a 15 minutos."
	);
	$app->render("avisos.php", $data);
}); 
  1. Instanciamos $pedidoEx con los datos que llegan del formulario.
  2. Creamos un array para mandar información al layout que entrega info al usuario.
  3. Renderizamos (😯 ) el layout.

Veamos la clase PedidoExpress

<?php
class PedidoExpress extends MongoHandler{
	public $Origen, $Destino, $Telefono, $Estado, $Fecha;
	public function __construct($origen, $destino, $telefono){
		$this -> Destino = $destino;
		$this -> Estado = FALSE;
		$this -> Origen = $origen;
		$this -> Telefono = $telefono;
		$this -> Fecha = new DateTime();
	}

	public function Guardar(){
		try {
			$this -> conectar();
			$this -> setDB("TaxiOnline");
			$this -> setCollections("PedidosExpress");
			return $this -> insert(
				array(
					"Destino" => $this->Destino,
					"Estado" => $this->Estado,
					"Origen" => $this->Origen,
					"Telefono" => $this->Telefono,
					"Fecha" => $this->Fecha
				)
			);
		} catch (Exception $e) {
			throw new RuntimeException("Error al reservar :C " . $e);
		}
	}

	public function Consultar($_id){
	try {
		$this -> conectar();
		$this -> setDB("TaxiOnline");
		$this -> setCollections("PedidosExpress");
		return (is_null($_id)) ?
			$this -> get() :
			$this -> get(
				array("_id" => new MongoId($_id))
			);
		} catch (Exception $e) {
			throw new RuntimeException("Error al consultar :C " . $e);
		}
	}

	public function Borrar($_id){
		return $this -> delete(
			array("_id" => new MongoId($_id))
		);
	}

	public function Actualizar($valores, $_id){
		return $this -> update(
			array("_id" => new MongoId($_id)),
			$valores
		);
	}

	public function toJson(){
		return json_encode($this);
	}
}
?> 

Como ven, esta clase a su vez hereda de MongoHandler

<?php
class MongoHandler{

	protected $m = NULL;
	protected $db = NULL;
	protected $col = NULL;

	protected function conectar(
		$host = "localhost",
		$puerto = "27017",
		$usuario, $pass) {
		try {
			$connS = (is_null($usuario && $pass)) ?
				"mongodb://$usuario:$pass@$host:$puerto/TaxiOnline" :
				"mongodb://$host:$puerto/TaxiOnline";
			$this -> m = new Mongo($connS, array("persist" => "x"));
		} catch (Exception $e) {
			throw new RuntimeException("No es posible conectar a: mongodb://$host:$puerto". $e);
		}
	}

	protected function setDB($db){
		$this -> db = $this -> m -> selectDB($db);
	}

	protected function setCollections($col){
		$this -> col = $this -> db -> selectCollection($col);
	}

	protected function insert($document){
		$this -> col -> insert($document);
		return "Pedido Registrado con ID: ". $document['_id'];
	}

	protected function get($f = NULL){
		$cursor = (is_null($f)) ?
			$this -> col ->find() :
			$this -> col ->find($f);
		$k = array(); $i = 0;
		while ($cursor -> hasNext()) {
			$k[$i] = $cursor -> getNext();
			$i++;
		}
		return $k;
	}

	protected function update($c, $v){
		return $this -> col -> update($c, $v);
	}

	protected function delete($c, $one = FALSE){
		return $this -> col -> remove($c, $one);
	}

	protected function ensureIndex($c){
		return $this -> col -> ensureIndex($this -> col, $c);
	}
}
?> 

Listo ! Solo falta el layout de avisos

<h1><?php echo $Mensaje; ?></h1>
<p><?php echo $Detalle; ?></p> 

Y eso sería todo ! 
Obviamente, tienen que tener el driver de MongoDB corriendo

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en MongoDB, php, Tutoriales y etiquetada . Guarda el enlace permanente.

3 respuestas a Slim PHP y MongoDB ( III ) Manejo Datos

  1. Gonzalo dijo:

    Muchas gracias por el tutorial, sencillo y fácil

  2. Anónimo dijo:

    thx, great!!

  3. José Ricardo Borba dijo:

    Muy sencillo y inteligente. Gracias por esto.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s