Service d'accès de contrôle et/ou de template Twig

Avertissement: je commence petit à petit à entrer dans Symfony et avoir encore un peu de mal à comprendre comment l'architecture des œuvres.

Actuellement j'ai mis en place différents Faisceaux (de Services, de droit?) que devrait livrer de sortie différents pour les différents itinéraires. Jusqu'à présent, je suis autour de l'ajout d'un simple template Twig qui charge les feuilles de style et scripts via Assetics et Twig-blocs. Maintenant, j'ai ajouté un autre Bundle qui interroge les données via un Buzz à partir d'un emplacement distant, ce qui a bien fonctionné comme un script autonome, mais je n'arrive pas à contourner l'impression de sortie dans un template Twig.

L'architecture du script d'origine est comme suit (le nom fait plus générique):

  • Vendeurs - abstract classe qui sert de base pour tous à distance de la demande de lots.
  • ServiceABC - abstract classe qui étend la classe Vendors et définit la gestion d'Erreur et de sortie de préparation pour la ABC service.
  • ClientXYZ - final classe qui étend la classe Service_ABC, définit la sortie de l'analyse et la normalisation des données renvoyées.

Cet ensemble a obtenu un services.yml fichier:

# ~/MyApp/Bundle/ServiceABCBundle/Resources/config/services.yml
parameters:
    service_abc_manager.class: MyApp\Bundle\ServiceABCBundle\Models\Service_ABC
    location_manager.class: MyApp\Bundle\ServiceABCBundle\Models\Clients\ClientLocation
    monitor_manager.class: MyApp\Bundle\ServiceABCBundle\Models\Clients\ClientMonitor

services:
    service_abc_manager:
        abstract: true
    location_manager:
        class: %location_manager.class%
        parent: service_abc_manager
    monitor_manager:
        class: %monitor_manager.class%
        parent: service_abc_manager

les Noms ont été changés pour en faciliter la référence - les Fautes de frappe par accident possible.

Maintenant mon problème/question est, que je n'ai pas vraiment passer derrière la Symfony2 concept de la façon de trouver la sortie dans le modèle.

namespace MyApp\Bundle\ServiceABCBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use MyApp\Bundle\ServiceABCBundle\Models\Clients\ClientLocation;

class DefaultController extends Controller
{
    public function indexAction()
    {
        $services = array();
        $services[] = $this->container->has('service_abc_manager');
        $services[] = $this->container->has('location_manager');
        $services[] = $this->container->has('client_location');
        $services[] = $this->container->has('ClientLocation');
        var_dump( $services );
        $client = new ClientLocation();
        var_dump( $client );

        $response = $this->render(
            'Service_ABC:Default:index.html.twig'
        );
        # $response->setCharset( 'utf-8' );
        # $response->headers->set( 'Content-Type', 'text/html' );

        return $response;
    }
}

La sortie de la première array() nommé $services est toujours false et la $client = new ClientLocation(); déclenche une Exception que le nom de la classe n'a pas été trouvé.

Comment puis-je avoir accès à ces Services/Bundle(pièces)/Classes? Et comment puis-je rendre à la sortie d'un modèle?

Mise à jour

Après j'ai ajouté à l'arborescence complète de la définition de Configuration()->getConfigTreeBuilder(), je suis en mesure de voir les définitions à la CLI:

class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root( 'myapp_service_abc' );
        $rootNode
            ->children()
                ->scalarNode('service_abc_manager')->end()
                ->scalarNode('location_manager')->end()
                ->scalarNode('monitor_manager')->end()
            ->end()
        ;
        return $treeBuilder;
    }
}

La commande CLI php app/console config:dump-reference myapp_service_abc me donne le résultat suivant:

myapp_service_abc:
    service_abc_manager:  ~
    location_manager:     ~
    monitor_manager:      ~

Je peux ainsi voir que la config de données a été chargé, quand je var_dump( $loader ); à l'intérieur de MyAppServiceABCExtension juste après $loader->load( 'services.yml' ); a été appelé.

Le résultat est le suivant:

object(Symfony\Component\DependencyInjection\Loader\YamlFileLoader)
  protected 'container' => 
    object(Symfony\Component\DependencyInjection\ContainerBuilder)
      private 'definitions' => 
        array
          'service_abc_manager' => 
            object(Symfony\Component\DependencyInjection\Definition)
          'location_manager' => 
            object(Symfony\Component\DependencyInjection\DefinitionDecorator)
              private 'parent' => string 'service_abc_manager'
          //etc.

La problème reste elle-même: Il y a encore un FALSE valeur de retour à l'intérieur de DefaultController()->indexAction() quand je var_dump( $this->container->has( 'service_abc_manager' );. J'ai ainsi essayé var_dump( $this->container->has( 'location_manager' ); et var_dump( $this->container->has( 'myapp.service_abc_manager' ); avec le même résultat.

OriginalL'auteur kaiser | 2013-04-29