বর্তমান পৃষ্ঠাটি যদি অ্যাডমিন পৃষ্ঠা হয় তবে কীভাবে পরীক্ষা করবেন?


9

একসময় আমি নিম্নলিখিত কোডটি ব্যবহার করে পরীক্ষা করতে শুরু করেছি যে বর্তমান পৃষ্ঠাটি প্রশাসক পৃষ্ঠা কিনা:

  $route = \Drupal::routeMatch()->getRouteObject();

  $is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);

তবে আমি দেখতে পেয়েছি যে এটি নুক সম্পাদনা পৃষ্ঠাগুলিতে হুক_এন্টিটি_লোড () এ ব্যর্থ হয়।

আমরা ড্রুপাল 8 এডমিন পৃষ্ঠায় থাকলে কীভাবে পরীক্ষা করব? ড্রুপাল 7 তে পথ_স_এডমিনের মতো কিছু?

আমি দেখতে পেয়েছি যে আমি যদি এই পৃষ্ঠায় কোড ব্যবহার করে হুক_এন্টিটি_লোডের বাইরের একই নোড সম্পাদনা পৃষ্ঠাটির পরীক্ষা করি তবে ( https://api.drupal.org/api/drupal/includes%21path.inc/function/path_is_admin/7.x ) এটি কাজ করে।

use Symfony\Component\HttpFoundation\Request;
use Symfony\Cmf\Component\Routing\RouteObjectInterface;

$path = '/node/75/edit';
$request = Request::create($path);

$route_match = \Drupal::service('router.no_access_checks')->matchRequest($request);
$route = $route_match[RouteObjectInterface::ROUTE_OBJECT];
$is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);

তবে যদি আমি বর্তমান পথটি ব্যবহার করে এই কোডটি হুক_এন্টিটি_লোডে যুক্ত করার চেষ্টা করি তবে আমি একটি মারাত্মক লুপ পেয়েছি।

আমার মনে হয় আমি যেখানে আটকেছি সেখানে হুক_এনটিটি_লোডে বর্তমান রুটটি লোড করা হচ্ছে।


1
নোড সম্পাদনা কোনও প্রশাসক পৃষ্ঠা নয়।
ya.teck

1
"উপস্থিতি" এর অধীনে "সামগ্রী সম্পাদনা বা তৈরি করার সময় প্রশাসনিক থিমটি ব্যবহার করুন" টগল করে আপনি এটিকে প্রশাসকের পথে পরিণত করতে পারেন। এটি বিকল্পটি _node_operation_routeসক্ষম করে সমস্ত রুটকেও বিকল্প পেতে সক্ষম করে _admin_route\Drupal::service('router.admin_context')->isAdminRoute()ডিফল্টরূপে বর্তমান রুটের জন্য পতাকাটি পরীক্ষা করে।
টুডি

উত্তর:


19

* আপডেট *

আমি যখন প্রথম এই প্রশ্নের উত্তর দিয়েছি, নোড সম্পাদনা এবং করশোনা সম্পাদনা পৃষ্ঠাগুলি প্রশাসক রুট হিসাবে সেট করা হয়নি। সুতরাং আমি তাদের জন্য পৃথক চেক যুক্ত করেছি। এ জাতীয় পৃথক চেক আর প্রয়োজন হয় না। নিম্নলিখিতটি এটি বেশ ভালভাবে কভার করে বলে মনে হচ্ছে:

if (\Drupal::service('router.admin_context')->isAdminRoute()) {
 // do stuff
}

আপনি যদি বর্তমান রুট ব্যতীত অন্য কোনও রুট চেক করতে চান তবে আপনি এটিএডমিনরোট () এ পাস করতে পারেন।

নোট, উপরের উপায় নোড সম্পাদনা পৃষ্ঠাগুলি বা ট্যাক্সোনমি শব্দ সম্পাদনা পৃষ্ঠাগুলির জন্য কাজ করবে না যদি আপনি / প্রশাসক / উপস্থিতিতে থিম প্রশাসক পৃষ্ঠায় "বিষয়বস্তু সম্পাদনা বা তৈরি করার সময় প্রশাসনিক থিম ব্যবহার করুন" চেক করেন। তারপরে আপনার আলাদা চেক লাগবে।

* আসল উত্তর: *

কোনও পৃষ্ঠা কোনও প্রশাসক পৃষ্ঠা কিনা তা পরীক্ষা করতে আপনি দুটি পদক্ষেপ প্রক্রিয়া ব্যবহার করতে পারেন। নোড সম্পাদনার জন্য রেজেক্স অ্যাডমিন থিমটি ব্যবহার নাও করতে পারে।

প্রথমে আমি isAdminRoute পদ্ধতি ব্যবহার করি:

  $route = \Drupal::routeMatch()->getRouteObject();

  $is_admin = \Drupal::service('router.admin_context')->isAdminRoute($route);

তারপরে আপনি কোনও নোড সম্পাদনা পৃষ্ঠা কিনা তা দেখার জন্য আপনি অতিরিক্ত চেক ব্যবহার করতে পারেন:

  $current_path = \Drupal::service('path.current')->getPath();
  if(preg_match('/node\/(\d+)\/edit/', $current_path, $matches)) {
    $is_admin = TRUE;
  }

নোড এবং ট্যাক্সনোমির শব্দ সম্পাদনা পৃষ্ঠাগুলির পাশাপাশি অন্যান্য অ্যাডমিন রুটের জন্য পরীক্ষার জন্য এখানে বেশ বিস্তৃত, তবে পুরোপুরি উপায়:

  $route = \Drupal::routeMatch()->getRouteObject();

  $is_admin = FALSE;
  if (!empty($route)) {
    $is_admin_route = \Drupal::service('router.admin_context')->isAdminRoute($route);
    $has_node_operation_option = $route->getOption('_node_operation_route');
    $is_admin = ($is_admin_route || $has_node_operation_option);
  }
  else {
    $current_path = \Drupal::service('path.current')->getPath();
    if(preg_match('/node\/(\d+)\/edit/', $current_path, $matches)) {
      $is_admin = TRUE;
    }
    elseif(preg_match('/taxonomy\/term\/(\d+)\/edit/', $current_path, $matches)) {
      $is_admin = TRUE;
    }
  }

2
এর মতো RegEx ব্যবহার করা সত্যই খারাপ অনুশীলন এবং এড়ানো উচিত। যদি রুটের নাম হল 'entity.node.edit_form' পর্যন্ত একটি সমাধান পাওয়া যায় আপনি পরীক্ষা করা উচিত
Eyal

সমস্যাটি হ'ল রুটটি শূন্য, খালি ফিরছে। -> getRouteObject () রুটটি ফেরত দিলে আমার রেজেেক্স করার দরকার হবে না।
Oknate

রহস্যময়। আপনি চেষ্টা করেছেন\Drupal::routeMatch()->getRouteName()
আইয়াল

1
\Drupal::routeMatch()->getRouteName()আমাকে নাল দেয় (দ্রুপাল 8.3.2)
গিলিয়াম বোইস

1
আপনার অতিরিক্ত চেক নোড সংশোধন, মোছা এবং অনুবাদ মত প্রশাসক পৃষ্ঠাগুলি হারিয়েছে।
ফিলিপ মাইকেল

10

নিম্নলিখিতটি আরও কিছুটা সংক্ষিপ্ত এবং অ্যাডমিন থিমটি ব্যবহারের জন্য কনফিগার করা হলে নোড সম্পাদনা পৃষ্ঠাগুলি ক্যাপচার করে। isAdminRouteপদ্ধতি বর্তমান রুটে ব্যবহার যদি কোনো একটিও নির্দিষ্ট করা হয়:

  /** @var \Drupal\Core\Routing\AdminContext $admin_context */
  $admin_context = \Drupal::service('router.admin_context');
  if (!$admin_context->isAdminRoute()) {
    // perform tasks.
  }

"প্রশাসক থিমটি ব্যবহারের জন্য কনফিগার করা হলে নোড সম্পাদনা পৃষ্ঠাগুলি ক্যাপচার করে" এখানে কী। আমি প্রশ্নটি করার কারণটি হ'ল কারণ অ্যাডমিন থিমটি ব্যবহার না করে নোড সম্পাদনা পৃষ্ঠাগুলির মতো নন-অ্যাডমিন-থিম পৃষ্ঠা ক্যাপচার করতে আমার সমস্যা হয়েছিল।
Oknate

আহ, এটা বোঝা যায়। হ্যাঁ, নোড সম্পাদনা পৃষ্ঠাগুলি অ্যাডমিন পৃষ্ঠা হিসাবে সেট না করা হলে এটি আরও জটিল।
শন ডাইচকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.