2012-04-04 37 views
6

Tôi muốn biết Cách tốt nhất để bao gồm các tệp php của bên thứ 3 trong symfony2 là gì. Tôi đang sử dụng một gói php - ajax khác để tải lên các tập tin trong ứng dụng symfony2 của tôi. Các gói phần mềm cung cấp cho tôi một số mã php oops mà tôi cần phải sử dụng trong bộ điều khiển symfony của tôi. Tôi đang tạo ra các đối tượng của mã đó trong bộ điều khiển của tôi. Vì vậy, tôi muốn biết nơi tôi có thể đặt mã của bên thứ ba hoặc tập tin và làm thế nào tôi có thể bao gồm hoặc tạo các đối tượng của mã đó trong bộ điều khiển symfony2 của tôi. Chúng tôi có sử dụng yêu cầu hay bao gồm trong symfony2 không. Nếu đó là cách tiếp cận duy nhất.Cách tiếp cận tốt nhất Để bao gồm các tệp của bên thứ ba với Symfony2

Trả lời

7

Tôi không chắc chắn về việc cố gắng thêm không gian tên vào thư viện của bên thứ ba. Ví dụ, Twig không sử dụng không gian tên. Và thực sự không cần thiết. Hãy xem xét ví dụ một trường hợp bạn muốn sử dụng thành phần PDF từ thư viện Zend_Framework 1.

Trong ứng dụng tập tin của bạn/autoload.php bạn sẽ làm điều gì đó như:

$loader->registerPrefixes(array(
    'Twig_Extensions_' => $ws . 'Symfony/vendor/twig-extensions/lib', 
    'Twig_'   => $ws . 'Symfony/vendor/twig/lib', 
    'Zend_'   => $ws . 'ZendFramework-1.0.0/library', 
)); 

// And since Zend internally uses require/include we need to set an include path 
ini_set('include_path','.' . 

    PATH_SEPARATOR . $ws . 'ZendFramework-1.0.0/library' 

); 

Tại thời điểm này, chúng ta sẽ có thể tạo các đối tượng phần thứ 3 bên trong của bộ điều khiển trong khi cho phép hệ thống tự động load chăm sóc và tìm kiếm bao gồm các lớp học:

$page = new \Zend_Pdf_Page(\Zend_Pdf_Page::SIZE_A4); 
    $doc->pages[] = $page; 

    $font1 = \Zend_Pdf_Font::fontWithName(\Zend_Pdf_Font::FONT_HELVETICA); 
    $font2 = \Zend_Pdf_Font::fontWithName(\Zend_Pdf_Font::FONT_COURIER_BOLD); 

Bạn phải sử dụng \ để tránh xung quanh việc thiếu không gian tên.

Câu trả lời này giả định rằng thư viện phần thứ ba của bạn tuân theo quy ước đặt tên lớp tiêu chuẩn nhiều hơn hoặc ít hơn. Nếu nó có chức năng tự động tải riêng của nó thì chỉ cần gọi nó từ autolaod.php là tốt. Và nếu bạn không muốn sử dụng tính năng tự động tải thì chỉ cần đặt đường dẫn bao gồm và bao gồm.

+1

Đây là cách chính xác để thực hiện. Nếu một thư viện không tuân thủ bất kỳ quy ước đặt tên nào, tôi sẽ đề nghị bắt đầu sử dụng nhà soạn nhạc ([repo] (https://github.com/composer/composer), [symfony] (https://github.com/symfony/symfony) -Tiêu chuẩn)). Nó cho phép lập bản đồ của bất kỳ thư viện nào, làm cho tự động tải có thể cho ngay cả những libs không tuân theo quy ước. – gilden

3

The documentation giải thích chi tiết cấu trúc thư mục.

Về cơ bản, bạn có thể đặt chúng ở bất cứ đâu bạn muốn, nhưng vì mục đích nhất quán và tuân theo các phương pháp hay nhất, bạn nên đặt thư viện của bên thứ ba vào thư mục vendor/.

Hơn bạn có thể bao gồm các tệp có liên quan với không gian tên.

+1

Câu trả lời hay! Tôi đã có tình trạng này một thời gian trở lại và giải quyết nó chính xác như thế này ... –

+0

@Hakan Deryal. Cảm ơn Đối với phản ứng của bạn, bạn có thể vui lòng cho tôi biết nếu tôi đã tạo một thư mục với tư cách là bên thứ ba trong nhà cung cấp và đặt tệp của bên thứ ba ở đó sao cho nhà cung cấp/thirdparty/myfile.php làm cách nào tôi có thể đưa nó vào gói Acme của tôi. – ScoRpion

+0

Ứng dụng của bên thứ ba có sử dụng không gian tên không? Bạn có thể kiểm tra bằng cách tìm một dòng ở đầu tệp như 'không gian tên ....' –

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