mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-10-31 10:39:59 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			193 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| Trabajar con código de terceros
 | |
| ===============================
 | |
| 
 | |
| De tiempo en tiempo, puede necesitar usar algún código de terceros en sus aplicaciones Yii. O puedes querer
 | |
| utilizar Yii como una librería en otros sistemas de terceros. En esta sección, te enseñaremos cómo conseguir estos objetivos.
 | |
| 
 | |
| 
 | |
| Utilizar librerías de terceros en Yii <span id="using-libs-in-yii"></span>
 | |
| -------------------------------------
 | |
| 
 | |
| Para usar una librería en una aplicación Yii, primeramente debes de asegurarte que las clases en la librería
 | |
| son incluidas adecuadamente o pueden ser cargadas de forma automática.
 | |
| 
 | |
| ### Usando Paquetes de Composer <span id="using-composer-packages"></span>
 | |
| 
 | |
| Muchas librerías de terceros son liberadas en términos de paquetes [Composer](https://getcomposer.org/).
 | |
| Puedes instalar este tipo de librerías siguiendo dos sencillos pasos:
 | |
| 
 | |
| 1. modificar el fichero `composer.json` de tu aplicación y especificar que paquetes Composer quieres instalar.
 | |
| 2. ejecuta `composer install` para instalar los paquetes especificados.
 | |
| 
 | |
| Las clases en los paquetes Composer instalados pueden ser autocargados usando el cargador automatizado de Composer autoloader.
 | |
| Asegúrate que el fichero [script de entrada](structure-entry-scripts.md) de tu aplicación contiene las siguientes líneas
 | |
| para instalar el cargador automático de Composer:
 | |
| 
 | |
| ```php
 | |
| // instalar el cargador automático de  Composer
 | |
| require __DIR__ . '/../vendor/autoload.php';
 | |
| 
 | |
| // incluir rl fichero de la clase Yii
 | |
| require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
 | |
| ```
 | |
| 
 | |
| ### Usando librerías Descargadas <span id="using-downloaded-libs"></span>
 | |
| 
 | |
| Si la librería no es liberada como un paquete de Composer, debes de seguir sus instrucciones de instalación para instalarla.
 | |
| En muchos casos, puedes necesitar descargar manualmente el fichero de la versión y desempaquetarlo en el directorio `BasePath/vendor`,
 | |
| donde `BasePath` representa el [camino base (base path)](structure-applications.md#basePath) de tu aplicación.
 | |
| 
 | |
| Si la librería lleva su propio cargador automático (autoloader), puedes instalarlo en [script de entrada](structure-entry-scripts.md) de tu aplicación.
 | |
| Es recomendable que la instalación se  termine antes de incluir el fichero `Yii.php` de forma que el cargador automático tenga precedencia al cargar
 | |
| de forma automática las clases.
 | |
| 
 | |
| Si la librería no provee un cargador automático de clases, pero la denominación de sus clases sigue el [PSR-4](https://www.php-fig.org/psr/psr-4/),
 | |
| puedes usar el cargador automático de Yii para cargar de forma automática las clases. Todo lo que necesitas
 | |
| es declarar un [alias raíz](concept-aliases.md#defining-aliases) para cada espacio de nombres (namespace) raiz usado en sus clases. Por ejemplo,
 | |
| asume que has instalado una librería en el directorio `vendor/foo/bar`, y que las clases de la librería están bajo el espacio de nombres raiz `xyz`.
 | |
| Puedes incluir el siguiente código en la configuración de tu aplicación:
 | |
| 
 | |
| ```php
 | |
| [
 | |
|     'aliases' => [
 | |
|         '@xyz' => '@vendor/foo/bar',
 | |
|     ],
 | |
| ]
 | |
| ```
 | |
| 
 | |
| Si ninguno de lo anterior es el caso, estaría bien que la librería dependa del camino de inclusión (include path) de configuración de PHP
 | |
| para localizar correctamente e incluir los ficheros  de las clases. Simplemente siguiendo estas instrucciones de cómo configurar el camino de inclusión de PHP.
 | |
| 
 | |
| En el caso más grave en el que la librería necesite incluir cada uno de sus ficheros de clases, puedes usar el siguiente método
 | |
| para incluir las clases según se pidan:
 | |
| 
 | |
| * Identificar que clases contiene la librería.
 | |
| * Listar las clases y el camino a los archivos correspondientes en `Yii::$classMap`  en el script de entrada [script de entrada](structure-entry-scripts.md)
 | |
|   de la aplicación. Por ejemplo,
 | |
| ```php
 | |
| Yii::$classMap['Class1'] = 'path/to/Class1.php';
 | |
| Yii::$classMap['Class2'] = 'path/to/Class2.php';
 | |
| ```
 | |
| 
 | |
| 
 | |
| Utilizar Yii en Sistemas de Terceros <span id="using-yii-in-others"></span>
 | |
| ------------------------------------
 | |
| 
 | |
| Debido a que Yii provee muchas posibilidades excelentes, a veces puedes querer usar alguna de sus características para permitir
 | |
| el desarrollo o mejora de sistemas de terceros, como es WordPress, Joomla, o aplicaciones desarrolladas usando otros frameworks de PHP.
 | |
| Por ejemplo, puedes querer utilizar la clase [[yii\helpers\ArrayHelper]] o usar la característica [Active Record](db-active-record.md)
 | |
| en un sistema de terceros. Para lograr este objetivo, principalmente necesitas realizar dos pasos:
 | |
| instalar Yii , e iniciar  Yii.
 | |
| 
 | |
| Si el sistema de terceros usa Composer para manejar sus dependencias, simplemente ejecuta estos comandos
 | |
| para instalar Yii:
 | |
| 
 | |
|     composer global require "fxp/composer-asset-plugin:^1.4.1"
 | |
|     composer require yiisoft/yii2
 | |
|     composer install
 | |
| 
 | |
| El primer comando instala el [composer asset plugin](https://github.com/fxpio/composer-asset-plugin),
 | |
| que permite administrar paquetes bower y npm a través de Composer. Incluso si sólo quieres utilizar la capa de base de datos
 | |
| u otra característica de Yii no relacionada a assets, requiere que instales el paquete composer de Yii.
 | |
| 
 | |
| Si quieres utilizar la [publicación de Assets de Yii](structure-assets.md) deberías agregar también la siguiente configuración
 | |
| a la sección `extra` de tu `composer.json`:
 | |
| 
 | |
| ```json
 | |
| {
 | |
|     ...
 | |
|     "extra": {
 | |
|         "asset-installer-paths": {
 | |
|             "npm-asset-library": "vendor/npm",
 | |
|             "bower-asset-library": "vendor/bower"
 | |
|         }
 | |
|     }
 | |
| }
 | |
| ```
 | |
| 
 | |
| Visita también la [sección de cómo instalar Yii](start-installation.md#installing-via-composer) para más información
 | |
| sobre Composer y sobre cómo solucionar posibles problemas que surjan durante la instalación.
 | |
| 
 | |
| En otro caso, puedes [descargar](https://www.yiiframework.com/download/) el archivo de la edición de Yii
 | |
| y desempaquetarla en el directorio `BasePath/vendor`.
 | |
| 
 | |
| Después, debes de modificar el script de entrada de sistema de terceros para incluir el siguiente código al principio:
 | |
| 
 | |
| ```php
 | |
| require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
 | |
| 
 | |
| $yiiConfig = require __DIR__ . '/../config/yii/web.php';
 | |
| new yii\web\Application($yiiConfig); // No ejecutes run() aquí
 | |
| ```
 | |
| 
 | |
| Como puedes ver, el código anterior es muy similar al que puedes ver en [script de entrada](structure-entry-scripts.md)
 | |
| de una aplicación típica. La única diferencia es que después de que se crea la instancia de la aplicación, el método `run()` no es llamado.
 | |
| Esto es así porque llamando a `run()`, Yii se haría cargo del control del flujo de trabajo del manejo de las peticiones,
 | |
| lo cual no es necesario en este caso por estar ya es manejado por la aplicación existente.
 | |
| 
 | |
| Como en una aplicación Yii, debes configurar la instancia de la aplicación basándose en el entorno que se está
 | |
| ejecutando del sistema de terceros. Por ejemplo, para usar la característica [Active Record](db-active-record.md), necesitas configurar
 | |
| el [componente de la aplicación](structure-application-components.md) `db` con los parámetros de la conexión a la BD del sistema de terceros.
 | |
| 
 | |
| Ahora puedes usar muchas características provistas por Yii. Por ejemplo, puedes crear clases Active Record y usarlas
 | |
| para trabajar con bases de datos.
 | |
| 
 | |
| 
 | |
| Utilizar Yii 2 con Yii 1 <span id="using-both-yii2-yii1"></span>
 | |
| ------------------------
 | |
| 
 | |
| Si estaba usando Yii 1 previamente, es como si tuvieras una aplicación Yii 1 funcionando. En vez de reescribir
 | |
| toda la aplicación en Yii 2, puedes solamente mejorarla usando alguna de las características sólo disponibles en Yii 2.
 | |
| Esto se puede lograr tal y como se describe abajo.
 | |
| 
 | |
| > Note: Yii 2 requiere PHP 5.4 o superior. Debes de estar seguro que tanto tu servidor como la aplicación
 | |
| > existente lo soportan.
 | |
| 
 | |
| Primero, instala Yii 2 en tu aplicación siguiendo las instrucciones descritas en la [última subsección](#using-yii-in-others).
 | |
| 
 | |
| Segundo, modifica el script de entrada de la aplicación como sigue,
 | |
| 
 | |
| ```php
 | |
| // incluir la clase Yii personalizada descrita debajo
 | |
| require __DIR__ . '/../components/Yii.php';
 | |
| 
 | |
| // configuración para la aplicación Yii 2
 | |
| $yii2Config = require __DIR__ . '/../config/yii2/web.php';
 | |
| new yii\web\Application($yii2Config); // No llamar a run()
 | |
| 
 | |
| // configuración para la aplicación Yii 1
 | |
| $yii1Config = require __DIR__ . '/../config/yii1/main.php';
 | |
| Yii::createWebApplication($yii1Config)->run();
 | |
| ```
 | |
| 
 | |
| Debido a que ambos Yii 1 y Yii 2 tiene la clase `Yii` , debes crear una versión personalizada para combinarlas.
 | |
| El código anterior incluye el fichero con la clase `Yii` personalizada, que tiene que ser creada como sigue.
 | |
| 
 | |
| ```php
 | |
| $yii2path = '/path/to/yii2';
 | |
| require $yii2path . '/BaseYii.php'; // Yii 2.x
 | |
| 
 | |
| $yii1path = '/path/to/yii1';
 | |
| require $yii1path . '/YiiBase.php'; // Yii 1.x
 | |
| 
 | |
| class Yii extends \yii\BaseYii
 | |
| {
 | |
|     // copy-paste the code from YiiBase (1.x) here
 | |
| }
 | |
| 
 | |
| Yii::$classMap = include($yii2path . '/classes.php');
 | |
| // registrar el autoloader de Yii 2 vía Yii 1
 | |
| Yii::registerAutoloader(['Yii', 'autoload']);
 | |
| // crear el contenedor de inyección de dependencia
 | |
| Yii::$container = new yii\di\Container;
 | |
| ```
 | |
| 
 | |
| ¡Esto es todo!. Ahora, en cualquier parte de tu código, puedes usar `Yii::$app` para acceder a la instancia de la aplicación de Yii 2,
 | |
| mientras `Yii::app()` proporciona la instancia de la aplicación de  Yii 1 :
 | |
| 
 | |
| ```php
 | |
| echo get_class(Yii::app()); // genera 'CWebApplication'
 | |
| echo get_class(Yii::$app);  // genera 'yii\web\Application'
 | |
| ```
 | |
| 
 | 
