Получить параметры URL внутри пользовательского модуля
Я создал пользовательский блок, как это:
class HelloBlock extends BlockBase implements BlockPluginInterface{
/**
* {@inheritdoc}
*/
public function build() {
$config = $this->getConfiguration();
$result = db_query('SELECT * FROM {test}');
return array(
'#theme' => 'world',
'#test' => $result
);
}
}
И теперь я хочу программно получить некоторый параметр из URL-адреса.
Например:
Если URL-адрес http://localhost/drup/hello/5569
я хочу получить значение 5569
внутри моего модуля.
Я пробовал arg(1)
и drupal_get_query_parameters()
но я получил это сообщение об ошибке:
Call to undefined function `Drupal\hello\Plugin\Block\arg()`
и
Call to undefined function `Drupal\hello\Plugin\Block\drupal_get_query_parameters()`
Как я могу получить параметры?
Ответы - Получить параметры URL внутри пользовательского модуля / Get URL parameters inside custom module

08.06.2016 05:26:43
Использовать \Drupal\Core\Routing;
:
$parameters = \Drupal::routeMatch()->getParameters();
Именованные параметры доступны в виде
$value = \Drupal::routeMatch()->getParameter('slug_name_from_route');
Где 'slug_name_from_router' происходит от вашего маршрута.YML в собственность путем
путь: '/ваш/путь/{slug_name_from_route}'
Если вы хотите необработанный параметр без какой-либо трансляции, вы можете получить
$value = \Drupal::routeMatch()->getRawParameter('slug_name_from_route');

08.06.2016 02:50:45
$route_match = \Drupal::service('current_route_match');
$abc = $route_match->getParameter('node'); //node is refrence to what you have written in you routing file i.e:
in something.routing.yml
entity.node.somepath:
path: '/some/{node}/path'
Я использовал {узел} как ARG(1). И я могу получить к нему доступ с помощью * - >getParameter ('node');
Надеюсь, это сработает.

28.07.2016 08:50:57
arg () устарел в drupal 8, однако мы можем получить значения, подобные ARG () функция делает в drupal 7 & 6
$path = \Drupal::request()->getpathInfo();
$arg = explode('/',$path);
print_r($arg); exit();
Выходом могло бы стать параметров в URL, кроме базового маршрута или (автоопределения),
Array
(
[0] =>
[1] => node
[2] => add
)

$path = \Drupal::service('path.current')->getPath();
. Но я не вижу большой разницы на самом деле.

06.01.2017 01:24:27
Я использовал, чтобы получить значение параметра из URL (localhost / check / myform?моб=89886665)
$param = \Drupal::request()->query->all();
И применяется в моем запросе select
$query = \Drupal::database()->select('profile_register', 'p1');
$query->fields('p1');
$query->condition('p1.mobileno', $edituseprof);
$query->condition('publishstatus', 'no');
$result = $query->execute()->fetchAll();
Но на нескольких значениях параметров я теперь успешен( например: http://10.163.14.41/multisite/check/myform?моб=89886665&id=1)
$query = \Drupal::database()->select('profile_register', 'p1');
$query->fields('p1');
$query->condition('p1.mobileno', $edituseprof['mob']);
$query->condition('p1.ids', $edituseprof['id']);
$query->condition('publishstatus', 'no');
$result = $query->execute()->fetchAll();

15.09.2017 11:40:42
Документы Drupal отлично подходят для этого: https://www.drupal.org/docs/8/api/routing-system/parameters-in-routes
определите переменную пути в yaml
example.name: path: '/example/{name}' ...
Добавьте переменную в свой метод и используйте ее
<?php class ExampleController { // ... public function content($name) { // Name is a string value. // Do something with $name. } } ?>

12.10.2018 03:17:47
Чтобы получить параметр запроса из url-адреса, вы можете сделать следующее. Если у вас есть URL-адрес, например,
domainname.com/page?uid=123&num=452
Чтобы получить "uid"из url-адреса, используйте..
$uid = \Drupal::request()->query->get('uid');
Чтобы получить "num" из url-адреса, используйте..
$num = \Drupal::request()->query->get('num');

12.10.2018 04:20:49
Если Ваш url-адрес похож на этот ниже пример
http://localhost/drupal/node/6666
Затем вы должны получить полный путь url-адреса по
$current_path = \Drupal::request()->getPathInfo();
затем разнесите путь, чтобы получить массив аргументов.
$path_args = explode('/', $current_path);
Другой пример, если значение передается ключом в url, как показано ниже, где id содержит значение
http://localhost/drupal?id=123
Вы можете получить идентификатор по заданному запросу drupal
$id = \Drupal::request()->query->get('id');

27.11.2019 03:03:28
Вот пример доступа к параметрам URL и передачи их в шаблон TWIG, Я рассматриваю, что вы уже создали свой модуль и необходимые файлы и предположили " / test?fn=admin " - это Ваш URL
В вашем.файл модуля реализует hook_theme и определяет переменные и имя шаблона (убедитесь, что вы заменили " _ " на " - " при создании файла шаблона)
function my_module_theme () { return [ 'your_template_name' => [ 'variables' => [ 'first_name' => NULL, ], ]; }
Теперь создайте свой контроллер и поместите в него код ниже.
namespace Drupal\my_module\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Request;
class MyModule extends ControllerBase {
public function content(Request $request) {
return [
'#theme' => 'my_template',
'#first_name' => $request->query->get('fn'), //This is because the parameters are in $_GET, if you are accessing from $_POST then use "request" instead "query"
];
}
}
Теперь в вашем файле TWIG, который должен быть "my-template.формат html.веточка" вы можете получить доступ к этому параметру, как,
<h3>First Name: {{ first_name }}</h3>
И дело сделано. Надеюсь, это поможет.