2012-12-21 17 views
6

Sono nuovo di Symfony2 e ho affrontato alcuni semplici problemi, ma non sono sicuro di come gestirlo. Ho bisogno di usare una semplice classe di terze parti e non sono sicuro di dove e come memorizzarla nella struttura del progetto. Dovrei memorizzare è un servizio nel mio pacchetto o forse dovrei memorizzarlo nella directory dei fornitori? E se lo memorizzerò nei venditori non è una cattiva pratica archiviare le librerie che non sono supportate da Symfony?Dove memorizzare semplici classi di terze parti in Symfony2?

risposta

4

Di solito si includono quelli del progetto con Composer. Ti suggerisco di dare un'occhiata a packagist per verificare se c'è un pacchetto Composer per la tua classe, altrimenti non puoi richiederlo con il compositore.

Composer mette le tue classi nella directory vendor, dovresti mettere tutti i "fornitori" (3a libreria di parti) lì. Dai un'occhiata a dove metterli in quella directory, in modo che il caricatore automatico Composer possa caricarlo automaticamente.

Successivamente, si consiglia di creare un pacchetto per quella classe specifica. È una buona pratica creare un servizio lì. Per esempio, se la classe è Foo si crea un Acme\FooBundle che carica il servizio Foo:

// 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

Symfony memorizza le librerie di terze parti nella cartella dei fornitori. È un good practice mettere anche la tua classe di terze parti

Se non sai come farlo, probabilmente this question ti aiuterà.

1

Credo che usare il container di servizio sia una buona pratica. In ogni caso, il container di servizio è predisposto per l'archiviazione delle dipendenze di terze parti e il risparmio dell'accoppiamento lento.

Guarda il docs, c'è scritto come e perché utilizzare il contenitore di servizi.

Buona fortuna.

Problemi correlati