symfonysolrsolariumnelmiosolariumbundle

Using Solarium with Solr


I'm trying to use Solarium (NelmioSolariumBundle) with Solr and I have this error message:

Service "solarium.client" not found: even though it exists in the app's container, the container
inside "App\Controller\solariumController" is a smaller service locator that only knows about the
"doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router",
"security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "session"
and "twig" services. Try using dependency injection instead.

Here is my controller

<?php


namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class solariumController extends AbstractController
{

    /**
     * @Route ("/solariums", name="solariums")
     */
    public function solariumSearch(){

        $client = $this->get('solarium.client');
        $select = $client->createSelect();
        $select->setQuery('brandon');
        $results = $client->select($select);

        return $this->render('pages/solarium.html.twig',[
            '$results'
        ]);

    }
}

Do you have any idea please?

Thanks !


Solution

  • Inject client in constructor:

    <?php
    
    namespace App\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\Routing\Annotation\Route;
    
    class solariumController extends AbstractController
    {
        /** @var \Solarium\Client */
        private $client;
    
        public function __construct(\Solarium\Client $client) {
           $this->client = $client;
        }
    
        /**
         * @Route ("/solariums", name="solariums")
         */
        public function solariumSearch() {
    
            $select = $this->client->createSelect();
            $select->setQuery('brandon');
            $results = $this->client->select($select);
    
            return $this->render('pages/solarium.html.twig',[
                '$results'
            ]);
    
        }
    }