2012-09-21 39 views
11

Gói của tôi được đặt tại src/Cinergy/Bundle/ComponentBundle/CinergyComponentBundle.php và tên lôgic của gói là 'CinergyComponentBundle'.Làm thế nào để đổi tên một gói trong symfony?

Vì tôi không tuân theo quy ước đặt tên của công ty, tôi phải thay đổi tên logcial của gói. Cho phép chúng tôi phải đổi tên thành 'XXXCinergyComponentBundle'

Tôi cần thay đổi những tệp nào?

Tôi đã thử đổi tên tệp CinergyComponentBundle.php và lớp chứa thành XXXCinergyComponentBundle.php. Tôi cũng đã thay đổi tham chiếu trong AppKernel.

Thật không may điều này không hoạt động. Khi tôi cố xóa bộ nhớ cache, tôi nhận được thông báo lỗi này:

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

Hai dịch vụ này thuộc về gói với tên mới. Điều này dẫn tôi đến kết luận rằng tôi đang thiếu một cái gì đó trong quá trình đổi tên.

Bất kỳ ý tưởng nào?

+0

Kiểm tra [Video] này (https://www.youtube.com/watch?v=ldyUhirsrNo) –

Trả lời

3

Bạn cần cập nhật toàn bộ không gian tên trong mỗi tệp.

Bạn đang sử dụng namespace Cynergy\ComponentBundle\Something; nhưng bây giờ bạn đang sử dụng namespace XXXCynergy\ComponentBundle\Something;

Đừng quên cập nhật services.(xml|yml) của bạn.

+0

Theo tôi hiểu, điều này không chính xác. Tôi không thay đổi đường đi của nhóm. Tôi chỉ thay đổi tên logic. – BetaRide

+3

Sau đó, bạn sai, vì PSR-0/1/2 bạn cần ánh xạ vùng tên của bạn với hệ thống tập tin, hoặc tự đặt trình nạp tự động. –

+0

Tôi đang thay đổi tên của một lớp và chỉ là tệp PHP. Tôi không thay đổi tên của toàn bộ không gian tên/thư mục. Kể từ khi AppKernel vui vẻ tìm thấy các lớp học đổi tên, tôi nghi ngờ rằng có một vấn đề autoloader/class/tên tập tin. – BetaRide

9

Tôi vừa hoàn thành đổi tên một gói và kết thúc ở cùng một điểm chính xác như bạn đã làm một vài phút trước. Đến thời điểm này, tôi đã sử dụng chức năng thay thế cho trình soạn thảo của mình. Hóa ra có một số file cần thêm một số dịch vụ chăm sóc, nằm ở đây (giả sử tên Bundle cũ của bạn đã AcmeOldBundle, mới sẽ AcmeNewBundle):

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

Đừng quên cập nhật các đẳng cấp tên bên trong các tập tin là tốt.

+1

Chỉ cần lặp lại ở trên; trình soạn thảo/tìm kiếm thay thế sẽ không đổi tên các tệp, dễ bị bỏ qua. Vì vậy, để chắc chắn, sử dụng điều này: 'tìm. -name '* AcmeOldExtension *' 'và sau đó đổi tên thủ công các tệp (có thể chỉ như trên). – fazy

7

Những câu trả lời hiện tại làm thực sự giải thích những gì phải làm để đổi tên một bó nhưng họ bỏ qua một vài điều:

  1. Đổi tên bó trong /app/AppKernel.php

    Từ:

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

    Tới:

    $bundles = [ 
        // ... 
        new Acme\NewBundle\AcmeNewBundle(), 
    ]; 
    
  2. tập tin và thư mục

    Bạn cần phải đổi tên các tập tin và thư mục chứa mã của bạn đổi tên:

    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. Namespaces

    Điều này có lẽ sẽ đi với quên một vài tập tin và tìm kiếm xung quanh bó của bạn cho mỗi và mọi trận đấu. Điều tốt nhất cần làm là thực hiện tìm kiếm thay thế:

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

    Đảm bảo kiểm tra tất cả các không gian tên, tên lớp và tệp cấu hình trong gói của bạn.

  4. file cấu hình toàn cầu

    Tìm kiếm bất kỳ xuất hiện của các tên gói cũ của bạn trong app/config/ và thay thế bằng tên bó mới của bạn.

Các vấn đề liên quan