获取自定义模块中的URL参数

时间:2016-06-07 09:26:25

标签: php drupal drupal-8

我已经创建了一个这样的自定义块:

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中获取一些参数。

例如:

如果网址为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()`

如何获取参数?

8 个答案:

答案 0 :(得分:8)

我曾经从URL获取参数值(localhost / check / myform?mob = 89886665)

$param = \Drupal::request()->query->all();

并应用于我的选择查询

 $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?mob=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();

答案 1 :(得分:7)

使用\Drupal\Core\Routing;

$parameters = \Drupal::routeMatch()->getParameters();

答案 2 :(得分:5)

arg()在drupal 8中被弃用,但是我们可以在drupal 7&amp ;;中获得类似arg()函数的值。 6

$path = \Drupal::request()->getpathInfo();
$arg  = explode('/',$path);
print_r($arg); exit(); 

输出将是url中的参数,除了basepath或(baseurl),

Array
(
   [0] => 
   [1] => node
   [2] => add
)

答案 3 :(得分:3)

$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'

我使用{node}作为arg(1)。我可以使用* - > getParameter('node');

来访问它

希望这会奏效。

答案 4 :(得分:2)

要从url获取查询参数,您可以执行以下操作。 例如,如果您使用网址,

domainname.com/page?uid=123&num=452

要从网址中获取“ uid” ,请使用。

$uid = \Drupal::request()->query->get('uid');

要从网址中获取“数字” ,请使用。

$num = \Drupal::request()->query->get('num');

答案 5 :(得分:2)

如果您的网址类似于以下示例

http://localhost/drupal/node/6666

然后,您必须通过

获取完整的URL路径。
$current_path = \Drupal::request()->getPathInfo();

然后展开路径以获取arguments数组。

$path_args = explode('/', $current_path);

另一个示例,如果值由url中的键传递,如下所示,其中id包含值

http://localhost/drupal?id=123

您可以通过给定的drupal请求获取ID

$id = \Drupal::request()->query->get('id');

答案 6 :(得分:1)

这里是访问URL参数并将其传递给TWIG模板的示例, 我正在考虑您已经创建了模块和所需的文件,并假设“ / test?fn = admin”是您的URL

  1. 在您的.module文件中实现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.twig”,您可以通过以下方式访问此参数,

 <h3>First Name: {{ first_name }}</h3>

完成。 希望这会有所帮助。

答案 7 :(得分:-2)

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.
      }
    }
    ?>