Ir al contenido principal

Una aplicación web (CRUD) con Yii

 

 

Instalar Yii en Ubuntu


sudo apt-get install php5-mcrypt


wget -nd https://github.com/yiisoft/yii/releases/download/1.1.15/yii-1.1.15.022a51.tar.gz
tar -xzvf yii-1.1.15.022a51.tar.gz
rm yii-1.1.15.022a51.tar.gz
sudo mv yii-1.1.15.022a51 /var/www/html/yii



Verificar los requisitos accediendo a la página web:
http://localhost/yii/requirements/

Crear la estructura de la aplicación

cd /var/www/html/yii
framework/yiic webapp miapp
chmod o+w miapp/protected/models/
chmod o+w
miapp/protected/views/
chmod o+w
miapp/protected/controllers/ 

Instalar giix

wget -nd http://www.yiiframework.com/extension/giix/files/giix-1.9.2.zip
mkdir giix
cd giix/
unzip ../giix-1.9.2.zip 

rm ../giix-1.9.2.zip
cp -r giix-co* ../miapp/protected/extensions/
 


Modificar la configuración del fichero protected/config/main.php, para indicar el nombre de la aplicación, idioma español, que se importe la extensión de giix, habilitar gii y establecer la configuración de la base de datos (comentamos sqlite y configuramos Mysql):

'name'=>'Nombre de mi App',
'language'=>'es',
'sourceLanguage' => 'en',
'charset' => 'utf-8',

...
'import'=>array(
        'application.models.*',
        'application.components.*',
        'ext.giix-components.*', // giix components
    ),

...
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'una clave para entrar a gii',
            'generatorPaths'=> array('ext.giix-core', ),
            'ipFilters'=>array('127.0.0.1','::1'),
        ),

...
        /*'db'=>array(
            'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
        ),
        // uncomment the following to use a MySQL database
        */
        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=mibasededatos',
            'emulatePrepare' => true,
            'username' => 'miusuario',
            'password' => 'clave',
            'charset' => 'utf8',
        ),


...
Podemos ver el prototipo creado en:
http://localhost/yii/miapp/


Generando código automáticamente con Giix


Tablas de ejemplo:

CREATE TABLE localizacion (
  id integer NOT NULL auto_increment PRIMARY KEY,
  localizacion varchar(100) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE evento (
  id integer NOT NULL auto_increment PRIMARY KEY,
  idlocalizacion integer DEFAULT NULL COMMENT ,
  fecha datetime DEFAULT NULL,
  descripcion varchar(1000) DEFAULT NULL,
  FOREIGN KEY (idlocalizacion) REFERENCES localizacion (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Accedemos a Gii en:
http://localhost/yii/miapp/index.php?r=gii

Para crear toda la gestión (CRUD) de una tabla ya creada previamente en mysql podemos realizar lo siguiente en Gii:

1.- Generamos el modelo (Giix Model Generator) correspondiente a nuestra tabla, para ello indicamos el nombre de la tabla (localizacion) y el de la clase modelo que ya se nos ofrece automáticamente (Localizacion), pulsamos 'preview' y por último 'generate'. Igual para la tabla evento.

2.- Creamos la gestión del modelo (Giix CRUD Generator), para ello tendremos que indicar el modelo previamente creado: Localizacion y el controlador: localizacion. Como en la ocasión anterior pulsamos 'preview' y por último 'generate'. Igual para el modelo evento.


Veamos la gestión de la tabla funcionando:
http://localhost/yii/miapp/index.php?r=localizacion


Personalizando la aplicación

Menú y pie de página

Editamos el fichero protected/views/layouts/main.php y ahí podemos personalizar nuestro menú y pie de página según nuestras necesidades. Como crear una nueva opción de menú en función de si el usuario está o no identificado, que nos dará acceso de forma privada a la gestión de localizaciones y eventos:


    <div id="mainmenu">
        <?php
            if (Yii::app()->user->isGuest) {
                $this->widget('zii.widgets.CMenu',array(
                'items'=>array(
                    array('label'=>'Inicio', 'url'=>array('/site/index')),
                    array('label'=>'Sobre', 'url'=>array('/site/page', 'view'=>'about')),

                array('label'=>'Contactar', 'url'=>array('/site/contact')),                    array('label'=>'Conectar', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
                    array('label'=>'Desconectar ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
                ),
                ));
            }
        else {
                $this->widget('zii.widgets.CMenu',array(
                'items'=>array(
                    array('label'=>'Inicio', 'url'=>array('/site/index')),
                    array('label'=>'Sobre', 'url'=>array('/site/page', 'view'=>'about')),

                array('label'=>'Contactar', 'url'=>array('/site/contact')),                    array('label'=>'Gestión', 'url'=>array('/site/page','view'=>'gestion')),
                    array('label'=>'Conectar', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
                    array('label'=>'Desconectar ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
                ),
                ));           
        }

         ?>
    </div><!-- mainmenu -->

...
    <div id="footer">
        Copyright &copy; <?php echo date('Y'); ?> by Nacho.<br/>
        All Rights Reserved.<br/>

        <?php echo Yii::powered(); ?>
    </div><!-- footer -->


Personalizar la página de inicio, sobre, gestión, etc...

Estas páginas se encuentran en protected/views/site y editando por ejemplo el fichero index.php podremos personalizar los textos iniciales que aparecen al acceder a nuestra página web.

Crear una nueva página de gestión de los eventos y localizaciones, creamos un fichero llamado gestion.php dentro de protected/views/site/pages

<?php

$this->pageTitle=Yii::app()->name . ' - Gestión';
$this->breadcrumbs=array(
    'Gestión',
);
?>

<h1>Gestión</h1>

<?php echo CHtml::link('Localización', array('/localizacion/')); ?></br>
<?php echo CHtml::link('Evento', array('/evento/')); ?>


Usuarios y claves

Editamos el fichero protected/components/UserIdentity.php y ahí establecemos nuestros usuarios y claves:

public function authenticate()
    {
        $users=array(
            // username => password
            'nacho'=>'miclave',           
        );

...


Fuentes de información:
http://www.yiiframework.com/

sudo mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/ - udo mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/

Comentarios

Entradas populares de este blog

Instalación Django en NAS Synology con FastCGI

Los NAS Synology no traen el módulo de apache mod-wsgi por lo que he utilizado el módulo mod-fastcgi en su lugar para hacer funcionar Django en los NAS Synology. Necesitamos del módulo mysql-python , para su instalación podemos seguir la entrada que ya se publicó en este mismo blog:  http://ilizaran.blogspot.com.es/2014/09/instalacion-del-modulo-mysql-python-en.html De la instalación de mysql-python ya tendremos instalado pip en el NAS por lo que podremos instalar Django con algunos módulos necesarios: pip install Django pip install setuptools pip install flup Para saber que la instalación de Django ha sido correcta y verificar la versión podemos realizar: python import django  django.VERSION Ahora modifcamos la configuración de apache editando el fichero /etc/httpd/conf/httpd.conf-user  para hacer accesible los ficheros css, imágenes y javascript de la parte administrativa de Django, por lo que añadimos: Alias /static/admin /usr/local/packages/@appstore/Python/usr/l

Calcular en Mysql el primer y último día del mes

SELECT DATE_FORMAT(now(),'%Y-%m-01') AS first_day; SELECT date_add(date_add(LAST_DAY(now()),interval 1 DAY),interval -1 MONTH) AS first_day; SELECT LAST_DAY(now()) AS last_day; Calcular en Mysql el primer y último día del mes anterior: SELECT date_add(date_add(LAST_DAY(now()),interval 1 DAY),interval -2 MONTH) AS first_day; SELECT LAST_DAY(date_add(last_day(now()),interval -1 MONTH)) AS last_day;

Instalación del módulo mysql-python en NAS Synology

Instalar gcc en Synology Para la instalación de mysql-python es necesario el compilador gcc, por lo que lo obtendremos de Synology Open Source Project (http://sourceforge.net/projects/dsgpl). El paquete a descargar dependerá de la versión de NAS Synology que tengamos, por lo que tendremos que utilizara el comando: uname -a para conocer la versión de nuestro kernel y arquitectura instalada y descargar el paquete correspondiente. En mi caso he descargado: gcc463_glibc213_i686_cedarview-GPL.tgz pues mi equipo muestra cedarview y i686. Ahora lo descargamos y lo extraemos: cd /usr/local http://kent.dl.sourceforge.net/project/dsgpl/DSM%205.2%20Tool%20Chains/Intel%20x86%20Linux%203.2.40%20%28Cedarview%29/cedarview-gcc463_glibc213_i686_patched-GPL.txz tar -xvJf cedarview-gcc463_glibc213_i686_patched-GPL.txz rm cedarview-gcc463_glibc213_i686_patched-GPL.txz Instalación de las fuentes de Mysql Synology utiliza MariaDB, pero para la compilación del módulo de python podemos utiliz