web-dev-qa-db-ja.com

カスタムモジュール内の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()`
_

パラメータを取得するにはどうすればよいですか?

6
zied123456

以前は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();

しかし、複数のパラメータ値で、私は今成功しています(Ex: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();
11
B.lakshman

使用する \Drupal\Core\Routing;

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

名前付きパラメーターは、

$value = \Drupal::routeMatch()->getParameter('slug_name_from_route');

「slug_name_from_router」はrouting.ymlパスプロパティから取得されます

パス: '/ your/path/{slug_name_from_route}'

pcasting なしのrawパラメータが必要な場合は、

$value = \Drupal::routeMatch()->getRawParameter('slug_name_from_route');
10
Manish yadav

arg()はdrupal 8で廃止予定ですが、arg()関数のように値を取得できますdrupal 7&6

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

出力は、basepathまたは(baseurl)を除くurlのパラメーターになります。

Array
(
   [0] => 
   [1] => node
   [2] => add
)
$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)として{node}を使用しました。 *-> getParameter( 'node');を使用してアクセスできます。

これがうまくいくことを願っています。

4
Monal Soft

URLからクエリパラメータを取得するには、以下を使用できます。たとえば、URLがある場合、

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

URLから"uid"を取得するには、..を使用します。

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

URLから"num"を取得するには、..を使用します。

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

あなたのURLがこのような例の場合

http://localhost/drupal/node/6666

次に、完全なURLパスを取得する必要があります

$current_path = \Drupal::request()->getPathInfo();

次に、パスを分解して引数の配列を取得します。

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

Idが値を含む、以下のようなURLのキーによって値が渡された場合の別の例

http://localhost/drupal?id=123

与えられたdrupalリクエストによってIDを取得できます

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

これは、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>

そして、それは終わりました。お役に立てれば。

1
Umesh Patil