Возьмите 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 фильтрует разметку, которую вы ему передаете, как описано в обзоре Render 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 установлен, это значение игнорируется.