2011-06-06 10 views

Respuesta

10

Puede usar el autocargador de Symfony2 en el marco Symfony 1.4.

1. Copia cargadores de clases de Symfony2 en el directorio proveedor de su proyecto Symfony 1.4 caja de arena:

SF_ROOT_DIR/lib/vendor/Symfony2/src/Symfony/Componente/cargador de clases/UniversalClassLoader.php

SF_ROOT_DIR/lib/vendor/Symfony2/src/Symfony/Componente/cargador de clases/ApcUniversalClassLoader.php

2. Modificar la S F_ROOT_DIR archivo/config/ProjectConfiguration.class.php de la siguiente manera:

require_once dirname(__FILE__) . '/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'; 
require_once dirname(__FILE__) . '/../lib/autoload/sfClassLoader.class.php'; 
sfCoreAutoload::register(); 

class ProjectConfiguration extends sfProjectConfiguration { 

    public function setup() { 
     $this->namespacesClassLoader(); 
     $this->enablePlugins('sfDoctrinePlugin'); 
    } 

    public function namespacesClassLoader() { 
     if (extension_loaded('apc')) { 
      $loader = new ApcUniversalClassLoader('S2A'); 
     } else { 
      $loader = new UniversalClassLoader(); 
     } 
     $loader->registerNamespaces(array(
      'Pohon' => __DIR__ . '/../lib/vendor/Pohon/src')); 
     $loader->register(); 
    } 

} 

3. Registro deseada espacios de nombres:
por ejemplo. Quiero cargar clase:

Pohon \ Tools \ String \ Utils \ Slugify.

Nombre de archivo debe ser:

SF_ROOT_DIR/src/Pohon/Herramientas/Cadena/Utilidades/Slugify.php

y espacio de nombres lib/vendor/Pohon/registrado de la siguiente manera:

Pohon => SF_ROOT_DIR/lib/vendor/Pohon/src

+0

El proyecto del autocargador se puede encontrar aquí: https://github.com/Symfony-Plugins/sfClassLoaderPlugin. –

+0

Breautiful, gracias! Tuve que agregar 'use Symfony \ Component \ ClassLoader \ UniversalClassLoader; use Symfony \ Component \ ClassLoader \ ApcUniversalClassLoader; 'después de las importaciones en el archivo ProjectConfiguration.class.php. Además, aquí está el enlace para el paquete ClassLoader (antes de que estas clases se desaprobaran): https://github.com/symfony/ClassLoader/tree/2.6 – GermanK

1

Symfony utiliza la función spl_autoload_register() para registrar su propio autocargador (sfAutoload).

Puede registrar su propio controlador en la función initialize() de su Proyecto/Aplicación/Plugin. (lo que corresponda).

Esto es, por ejemplo, también lo que hace el complemento Swift_Mailer: registra su propio autocargador cuando es necesario.

5

Puede usar Composer y es muy fácil. Sólo tiene que instalar en su máquina (que probablemente ya tiene, ya que es 2.015 ahora) y ejecutar en su carpeta de proyecto:

composer init 

continuación, puede instalar todos los paquetes que desee con el compositor e incluir sólo esta línea en su ProjectConfiguration.class.php:

require_once __DIR__.'/../vendor/autoload.php'; 

Tenga en cuenta que los caminos pueden ser diferentes si ha cambiado la estructura de directorios Symfony1.4 defecto.

+0

Symfony 1.4 no sabe cómo cargar clases dentro de un espacio de nombres, debe implementar Esta característica. Composer es solo un administrador de paquete/lib. –

+1

Composer también proporciona un ClassLoader y cuando instale (para usar el argot de Composer "requiera") paquetes con él, todo lo que tiene que hacer es incluir el script 'vendor/autoload.php' anterior. Composer se encarga de mapear los espacios de nombres en los paquetes instalados, todos ellos. ¿Lo has probado? Lo hago y funciona bastante bien. – ggioffreda

+0

Gracias por esta solución, funcionó para mí. necesita especificar vendor-dir: "lib/vendor" para tener bibliotecas en el directorio de proveedor original de sf 1.4; Usé eso para amp-library y funciona bien. – Naeh

Cuestiones relacionadas