Получить параметры URL внутри пользовательского модуля

Получить параметры URL внутри пользовательского модуля

07.06.2016 12:26:25 Просмотров 56 Источник

Я создал пользовательский блок, как это:

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

Manish yadav

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');
Monal Soft

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');

Надеюсь, это сработает.

Karthikeyan Manivasagam

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
)
https://stackoverflow.com/questions/37675445/get-url-parameters-inside-custom-module/38628027#comment90487734_38628027
drupal.org/node/2274705 говорит, что $path = \Drupal::service('path.current')->getPath();. Но я не вижу большой разницы на самом деле.
B.lakshman

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();
Joe Crombie

15.09.2017 11:40:42

Документы Drupal отлично подходят для этого: https://www.drupal.org/docs/8/api/routing-system/parameters-in-routes

  1. определите переменную пути в yaml

    example.name:
      path: '/example/{name}'
      ...
    
  2. Добавьте переменную в свой метод и используйте ее

    <?php
    class ExampleController {  
      // ...
      public function content($name) {
        // Name is a string value.
        // Do something with $name.
      }
    }
    ?>
    
Tanvir Ahmad

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');
Rahul Chauhan

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');
Umesh Patil

27.11.2019 03:03:28

Вот пример доступа к параметрам URL и передачи их в шаблон TWIG, Я рассматриваю, что вы уже создали свой модуль и необходимые файлы и предположили " / test?fn=admin " - это Ваш URL

  1. В вашем.файл модуля реализует 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>

И дело сделано. Надеюсь, это поможет.

Закрыть X