2012-12-21 23 views
6

Tôi mới sử dụng Symfony2 và tôi đã gặp phải một số vấn đề đơn giản nhưng tôi không chắc chắn cách quản lý nó. Tôi cần phải sử dụng một lớp bên thứ ba đơn giản và tôi không chắc chắn nơi và làm thế nào để lưu trữ nó trong cấu trúc dự án. Tôi có nên lưu trữ là một Dịch vụ trong Gói của tôi hay có lẽ tôi nên lưu trữ nó trong thư mục của nhà cung cấp? Và nếu tôi sẽ lưu trữ nó trong các nhà cung cấp không phải là một thực tế xấu để lưu trữ có libs mà không phải là Symfony hỗ trợ các nhà cung cấp?Nơi lưu trữ lớp bên thứ 3 đơn giản trong Symfony2?

Trả lời

4

Thông thường bạn bao gồm những người trong dự án của mình với Composer. Tôi đề nghị bạn hãy xem packagist để xem nếu có một gói Composer cho lớp của bạn, nếu không bạn không thể yêu cầu nó với nhà soạn nhạc.

Composer đặt các lớp học của bạn trong thư mục vendor, bạn nên đặt tất cả 'nhà cung cấp' (thư viện bên thứ 3) tại đó. Hãy xem nơi đặt chúng trong thư mục đó, để trình nạp tự động Composer có thể tự động tải nó.

Sau đó, bạn nên tạo nhóm cho lớp cụ thể đó. Cách tốt nhất là tạo một dịch vụ ở đó. Ví dụ, nếu lớp học của bạn là Foo bạn tạo một Acme\FooBundle mà tải các Foo dịch vụ:

// src/Acme/FooBundle/DependencyInjection/AcmeFooExtension.php 
<?php 

namespace Acme\FooBundle\DependencyInjection; 

use Symfony\Component\Config\FileLocator; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 

class AcmeFooExtension extends Extension 
{ 
    /** 
    * this method loads the Service Container services. 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 

     // load the src/Acme/FooBundle/Resources/config/services.xml file 
     $loader->load('services.xml'); 
    } 
<!-- src/Acme/FooBundle/Resources/config/services.xml --> 
<?xml version="1.0" encoding="UTF-8" ?> 

<container xmlns="http://symfony.com/schema/dic/services" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> 

    <services> 
     <!-- Loads the \Foo class as a acme_foo.foo service --> 
     <service id="acme_foo.foo" 
      class="\Foo" 
     ></service> 
    </services> 

</container> 
1

Bản thân Symfony lưu trữ thư viện của bên thứ ba tại thư mục nhà cung cấp. Có phải là good practice để đặt lớp bên thứ 3 của bạn ở đó quá

Nếu bạn không biết cách thực hiện, có thể this question sẽ giúp ích.

1

Tôi tin rằng việc sử dụng vùng chứa dịch vụ sẽ là một phương pháp hay. Dù sao, dịch vụ container được tạo ra để lưu trữ depindencies bên thứ ba và tiết kiệm khớp nối lỏng lẻo.

Nhìn số docs, có cách viết và cách sử dụng vùng chứa dịch vụ.

Chúc may mắn.

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