2011-08-29 9 views
6

Tôi không quản lý để ghi đè chế độ xem bộ xương của trình tạo máy phát.Không thể ghi đè chế độ xem bộ xương tiêu chuẩn trong Symfony2 GeneratorBundle

Tôi đã cố gắng đầu tiên bằng cách thêm quan điểm của tôi trong /app/Resources/SensioGeneratorBundle/skeleton/crud/views/index.html.twig

Nó không làm việc vì vậy tôi đã cố gắng để tạo ra một Bundle mới kéo dài SensioGeneratorBundle và sao chép chế độ xem của tôi trong thư mục Tài nguyên của nó.

Tôi đã quản lý để sử dụng các chủ đề cho các hình thức twig, nhưng tôi cần phải cá nhân hóa các khung nhìn được tạo bởi lệnh doctrine: generate: crud.

Trả lời

8

Trước hết: Chế độ xem bộ xương tương ứng nằm ở đây:

vendor/bundles/Sensio/Bundle/GeneratorBundle/Resources/skeleton/crud 

Nhanh chóng và bẩn bạn nên sử dụng tốt bằng cách ghi đè những tập tin này xem - nhưng thats không phải những gì chúng ta muốn;)

Trong:

vendor/bundles/Sensio/Bundle/GeneratorBundle/Command/GenerateDoctrineCrudCommand.php 

có một accessor cho Generator:

protected function getGenerator() 
{ 
    if (null === $this->generator) { 
     $this->generator = new DoctrineCrudGenerator($this->getContainer()->get('filesystem'), __DIR__.'/../Resources/skeleton/crud'); 
    } 

    return $this->generator; 
} 

Bạn có thể cố gắng ghi đè phương thức này trong Gói mở rộng của mình và đặt $skeletonDir khác trong hàm tạo.

Edit:

dụ nhanh trong môi trường thử nghiệm của tôi như thế nào nó có thể đạt được (tôi chỉ làm một thử nghiệm nhanh;):

Tạo một gói mới cho máy phát điện tùy chỉnh: php app/console generate:bundle và làm theo hướng dẫn. Một tuyến đường là không cần thiết. Tôi đã chọn cho ví dụ này: Acme/CrudGeneratorBundle (Hoặc sử dụng một gói hiện có)

Tạo thư mục có tên "Lệnh" trong thư mục bó mới được tạo.

Đặt một lớp lệnh trong thư mục này.

<?php 
//src/Acme/CrudGeneratorBundle/Command/MyDoctrineCrudCommand.php 

namespace Acme\CrudGeneratorBundle\Command; 

use Sensio\Bundle\GeneratorBundle\Generator\DoctrineCrudGenerator; 

class MyDoctrineCrudCommand extends \Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineCrudCommand 
{ 
    protected function configure() 
    { 
     parent::configure(); 
     $this->setName('mydoctrine:generate:crud'); 
    } 

    protected function getGenerator() 
    { 
     $generator = new DoctrineCrudGenerator($this->getContainer()->get('filesystem'), __DIR__.'/../Resources/skeleton/crud'); 
     $this->setGenerator($generator); 
     return parent::getGenerator(); 
    } 
} 

Sao chép các nhà cung cấp/bó/Sensio/Bundle/GeneratorBundle/Resources/xương/crud để Resources của bạn (trong ví dụ của tôi "src/Acme/CrudGeneratorBundle/Resources/crud")

+0

Tôi chắc chắn không muốn thực hiện hack nhanh chóng và bẩn! Nhưng tôi đã cố gắng ghi đè lên hàm getGenerator và điều này vẫn không hoạt động –

+1

Tôi đã cập nhật câu trả lời bằng một ví dụ về cách tôi làm việc đó. Tuy nhiên - đây là hack. – madflow