9.6. Պարամետրով երթուղի։
Մենք կարող ենք օգտագործել URL-ի պարամետրերը երթուղիների (routes) համար։ Դրանք աշխատում են ճիշտ այնպես, ինչպես Views-ի կոնտեքստային ֆիլտրերը։ Օրինակ՝ մենք կարող ենք URL-ով փոխանցել տարբեր էություների ID-ներ, տեքստային տողեր կամ հերթական ID-ներ՝ բաժանված ստորակետով կամ գումարով։ Այս դասում մենք կփոխանցենք node-ի ID-ն և կցուցադրենք այդ node-ի վերնագիրը և հիմնական բովանդակությունը։
Կոդի օրինակները հասանելի են GitHub-ում՝
https://github.com/levmyshkin/drupalbook8
Ավելացնենք նոր երթուղի drupalbook.routing.yml ֆայլում՝
drupalbook.display_node:
  path: '/display-node/{node}'
  defaults:
    _controller: '\Drupal\drupalbook\Controller\DisplayNode::content'
    _title_callback: '\Drupal\drupalbook\Controller\DisplayNode::getTitle'
  requirements:
    _custom_access: '\Drupal\drupalbook\Controller\DisplayNode::access'
  options:
    parameters:
      node:
        type: entity:nodeԱյստեղ {node}-ը URL-ից ստացվող ID-ն է, որը Drupal-ը վերափոխում է node-ի օբյեկտի՝ օգտագործելով parameters դաշտը։
_title_callback–ը օգտագործվում է վերնագիրն առանձնացնելով սահմանելու համար։
_custom_access–ը օգտագործվում է մուտքի ստուգման հարմարեցված մեթոդի համար։
Այժմ ստեղծենք controller-ը՝ modules/custom/drupalbook/src/Controller/DisplayNode.php
<?php
namespace Drupal\drupalbook\Controller;
use Drupal\Core\Access\AccessResult;
use Drupal\node\NodeInterface;
class DisplayNode {
  public function content(NodeInterface $node) {
    $element = array(
      '#markup' => $node->body->value,
    );
    return $element;
  }
  public function access(NodeInterface $node) {
    $user = \Drupal::currentUser();
    if ($node->getType() == 'article' && !in_array('authenticated', $user->getRoles())) {
      return AccessResult::forbidden();
    }
    return AccessResult::allowed();
  }
  public function getTitle(NodeInterface $node) {
    return $node->getTitle();
  }
}Բացատրություն՝
- NodeInterface $nodeպարամետրը ավտոմատ ձևով բեռնվում է՝ հիմնված URL-ի ID-ի վրա։
- AccessResultդասը օգտագործվում է՝ մուտքի սահմանափակումներ դնելու համար։
- getTitle()մեթոդը վերադարձնում է node-ի վերնագիրը։ Կարող եք ավելացնել պայմաններ՝ հիմնված օգտատիրոջ իրավունքների կամ node-ի տիպի վրա։
Օրինակ՝ վերնագրում “Premium” կամ “Free” նշելու համար՝
public function getTitle(NodeInterface $node) {
  $user = \Drupal::currentUser();
  if ($node->getType() == 'article' && !in_array('authenticated', $user->getRoles())) {
    return 'Պրեմիում բովանդակություն՝ ' . $node->getTitle();
  }
  else {
    return 'Ազատ մատչելիություն՝ ' . $node->getTitle();
  }
}Ինչպես տեսնում եք՝ Drupal-ը տրամադրում է ճկուն մեխանիզմներ՝ Ձեր էջի ելքը հարմարեցնելու համար։ Երբ հաճախորդը ցանկանում է տարբեր ելքեր տարբեր օգտատերերի համար, կարող եք հեշտությամբ դա անել՝ օգտագործելով Drupal API-ն և մի փոքր PHP կոդ։
Կոդի օրինակները կրկին՝
https://github.com/levmyshkin/drupalbook8