Como generar archivos Excel desde Yii Framework

generar archivos Excel desde Yii

Con esta entrada usted sera capaz de generar hojas de calculo como archivos excel ó libreoffice, desde el Framework de PHP Yii. Para ello usaremos una extensión que integra PHPExcel a nuestro sistema en Yii.

– Instalar yii-phpexcel

Sigue leyendo

Instalar Boostrap a Yii Framework

yii booster boostrap yii
  • Descargar Yii Booster de su pagina oficial http://yiibooster.clevertech.biz/
  • Descomprimir
  • Renombrar yiibooster-4.0.1 a yiibooster
  • Copiar yiibooster al /protected/extensions/ quedando entonces /protected/extensions/yiibooster
  • a continuación agregaremos algunos valores en el archivo de configuración   /protected/config/main.php
  • En el arreglo donde se precargan componentes (en la linea 13 si es una instalación limpia) agregamos “yiibooster”, quedando entonces así:   ‘preload’=>array(‘log’, ‘yiibooster’),
  • En la sección del modulo Gii, agregaremos la linea: ‘generatorPaths’ => array(‘booster.gii’),

Sigue leyendo

#Yii – Controlador desde Controlador

controlador-yii

En esta entrada practicaremos hacer llamados a controladores específicos y sus acciones, desde otros controladores en los que sea requerido.

La practica consiste en lo siguiente: Necesitamos desde un controlador ( PrincipalController.php ), usar acciones que se encuentran en otros dos controladores (OperacionesController.php y PublicoController.php respectivamente).

.

OperacionesController.php

[sourcecode language=”php”]
<?php

class OperacionesController extends Controller{

public function actionSumar($a,$b){

if( is_null($a) && is_null($b) ){
$a= 6;
$b= 7;
}

$resultado = $a + $b;
if(!is_numeric($a) || !is_numeric($b))
throw new CHttpException(404,’Epa no es un dato numerico.’);
else
return $resultado;

}

}
[/sourcecode]

.

PublicoController.php

[sourcecode language=”php”]
<?php

class PublicoController extends Controller{

public function actionCapturarVisitante($aleatorio){

$visitante = "<br> IP:{$_SERVER["REMOTE_ADDR"]}<br>";
$visitante .= "HOST:{$_SERVER["REMOTE_PORT"]}<br>";
$visitante .= "URI:{$_SERVER["REQUEST_URI"]}<br>";
$visitante .= "Fecha: ".date("d-m-Y h:i:s")."<br>";
$visitante .= "Navegador: {$_SERVER["HTTP_USER_AGENT"]}<br>";
$visitante .= "Identificador: {$aleatorio}<br><br>";

return $visitante;

}

}
[/sourcecode]

.

PrincipalController.php

En este controlador usamos las acciones de los controladores anteriores. Al controlador OperacionesController.php y sus acciones accederemos indicando que nuestro controlador extiende del mismo (linea 3), recordando y entendiendo que al final de cuentas un controlador no es mas que una clase y sus acciones los métodos de esta clase (linea 7). Ahora las acciones del controlador PublicoController.php las capturaremos indicando: el controlador objetivo + la acción objetivo + los parámetros si los requiere como lo indica la linea 9.

[sourcecode language=”php”]
<?php

class PrincipalController extends OperacionesController{

public function actionMivista(){

$suma = $this->actionSumar(11,3);

$visitante = PublicoController::actionCapturarVisitante(rand(10000,99999));

$this->render(‘mivista’,
array( ‘suma’ => $suma, ‘visitante’ => $visitante ));
}

}
[/sourcecode]

.

En el archivo protected/config/main.php especificar que se importaran todos los controladores agregando la siguiente linea en el bloque import: ‘application.controllers.*’

De lo contrario es probable que experimenten este tipo de errores:

include(OperacionesController.php): failed to open stream: No such file or directory

.

Vista generada desde PrincipalController.php

protected/views/principal/mivista.php

[sourcecode language=”php”]
<h1>Controlador desde controlador en Yii</h1>

<b><?php echo ‘El resultado de la suma es: ‘.$suma ?> </b>

<b><br /><br />Datos del visitante: </b><?php echo $visitante ?>

<div>
<?php echo CHtml::submitButton(‘Enviar’); ?>
</div>
[/sourcecode]

Finalmente nuestra vista mostrara información que se genero y proceso desde tres controladores distintos.

controlador-yii

Vista en Yii usan en backend 3 controladores

Existen otros medios de realizar tareas iguales o similares, una u otra forma serán mas eficientes o mas acordes según el entorno, variables y las propias reglas de negocio que regulen su desarrollo en yii.

Lecturas muy recomendadas:

http://www.yiiframework.com/doc/guide/1.1/es/basics.controller

http://yiiframework.wordpress.com/2009/01/21/basico-modelo-vistas-y-controladoresmvc/

http://blog.jorgeivanmeza.com/2010/01/los-controladores-en-yii-2/

El problema de los booleanos en Yii usando postgreSQL

error-boolean-integer-yii-postgres

Actualmente Yii en su versión mas reciente (1.1.14) y por lo menos desde la versión 1.0, trae por defecto un inconveniente para el trabajo de inserción en tipos de datos BOOLEAN en el motor de datos PostgreSQL. A continuación un breve recorrido de la problemática, incluyendo la resolución del problema. El ejemplo es en base a: Debian Wheezy, Apache 2.2.22, PHP 5.4.4, PostgreSQL 9.2, Yii 1.1.14.

.

CREATE TABLE tipo_de_datos
(
id integer NOT NULL DEFAULT nextval(‘”tipo-de-datos_id_seq”‘::regclass), — clave primaria
nombre character varying(60) NOT NULL, — campo tipo character varying de 60
valido boolean NOT NULL DEFAULT true, — tipo boolean TRUE o FALSE
creado_en timestamp without time zone, — fecha y hora de creacion del registro timestamp without time zone
actualizado_en timestamp without time zone NOT NULL DEFAULT now(), — fecha y hora de creacion del registro timestamp without time zone
CONSTRAINT pk_id PRIMARY KEY (id)
)

boolean-yii-postgres

boolean-yii-postgres

E.

..:: El error y objetivo de esta entrada:

CDbCommand failed to execute the SQL statement: SQLSTATE[42804]: Datatype mismatch: 7 ERROR: la columna «valido» es de tipo boolean pero la expresión es de tipo integer
LINE 1: … “nombre”, “creado_en”, “actualizado_en”) VALUES (1, ‘prueba…
^
HINT: Necesitará reescribir la expresión o aplicarle una conversión de tipo.. The SQL statement executed was: INSERT INTO “tipo_de_datos” (“valido”, “nombre”, “creado_en”, “actualizado_en”) VALUES (:yp0, :yp1, :yp2, :yp3)

.

error-boolean-integer-yii-postgres

error-boolean-integer-yii-postgres

.

..:: Solución

Comentar la linea: ’emulatePrepare’ => true, en protected/config/main.php

Para saber mas sobre emulatePrepare y el por que quitarlo visite los siguientes enlaces:

http://www.yiiframework.com/doc/api/1.1/CDbConnection#emulatePrepare-detail

http://www.yiiframework.com/forum/index.php/topic/33152-database-error-convert-boolean-to-integer/

https://bugs.php.net/bug.php?id=62593

Una vez comentada dicha linea (por defecto en el config/main.php en la linea 57) debería guardar el registro.

.

boolean-yii

#Yii guardando booleano en postgreSQL

#Yii – ComboBox en filtros del CGridView

ComboBox Yii

[sourcecode language=”php”]
<?php $this->widget(‘zii.widgets.grid.CGridView’, array(
‘id’=>’localidad-grid’,
‘itemsCssClass’ => ‘table table-striped’,
‘dataProvider’=>$model->search(),
‘filter’=>$model,
‘columns’=>array(
‘id’,
‘id_estado’=>array(
‘name’ => ‘id_estado’,
‘value’ => ‘$data->idEstado->nombre’,
‘filter’=> CHtml::listData(GeoEstado::model()->findAll(array(‘order’=>’nombre’)), ‘id’, ‘nombre’)
),
‘id_municipio’,
‘id_parroquia’,
/*’texto’,*/
array(
‘class’=>’CButtonColumn’,
),
),
)); ?>
[/sourcecode]

Estado es una tabla relacionada a Localidad, su campo de clave primaria es id y el campo con el texto para mostrarle al usuario es nombre

filter-yii-CGridView

filter-yii-CGridView

  Sigue leyendo 

Sessions en base de datos con Yii

yii framerwork

CDbHttpSession es la clase encargada en Yii de proveer almacenamiento de las sesiones (yii sessions) en base de datos.

en el archivo protected/config/main.php colocaremos dentro de la sección ‘components’

[sourcecode language=”php”]
‘session’ => array (
‘class’ => ‘system.web.CDbHttpSession’,
‘connectionID’ => ‘db’,
‘sessionTableName’ => ‘tblsession’,
),
[/sourcecode]

Esto nos creara mágicamente una tabla en nuestra base de datos con el nombre que indicamos en sessionTableName, si no indicamos este atributo la tabla sera creada con el nombre YiiSession. Esta tabla tendrá tres (3) campos: id, expire, data

A este punto si usamos el sistema, la tabla tblsession tendrá almacenada nuestra session

yii sessions

Sessions creadas en Yii y almacenadas en PostgreSQL

.

Extendiendo CDbHttpSession para agregar valores adicionales

Agregaremos el usuario que se autentica y su dirección ip a las sesiones que gestionaremos en nuestra base de datos, para ello extenderemos la clase CDbHttpSession adaptandola a nuestras necesidades. Esto lo lograremos en dos (2) sencillos pasos: Sigue leyendo

Entendiendo Yii

Yii – Yes, it is

Un framework es un conjunto de código, librerías y componentes de software probados, optimizados para facilitar y agilizar el desarrollo de aplicaciones, basado en las mejores prácticas de desarrollo, que permitirán trabajar de forma uniforme, organizada y con la mayor cálidad posible. Normalmente cuentan con documentación, una comunidad organizada que constantemente esta trabajando y luchando por su constante desarrollo y mantenimiento. Los frameworks tienen la intención de enfocar el trabajo de programación a las áreas que realmente agregaran un valor al negocio y que supondrán la esencia de la aplicación que se construirá, por ello intenta restarle trabajo a los programadores en áreas mas triviales a estas alturas como la validación de campos, operaciones de consultar, insertar, modificar y eliminar por decir algunos ejemplos.

entendiendo-yii

Yii es un framework de desarrollo de alto rendimiento, muy flexible y versátil, escrito en PHP5 para el desarrollo rápido de aplicaciones web. Yii es software libre liberado bajo una licencia BSD, y tiene la concepción de hacer las cosas de manera sencilla, elegante y rápidas, ayudando con esto a construir aplicaciones eficientes, que fácilmente pueden ser mantenidas y escaladas.

Yii le presenta al programador un código fuente limpio, sencillo y entendible que roza con lo intuitivo de como que hace cada trozo de código y que significa cada elemento.

Yii es una opción idónea para desarrollos de sistemas pequeños hasta para desarrollos de grandes aplicaciones que necesiten garantizar la disponibilidad de la misma.

Yii es un acrónimo de Yes, it is! proveniente de la respuesta que el proyecto Yii le da a los que por primera vez se plantean si adoptar su uso:

Is it fast? … Is it secure? … Is it professional? … Is it right for my next project? … Yes, it is!

¿Es rápido? … ¿Es seguro? … ¿Es profesional? … ¿Es lo que necesito para mi próximo proyecto? … Sí, lo es!

Algunos otros frameworks existentes:

– Symfony (PHP) – symfony.com
– CakePHP (PHP) – cakephp.org
– CodeIgniter (PHP) – codeigniter.com
– Ruby on Rails (Ruby) – rubyonrails.org
– Catalyst (Perl) – catalystframework.org
– Django (Python) – djangoproject.com

Por que escoger Yii

Yii es un framework genérico de programación Web que puede ser utilizado para todo tipo de aplicaciones Web. Gracias a que es liviano de correr y está equipado con soluciones de cacheo sofisticadas, es adecuado desde para desarrollar aplicaciones de gran tráfico como portales, foros, CMS, e-commerce, etc… Hasta para desarrollar aplicaciones de mayor complejidad que necesiten  interconexión y interoperabilidad de sistemas, bases de datos, webservices,  etc…

– Rápido

Yii sólo carga las características que usted necesita. Tiene excelente y poderoso soporte de caché. Esta explícitamente diseñado para trabajar eficientemente con AJAX.

Yii es mucho más rápido, ya que utiliza la técnica de carga diferida ampliamente, es decir se carga, interpreta o procesa contra demanda únicamente lo que se solicita,  Por ejemplo, no se incluye un archivo de clase hasta que la clase se utiliza por primera vez, y no se crea un objeto hasta que el objeto se accede por primera vez. Otros frameworks sufren mucho el impacto del rendimiento, ya que permiten una funcionalidad (por ejemplo, conexión DB, sesión de usuario, etc…) independientemente de que se usen o no durante una petición.

– Seguro

La seguridad es un estándar en Yii. Éste incluye la validación de entradas, filtrado de salidas, prevención de inyección SQL y Cross-site scripting.

Yii está equipado con medidas de seguridad para ayudar a proteger sus aplicaciones web de ataques como inyección SQL, cross-site scripting (XSS), cross-site request forgery (CSRF), y de  manipulación de cookies (Cookie Tampering).

– Profesional

Yii le ayuda a desarrollar un código limpio y reutilizable. Sigue el patrón MVC, lo que garantiza una clara separación de la lógica del negocio y la presentación. Fomenta la sinergia en equipos de desarrollo y promueve activamente métodos ágiles de trabajo que son ideales para combinar con metodologías como SCRUM o XP

Sigue leyendo

YII – Autenticación de usuarios + ultimo acceso

Este post tiene por objetivo crear la funcionalidad de autenticación de usuarios contra una base de datos usando el humilde y eficiente framework YII.

Se pretende con este post ampliar la explicación del capitulo 9 de la GUIA BASICA DE YII FRAMEWORK añadiendo algunos detalles como la captura y gestión del la fecha del ultimo acceso al sistema por cada usuario, condicionar mostrar elementos del menú según el perfil del usuario.

Creamos la tabla que vamos a usar para la practica en este caso estamos usando como base de datos postgreSQL, creamos la columna created_at que guardara automáticamente la fecha en que se ingresa cada registro haciendo uso de la función de postgres now().

[sourcecode language=”sql”]
CREATE TABLE usuario
(
id_usuario serial NOT NULL,
cedula character varying(12) NOT NULL,
nombre character varying(50) NOT NULL,
apellido character varying(50) NOT NULL,
email character varying(100) NOT NULL,
username character varying(128) NOT NULL,
password character varying(128) NOT NULL,
perfil character varying(10) NOT NULL,
created_at timestamp without time zone DEFAULT now(),
last_login timestamp without time zone,
CONSTRAINT usuario_pkey PRIMARY KEY (id_usuario )
);
[/sourcecode]

created_at-last-login-php-yii

created_at-last-login-php-yii

Sigue leyendo

V Jornastec – Taller Yii Framework

En el marco de las V Jornadas Nacionales de Soberanía Tecnológica (Jornastec ) realizada en Caracas  el 16-10-2011, se realizo un taller teórico-practico donde se aparte del intercambio de conocimientos relacionados a los framework’s de desarrollo, también se realizo un sistema sencillo con Yii Framework de PHP, el cual es un sistema demostrativo tipo registro donde aparte del CRUD, alcanzo el tiempo para generar PDF con la librería  MPDF , se realizo la carga de imágenes y se mejoraron los formularios agregando las relaciones, campo de fecha y otros detalles. Todo esto usando Yii contra postgreSQL como base de datos, en Canaima GNU/Linux (Basado en Debian).

Sigue leyendo