@blitzkrieg393

Как правильно создать сервис в Symfony 3.4?

Доброго времени суток! Подскажите, пожалуйста, как правильно создать сервис в symfony 3.4. Вроде все делается по мануалам, а все равно вылетает Uncaught PHP ExceptionSymfony\Component\DependencyInjection\Exception\ServiceNotFoundException: "You have requested a non-existent service "obb.naming"

Контроллер:
namespace Ost\BlogBundle\Controller;

    use Symfony\Bundle\FrameworkBundle\Controller\Controller;

    class TestController extends Controller
    {
        public function heyAction()
        {
            $name= 'qqqq';
            $naming = $this->get("obb.naming");
            $naming->setName($name);
            return $this->render("Test/hey.html.twig",array('message'=>$naming->getName()));
        }
    }


Класс который хочу сделать сервисом:
namespace Ost\BlogBundle\Services;

class Naming
{
    private $name;

    public function setName($name)
    {
        $this->name = $name;
    }
    public function getName()
    {
        return $this->name;
    }
}


Файл services.yml (src/Ost/BlogBundle/Resourses/config/):
obb.naming:
      class: Ost\BlogBundle\Services\Naming


Файл config.yml (app/config/):
imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
    - { resource: "@OstBlogBundle/Resources/config/services.yml" }


С аргументами пробовал, в конструктор передавать пробовал (со ссылкой на другой сервис), и вызывать в конструкторе через контейнер пробовал ($this->container->get("obb.naming")) ... может чего не доглядел. Помогите, плиз
  • Вопрос задан
  • 1243 просмотра
Пригласить эксперта
Ответы на вопрос 1
@bears
В версии 3,4 принято называть сервисы именем класса, при этом, если в сервисе нет никаких специфических зависимостей, то его не надо регистрировать в файле services.yml. В экшене лучше не использовать $this->get('...'), а явно передать нужный сервис:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Ost\BlogBundle\Services\Naming;
class TestController extends Controller
{
    public function key(Naming $naming)
    {
        
    }
}

Этого достаточно, чтобы все работало как надо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы