Візьміть BlockLibraryController
клас як приклад; він поширюється на той же клас, що і ваш контролер.
Ви визначаєте:
- Статичний і загальнодоступний
create()
метод, який отримує значення з контейнера залежностей і створює новий об'єкт вашого класу
- Конструктор класу , який зберігає значення , що передаються від попереднього методу у властивостях об'єкта
- Набір властивостей об'єкта для збереження значень, переданих у конструкторі класу
У вашому випадку код буде подібний до наступного.
class MyModuleController extends ControllerBase {
/**
* The path alias manager.
*
* @var \Drupal\Core\Path\AliasManagerInterface
*/
protected aliasManager;
/**
* Constructs a MyModuleController object.
*
* @param \Drupal\Core\Path\AliasManagerInterface $alias_manager
* The path alias manager.
*/
public function __construct(AliasManagerInterface $alias_manager) {
$this->aliasManager = $alias_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('path.alias_manager')
);
}
/**
* {@inheritdoc}
*/
public function getUserContent() {
$alias = $this->aliasManager->getPathByAlias($_POST['url']);
// Omissis.
}
}
Не забудьте покласти use \Drupal\Core\Path\AliasManagerInterface;
зверху файл, що містить код, який ви показуєте.
Як бічне зауваження, код, який ви використовуєте для візуалізації подання, є неправильним: вам не потрібно користуватися, drupal_render()
тому що views_embed_view()
вже повертає масив, що передається
Тоді масив візуалізації, який ви повертаєте, ймовірно, не дає очікуваного результату. # name, ймовірно, не використовуватиметься з Drupal, і #markup фільтрує розмітку, яку ви переносите до нього, як описано в огляді API візуалізації .
#markup : Вказує, що масив забезпечує розмітку HTML безпосередньо. Якщо розмітка не дуже проста, наприклад, пояснення в тезі абзацу, зазвичай краще використовувати #theme або #type, щоб тема могла налаштувати розмітку. Зауважте, що значення передається через \Drupal\Component\Utility\Xss::filterAdmin()
, яке позбавляє відомі вектори XSS, дозволяючи отримати дозвільний список тегів HTML, які не є векторами XSS. (Тобто, <script>
і <style>
заборонено.) Перегляньте \Drupal\Component\Utility\Xss::$adminTags
список тегів, які будуть дозволені. Якщо для розмітки потрібен будь-який з тегів, які не містяться в цьому списку, ви можете застосувати файл гачок теми та файл шаблонів та / або бібліотеку активів. Крім того, ви можете використовувати ключ масиву візуалізації #allowed_tags, щоб змінити теги, які фільтруються.
#allowed_tags : Якщо надано #markup, це можна використовувати для зміни того, які теги використовуються для фільтрування розмітки. Значення має бути масивом тегів, які Xss::filter()
приймаються. Якщо встановлено #plain_text, це значення ігнорується.