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を生成するための一部の必須パラメーターが欠落しています(「ノード」)
理由はわかりません
$ _ 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 }