我已经创建了一个这样的自定义块:
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()`
如何获取参数?
答案 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
在您的.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
在yaml
中定义路径变量example.name:
path: '/example/{name}'
...
在方法中添加变量并使用它
<?php
class ExampleController {
// ...
public function content($name) {
// Name is a string value.
// Do something with $name.
}
}
?>