दूसरे शब्दों में, Drupl 8 hook_menu_alter () के बराबर क्या है ?
Drupal 8 अभी भी hook_menu () का उपयोग करता है , लेकिन जो मैं देख सकता हूं, उसके लिए दी गई जानकारी हुक से अलग है Drupal 7 में हुक क्या लौटा है। उदाहरण के लिए, user_menu () में उपयोगकर्ता के लिए दी गई परिभाषा निम्नलिखित है।
$items['user'] = array(
'title' => 'User account',
'title callback' => 'user_menu_title',
'weight' => -10,
'route_name' => 'user_page',
'menu_name' => 'account',
);
User_rout.yml फ़ाइल में प्रविष्टि के लिए मार्ग_नाम संपत्ति लिंक ।
user_page:
pattern: '/user'
defaults:
_content: '\Drupal\user\Controller\UserController::userPage'
requirements:
_access: 'TRUE'
यह सिम्फनी के साथ किए गए कार्य से अलग है, और यह मुझे भ्रमित करता है कि एक मॉड्यूल दूसरे उपयोगकर्ता से परिभाषित मार्ग को कैसे बदल सकता है।
एकमात्र फ़ंक्शन जो अभी भी इनवॉइस कर रहा hook_menu_alter()
है menu_router_build () है , लेकिन उस फ़ंक्शन में अभी भी कोड है जिसे अपडेट करने की आवश्यकता है, क्योंकि यह अभी भी पदावनत का उपयोग कर रहा है drupal_alter()
।
// Alter the menu as defined in modules, keys are like user/%user.
drupal_alter('menu', $callbacks);
foreach ($callbacks as $path => $router_item) {
// If the menu item is a default local task and incorrectly references a
// route, remove it.
// @todo This may be removed later depending on the outcome of
// http://drupal.org/node/1889790
if (isset($router_item['type']) && $router_item['type'] == MENU_DEFAULT_LOCAL_TASK) {
unset($callbacks[$path]['route_name']);
}
// If the menu item references a route, normalize the route information
// into the old structure. Note that routes are keyed by name, not path,
// so the path of the route takes precedence.
if (isset($router_item['route_name'])) {
$router_item['page callback'] = 'USES_ROUTE';
$router_item['access callback'] = TRUE;
$new_path = _menu_router_translate_route($router_item['route_name']);
unset($callbacks[$path]);
$callbacks[$new_path] = $router_item;
}
}