Я новичок в сфере услуг (и Drupal 8!) И пытаюсь выяснить услуги. Я думаю, возможно, я просто делаю создание устаревшим способом. То, что я хочу сделать, это сделать мой 'hello generator' сервисом и вызвать его в другом контроллере с помощью следующего:
DBController.php
namespace Drupal\db\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\db\DbServices\HelloGenerator;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
class DBController extends ControllerBase
{
private $helloGenerator;
public function __construct(HelloGenerator $x) {
$this->helloGenerator = $x;
}
public function say($count) {
$hello = $this->helloGenerator->getHello($count);
return new Response($hello);
}
public static function create(ContainerInterface $container) {
$x = $container->get('db.hello_generator');
return new static ($x);
}
}
HellGenerator.php
пространство имен Drupal \ db \ DbServices;
class HelloGenerator {
public function getHello($count) {
$foo = 4 + 4 + 4;
return $foo . ' ' . $count;
}
}
db.services.yml
services:
db.hello_generator:
class: Drupal\db\DbServices\HelloGenerator
db.db_says:
path: /db/says/{count}
defaults:
_controller: '\Drupal\db\Controller\DBController::say'
requirements:
_permission: 'access content'
Ответы:
Здесь есть 3 вопроса:
1. Создать контроллер
1.1 Добавьте класс контроллера - вы сделали это. Для других смотрите документацию Drupal
1.2 Добавьте файл маршрутизации - похоже, этого нет в вашем коде:
my_module.routing.yml
см. документацию Drupal
2. Создать сервис
2.1 Добавить класс обслуживания - вы сделали это.
2.2 Добавить файл маршрутизации - вы сделали это, хотя он содержит дополнительный код, который принадлежит файлу маршрутизации. Это все, что вам нужно:
my_module.services.yml
см. документацию Drupal
3. Используйте сервисы в контроллере
Ты сделал это. Вот ссылка для других:
3.1 Переопределить
create()
методКласс контроллера наследует этот метод от
class ControllerBase
. Его роль заключается в создании объекта контроллера. Следите за аргументом метода: передается контейнер служб. Извлеките нужные вам сервисы и передайте их конструктору:3.2 Инициализация услуг в
__construct()
3.3 Начать пользоваться услугами
источник
create()
метода. Я полагаю , вы не сказали бы , что , хотя , если бы я не пропустил что - то другое , что должно было быть очевидно ... Я думаю , что служба делает объекты связи бассейна?