2012-09-21 22 views
11

Mi paquete se encuentra en src/Cinergy/Bundle/ComponentBundle/CinergyComponentBundle.php y el nombre lógico del paquete es 'CinergyComponentBundle'.¿Cómo cambiar el nombre de un paquete en Symfony?

Como no me apegué a la convención de nomenclatura de la compañía, tengo que cambiar el nombre logístico del paquete. Vamos a suponer que tengo que cambiar el nombre a 'XXXCinergyComponentBundle'

¿Qué archivos debo cambiar?

He intentado cambiar el nombre del archivo CinergyComponentBundle.php y la clase contenedora en XXXCinergyComponentBundle.php. También cambié la referencia en AppKernel.

Desafortunadamente esto no funciona. Cuando trato de borrar la memoria caché consigo este mensaje de error:

[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]         
The service "cinergy.people.direct.php" has a dependency on a non-existent service "cinergy.work.registry". 

Estos dos servicios no pertenecen al paquete con el nuevo nombre. Esto me lleva a la conclusión de que me falta algo en el proceso de cambio de nombre.

¿Alguna idea?

+0

Comprobar Esta [Video] (https://www.youtube.com/watch?v=ldyUhirsrNo) –

Respuesta

3

Necesita actualizar el espacio de nombre completo en cada archivo.

Estaba utilizando namespace Cynergy\ComponentBundle\Something; pero ahora se está utilizando namespace XXXCynergy\ComponentBundle\Something;

No se olvide de actualizar su services.(xml|yml).

+0

Por lo que yo entiendo, esto no es correcto. No estoy cambiando la ruta del paquete. Solo estoy cambiando el nombre lógico. – BetaRide

+3

Entonces está equivocado, debido a que PSR-0/1/2 necesita asignar su espacio de nombres al sistema de archivos, o configurar manualmente el autocargador. –

+0

Estoy cambiando el nombre de una clase y solo está en el archivo PHP. No estoy cambiando el nombre de un espacio de nombres/directorio completo. Como AppKernel encuentra felizmente la clase renombrada, dudo que haya un problema de autocargador/clase/nombre de archivo. – BetaRide

9

Acabo de completar el cambio de nombre de un paquete y terminé exactamente en el mismo punto que hace unos minutos. Hasta este punto, he usado mis editores replace-function. Resulta que hay algunos archivos que necesitan algunos cuidados adicionales, que se encuentra aquí (suponiendo que su antiguo nombre era Bundle AcmeOldBundle, nuevo habrá AcmeNewBundle):

  1. Acme \ OldBundle \ OldBundle.php -> NewBundle.php
  2. Acme \ OldBundle \ DependencyInjection \ AcmeOldExtension.php -> AcmeNewExtension.php

no se olvide de actualizar los nombres de clase dentro de los archivos también.

+1

Simplemente haciendo eco de lo anterior; editor/search replace no cambiará el nombre de los archivos, que se pasan por alto fácilmente. Entonces, para estar seguro, usa esto: 'find. -name '* AcmeOldExtension *' 'y luego renombrar manualmente los archivos (que podría ser como el anterior). – fazy

7

Las respuestas actuales en efecto, explican qué hacer para cambiar el nombre de un paquete pero dejan un par de cosas:

  1. cambiar el nombre del paquete en /app/AppKernel.php

    Desde:

    $bundles = [ 
        // ... 
        new Acme\OldBundle\AcmeOldBundle(), 
    ]; 
    

    Para:

    $bundles = [ 
        // ... 
        new Acme\NewBundle\AcmeNewBundle(), 
    ]; 
    
  2. archivos y carpetas

    Es necesario cambiar el nombre de los archivos y carpetas que contiene el código de cambio de nombre de:

    src/Acme/OldBundle -> src/Acme/NewBundle 
    src/Acme/OldBundle/OldBundle.php -> src/Acme/NewBundle/NewBundle.php 
    
    # If present 
    src/Acme/OldBundle/DependencyInjection/AcmeOldExtension.php -> src/Acme/NewBundle/DependencyInjection/AcmeNewExtension.php 
    
  3. espacios de nombres

    Esto probablemente se irá con el olvido algunos archivos y buscando alrededor de su paquete para cada partido. Lo mejor que puede hacer es encontrar haciendo un reemplazo:

    # find -> replace 
    acme_old -> acme_new 
    Acme\OldBundle\ -> Acme\NewBundle 
    AcmeOld -> AcmeNew 
    Acme:Old -> Acme:New 
    Acme:OldBundle -> Acme:NewBundle 
    

    Asegúrese de revisar todos los espacios de nombres, nombres de clases y archivos de configuración en su conjunto.

  4. archivos de configuración global

    búsqueda para cualquier aparición de su nombre en el paquete de edad app/config/ y sustituirlo por el nuevo nombre de paquete.

Cuestiones relacionadas