web-dev-qa-db-ja.com

ユーザーが特定のルートにアクセスできるかどうかを確認するにはどうすればよいですか?

Urlオブジェクトからリンクをレンダリングし、ユーザーがノードを表示するときのように実際にそのURLにアクセスできることを確認しようとしています。

何らかの理由で、これは常にFALSEを返しますが、ノードは$languageは設定言語です。

$_url = Url::fromRoute('<current>', [], ['language' => $language]);
if ($_url->access()) {
  // The code inside here is never executed.
}

パスの背後にあるエンティティを実際にロードせずに、ユーザーが特定のパスにアクセスできることを確認するにはどうすればよいですか?


編集:現在の状態:

$currentPath = \Drupal::service('path.current')->getPath();
$urlObject = Url::fromUserInput($currentPath);
$routeName = $urlObject->getRouteName();

$linkUrl = Url::fromRoute($routeName, [], ['language' => $dataLangId]);

debug($languageData['languageName']);
debug($linkUrl->toString());

if ($linkUrl->access()) {
  debug('access');
}
else {
  debug('denied');

}

結果は:

ルート「entity.node.canonical」のURLを生成するための一部の必須パラメーターが欠落しています(「ノード」)

1
Alex

理由はわかりません

 $ _ url = Url :: fromRoute( ''、[]、['language' => $ language]); 

ルート名<current>では機能しませんが、他のルート名では機能します。たとえば、some_module.some_route_nameという名前のルートでは、次のように機能します。


  $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  $_url = Url::fromRoute('some_module.some_route_name', [], ['language' => $language]);
  $userCurrent = \Drupal::currentUser();
  if ($_url->access($userCurrent)) {
    //- Do Stuff
  }

現在のルートの場合。これを試してみてください。

 use Drupal\Core\Url; 
 
 $ request =\Drupal :: request(); 
 $ _url = Url :: createFromRequest($ request); 
 $ userCurrent =\Drupal :: currentUser(); 
 if($ _url-> access($ userCurrent)){
 //-Do Stuff 
} 
3
berramou