IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Symfony2 / FosElasticaBundle / Propel [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 17
    Points : 27
    Points
    27
    Par défaut Symfony2 / FosElasticaBundle / Propel
    Bonjour,

    Je cherche actuellement à mettre en place FOSElasticaBundle sur Symfony2, en utilisant Propel au lieu de Doctrine2.
    Je me suis basé sur le tutoriel http://obtao.com/blog/2014/02/indexa...ch-et-symfony/ et j'ai tenté de l'adapter avec Propel.

    fos_elastica.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    fos_elastica:
        clients:
            default: { host: %elastic_host%, port: %elastic_port% }
        indexes:
            my_search_1:
                client: default
                settings:
                    index:
                        analysis:
                            analyzer:
                                custom_analyzer :
                                  type     :    custom
                                  tokenizer:    nGram
                                  filter   :    [stopwords, asciifolding ,lowercase, snowball, elision, worddelimiter]
                                custom_search_analyzer :
                                    type     :    custom
                                    tokenizer:    standard
                                    filter   :    [stopwords, asciifolding ,lowercase, snowball, elision, worddelimiter]
                            tokenizer:
                                nGram:
                                    type:     nGram
                                    min_gram: 2
                                    max_gram: 20
                            filter:
                                snowball:
                                    type:     snowball
                                    language: French
                                elision:
                                    type:     elision
                                    articles: [l, m, t, qu, n, s, j, d]
                                stopwords:
                                    type:      stop
                                    stopwords: [_french_]
                                    ignore_case : true
                                worddelimiter :
                                    type:      word_delimiter
     
                types:
                    article:
                        mappings:
                            id:
                                type: integer
                            createdAt :
                                type : date
                            publishedAt :
                                type : date
                            published :
                                type : boolean
                            title : ~
                            content : ~
                        # Propel doesn't support this feature yet.
                        persistence:
                            driver: propel
                            model: Acme\DemoBundle\Model\Article
                            #finder: ~
                            provider: ~
                            #listener: ~
    schema.xml => Description du schéma de la base de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <?xml version="1.0" encoding="UTF-8"?>
    <database xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="default" namespace="Acme\DemoBundle\Model"
              package='src/Acme/DemoBundle/Model'
              defaultIdMethod="native"
              xsi:noNamespaceSchemaLocation="http://xsd.propelorm.org/1.6/database.xsd">
     
        <table name="article"
               description="Liste des articles">
            <column name="id" type="Integer" required="true" autoIncrement="true" primaryKey="true"/>
            <column name="created_at" type="Timestamp" required="true"/>
            <column name="published_at" type="Timestamp"/>
     
            <column name="title" type="varchar" size="250" />
            <column name="content" type="LongVarchar"/>
            <column name="published" type="boolean"/>
     
            <behavior name="timestampable">
                <parameter name="create_column" value="created_at"/>
                <parameter name="update_column" value="updated_at"/>
            </behavior>
        </table>
    </database>

    services.yml : Définition de mon form_type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    services:
        article_search_type:
            class: Acme\DemoBundle\Form\Type\ArticleSearchType
            arguments: []
            tags:
                -  { name: form.type }
            scope: request
    ArticleController.php => Mon Controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?php
     
    namespace Acme\DemoBundle\Controller;
     
    use Acme\DemoBundle\Model\ArticleSearch;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Request;
    use Acme\DemoBundle\Form\Handler\ArticleSearchHandler;
     
    class ArticleController extends Controller
    {
        public function indexAction(Request $request)
        {
            $articleSearch = new ArticleSearch();
     
            $form = $this->createForm(
                $this->container->get('article_search_type'),
                $articleSearch
            );
     
            $formHandler = new ArticleSearchHandler(
                $form,
                $request,
                $this->container->get('fos_elastica.manager.propel')
            );
     
            exit;
            return $this->render(
                'AcmeDemoBundle:Article:index.html.twig',
                array(
                )
            );
        }
    }
    ArticleSearchType.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    <?php
     
    namespace Acme\DemoBundle\Form\Type;
     
    use Acme\DemoBundle\Model\ArticleSearch;
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class ArticleSearchType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add(
                    'title',
                    null,
                    array(
                        'required' => false,
                    )
                )
                ->add(
                    'dateFrom',
                    'date',
                    array(
                        'required' => false,
                        'widget'   => 'single_text',
                    )
                )
                ->add(
                    'dateTo',
                    'date',
                    array(
                        'required' => false,
                        'widget'   => 'single_text',
                    )
                )
                ->add(
                    'isPublished',
                    'choice',
                    array(
                        'choices'  => array('false' => 'non', 'true' => 'oui'),
                        'required' => false,
                    )
                )
                ->add('search', 'submit');
        }
     
     
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            parent::setDefaultOptions($resolver);
            $resolver->setDefaults(
                array(
                    // avoid to pass the csrf token in the url (but it's not protected anymore)
                    'csrf_protection' => false,
                    'data_class'      => 'Acme\DemoBundle\Model\ArticleSearch'
                )
            );
        }
     
     
        public function getName()
        {
            return 'article_search_type';
        }
    }

    Et lorsque j'appelle ma page j'ai le message d'erreur :
    Catchable Fatal Error: Argument 1 passed to FOS\ElasticaBundle\Doctrine\RepositoryManager::__construct() must be an instance of Doctrine\Common\Persistence\ManagerRegistry, instance of Doctrine\Common\Annotations\FileCacheReader given, called in /home/laurent/www/tests/sf2-elasticsearch/app/cache/dev/appDevDebugProjectContainer.php on line 1328 and defined in /home/laurent/www/tests/sf2-elasticsearch/vendor/friendsofsymfony/elastica-bundle/Doctrine/RepositoryManager.php line 21
    500 Internal Server Error - ErrorException
    Si on va dans le fichier propel.xml du elastica-bundle, on voit que le service appelle la classe RepositoryManager
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <service id="fos_elastica.manager.propel" class="FOS\ElasticaBundle\Doctrine\RepositoryManager">
                <argument type="service" id="annotation_reader"/>
    </service>
    Cette classe attend en 1er paramètre un Doctrine\Common\Persistence\ManagerRegistry d'où l'erreur.
    Mais je ne vois pas comment la résoudre, quelqu'un aurait une idée ?

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 17
    Points : 27
    Points
    27
    Par défaut
    Je me répond si ça intéresse quelqu'un
    En fait il ne fallait pas utiliser fos_elastica.manager.propel mais fos_elastica.finder.my_search_1.article et ça fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $formHandler = new ArticleSearchHandler(
                $form,
                $request,
                $this->container->get('fos_elastica.finder.my_search_1.article')
            );
            $process     = $formHandler->process();
    Et mon Handler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    class ArticleSearchHandler
    {
     
        /**
         * Formulaire
         *
         * @var \Symfony\Component\Form\Form
         */
        protected $form;
     
        /**
         * Finder
         *
         */
        protected $finder;
     
        /**
         * Request
         *
         * @var \Symfony\Component\HttpFoundation\Request
         */
        protected $request;
     
     
        /**
         *
         * @param Form    $form
         * @param Request $request
         * @param         $finder
         *
         */
        public function __construct(
            Form $form,
            Request $request,
            $finder
        ) {
            $this->form    = $form;
            $this->request = $request;
            $this->finder  = $finder;
        }
     
     
        /**
         * Traitement du formulaire
         *
         * @return bool
         */
        public function process()
        {
            $this->form->handleRequest($this->request);
     
            if ($this->form->isSubmitted() && $this->form->isValid()) {
               return $this->onSuccess($this->form->getData());
            }
     
            return false;
        }
     
     
        public function onSuccess($articleSearch)
        {
            $liste = $this->finder->find($articleSearch->getTitle());
     
            return $liste;
        }
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2.x] Propel + sqlserver sur Symfony2
    Par TylerDurden66 dans le forum Symfony
    Réponses: 0
    Dernier message: 31/10/2014, 14h08
  2. [1.x] PDO avec Propel ?
    Par thewind1 dans le forum Symfony
    Réponses: 2
    Dernier message: 21/03/2008, 13h30
  3. Réponses: 1
    Dernier message: 16/11/2007, 12h01
  4. installer propel avec MAMP
    Par mecooo dans le forum Développement OS X
    Réponses: 3
    Dernier message: 03/04/2007, 12h35
  5. [MySQL] utiliser PROPEL pour générer mes classes
    Par nawal_ensias dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/02/2007, 13h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo