Cómo registrar espacios de nombres (con PHP 5.3) en Symfony 1.4 para la función de clase del autocargador (como el Symfony 2.0)?Cargando clases de espacio de nombres con el autocargador de Symfony 1.4?
Respuesta
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
El proyecto del autocargador se puede encontrar aquí: https://github.com/Symfony-Plugins/sfClassLoaderPlugin. –
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
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.
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.
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. –
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
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
- 1. Cómo registrar un espacio de nombres con el autocargador Silex
- 2. Clases dentro de CoffeeScript 'Espacio de nombres'
- 3. Symfony 2: Agregue otro espacio de nombres a Entity namespaces
- 4. clase de autocargador PHP vs. función de autocargador de procedimiento?
- 5. Manejando modelos de espacio de nombres (clases) en el espacio de nombres
- 6. sesiones de Symfony 1.4 perdidas al azar
- 7. ¿Cómo instalo Symfony 1.4 usando el compositor?
- 8. Títulos de página dinámicos en Symfony 1.4
- 9. Symfony 2 Proxy para reemplazar iterativamente el proyecto Symfony 1.4
- 10. Cambiar Symfony 1.4 de Doctrine a Propel
- 11. Restablecer un espacio de nombres en PHP?
- 12. Reemplazando clases en el espacio de nombres del sistema
- 13. symfony 1.4: ¿Cómo pasar el mensaje de excepción a error.html.php?
- 14. ¿Cómo puedo obtener el URI actual de Symfony 1.4?
- 15. Declaración de variables Forward/clases de espacio de nombres std
- 16. Número ideal de clases por rama de espacio de nombres
- 17. Symfony 1.4 dev logging no funciona
- 18. ¿Cómo implementar un ayudante en Symfony 1.4?
- 19. Cambio espacio de nombres de LINQ a SQL genera clases
- 20. symfony 1.4 ¿cómo obtener los parámetros POST?
- 21. importar clases anidadas al espacio de nombres - C++
- 22. ¿Cómo usar las tablas Symfony 1.4 sfGuardUser con Symfony 2 SecurityBundle?
- 23. Espacio de nombres de JavaScript con jQuery
- 24. Regla de espacio de nombres
- 25. Referencias ambiguas con el mismo espacio de nombres
- 26. C++: Heredando dos clases base con el mismo nombre, espacio de nombres diferente
- 27. 'admin' no es un espacio de nombres registrados en Django 1.4
- 28. Problema con el espacio de nombres personalizado con SignedXml
- 29. Mejores prácticas: ¿usar espacio de nombres o volver a abrir el espacio de nombres?
- 30. DataContractSerializer - cambiar el espacio de nombres y deserializar el archivo vinculado al antiguo espacio de nombres
¿Pudo conseguir que la carga automática Symfony 1.4 funcionara finalmente con espacios de nombres?Si es así, ¿puedes decirme cómo? –