2012-04-04 47 views
6

我想知道什麼是最好的方式包括第三方php文件在symfony2。我正在使用不同的php-ajax包來上傳我的symfony2應用程序中的文件。該軟件包提供了一些我需要在我的symfony控制器中使用的php oops代碼。我正在我的控制器中創建該代碼的對象。所以我想知道我可以放置第三方代碼或文件的位置,以及如何在symfony2控制器中包含或創建該代碼的對象。我們是否也在symfony2中使用require或include?如果這是唯一的方法。最好的方法包括第三方文件與Symfony2

回答

7

我不太確定嘗試將名稱空間添加到第三方庫。例如,Twig不使用名稱空間。而且真的沒有必要。考慮一個例子,你想使用Zend_Framework 1庫中的PDF組件。

在您的應用程序/ autoload.php文件,你會做這樣的事情:

$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' 

); 

在這一點上,我們應該能夠創建控制器內部的第三部分對象,而讓自動加載系統以尋求照顧,包括類:

$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); 

你必須使用\來解決缺乏命名空間的。

這個答案確實假設你的第三部分庫遵循或多或少的標準類命名約定。如果它有自己的自動加載功能,那麼也可以從autolaod.php中調用它。如果您不想使用自動加載,那麼只需設置包含路徑並將其包含在內。

+1

這是正確的方法。如果一個庫沒有遵循任何命名約定,我會建議開始使用composer([repo](https://github.com/composer/composer),[symfony](https://github.com/symfony/symfony) -標準))。它允許映射任何庫,使自動加載成爲可能,即使這些庫不遵循約定。 – gilden 2012-04-05 07:47:41

3

The documentation詳細解釋目錄結構。

基本上,您可以將它們放在任何地方,但爲了保持一致性並遵循最佳做法,您應該將第三方庫放在vendor/目錄中。

比你可以包含與命名空間相關的文件。

+1

很好的答案!我曾經有過這種情況,並且完全像這樣解決了它... – 2012-04-04 09:18:05

+0

@Hakan Deryal。謝謝你的迴應,你能告訴我,如果我在供應商創建一個文件夾作爲第三方,並將我的第三方文件放置在那裏,供應商/第三方/ myfile.php我怎麼能包括它在我的Acme捆綁。 – ScoRpion 2012-04-04 09:56:14

+0

第三方應用程序是否使用名稱空間?你可以通過在文件頂部尋找一行,如'namespace ....'來檢查它。 – 2012-04-04 10:44:35