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