me acabo de iniciar en Yii hace unas semanas y estoy bastante contenta, pero me ha surgido el primer problema que no se cómo resolver.
Tengo varios proyectos en mi servidor y quiero refactorizarlos con Yii. Muchos usan librerías comunes por lo que tengo una carpeta con todas ellas de manera que cada aplicación puede acceder a este directorio compartido sin tener que repetir las librerías en cada proyecto. ¿Hay alguna manera de hacer esto mismo en Yii u obligatoriamente tengo que copiar cada librería en cada proyecto?
Si quieres utilizar parcialmente la librería de yii puedes dejarla fuera del root de tus proyectos y definir permisos para un buen nivel de seguridad. de hecho si te fijas en el boostrap de yii (el index.php) de un esqueleto de yii ves esto:
<?php
// change the following paths if necessary
$yii=dirname(__FILE__).'/../framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
require_once($yii);
Yii::createWebApplication($config)->run();
Precisamente esta linea
$yii=dirname(FILE).’/../framework/yii.php’;
es la manera correcta de invocar la libreria de yii…simplemente carga la libreria de esta manera al crear modulos para tu proyecto y podras utilizar las herramientas del framework.
Gracias por tu respuesta JavierLog, pero no se si nos hemos entendido bien.
Tengo la libreria de Yii (el core) en una carpeta fuera del www tal y como me indicas. Las aplicaciones que voy creando se van metiendo en www.
–yii
–www
----aplicacion1
----aplicacion2
Cuando me descargo una extension o una librería de terceros en todos los manuales y tutoriales que encuentro indican que hay que meterlos dentro de las aplicaciones, por ejemplo en:
–yii
–www
----aplicacion1
------protected
---------extensions
Para mi no tiene sentido (y es un problema) tener que copiar la libreria en cada extension de cada aplicacion. ¿No puedo tener todas las librerias al mismo nivel que la carpeta yii y acceder desde las aplicaciones?
La mayoria de los programadores en yii con esqueletos hechos por el framework y por lo tanto las extensiones vienen para usar dentro de el directorio. Sin embargo ahí una manera de usar extensiones hechas por terceros, puedes usar las extensiones como "Componentes Genericos", es decir Puedes poner la extension en una carpeta de la carpeta del framework y luego llamadola haciendo import …ejem
Disculpa que abra nuevamente este tópico pero hay algo que no entiendo bien.
Porque hay que seguir usando las librerías que se encuentran en
../framework/yii.php
En mi caso, aplique lo siguiente:
./yiic webapp ../../miapp
para que se pusiera en el / de apache según lo que pensaba en el momento era que no iba a trabajar sin problemas a la hora de subirlo al hosting pero me dio error y ok, solucionado pero no se, pienso que si uno crea la aplicación fuera del directorio de Yii, no debería ser hiper dependiente de las librerías.
En este caso el aproach era usar las librerias del framework para un proyecto hecho en PHP sin el framework.
Ella no tiene un esqueleto de una aplicacion yii framework. asi que como no tiene una estructura fija, en donde colocar sus extensiones, lo hace dentro de la carpeta del framework.
Yii framework coloca sus librerias en una carpeta independiente de la aplicacion por motivos de seguridad y escalabilidad.Es decir si en algun momento sale una nueva version , puedes facilmente remplazar la carpeta del framework perse.
En cuanto a seguridad podria decirse que puedes poner niveles de permisos mas estrictos sobre la carpeta, u colocarla en un lugar estrategico de tu servidor para luego cargarla desde el bootstrap.
Si se quiere aun mas seguridad tambien podrias encryptar el bootstrap index.php con Zend Guard, o cualquiero otra herramienta de crypto para archivos de php, de esa manera nadie ve la localidad de tu libreria core.