Answers:
“访问回调”是用来验证用户是否有权访问页面的函数。作为特殊情况,它可以是value TRUE
,在这种情况下,所有用户都可以访问它;换句话说,访问许可将被绕过。
如果您使用函数名称作为“访问回调”值(默认情况下为“ user_access”),则还可以使用“访问参数”,它是一个包含传递给访问回调函数的参数的数组。
与其他菜单回调一样,参数必须是字符串或数字。如果是数字,则该值将替换为从菜单路径中获取的值。如果要避免这种替换,则需要使用字符串代替数字。例如,将"1"
一个用作传递给访问回调的参数将避免自动替换。
这些是Drupal核心模块中使用的菜单回调声明的一些示例。(这些示例来自Drupal 7代码,但是对于我想指出的一点,这没有任何区别。)
这是一个例子,其中接入回调user_access() 。
$items['file/progress'] = array(
'page callback' => 'file_ajax_progress',
'delivery callback' => 'ajax_deliver',
'access arguments' => array('access content'),
'theme callback' => 'ajax_base_page_theme',
'type' => MENU_CALLBACK,
);
这是访问回调不是函数名的示例。
$items['user'] = array(
'title' => 'User account',
'title callback' => 'user_menu_title',
'page callback' => 'user_page',
'access callback' => TRUE,
'file' => 'user.pages.inc',
'weight' => -10,
'menu_name' => 'user-menu',
);
在这种情况下,访问回调是user_view_access(),而不是数字1,而是从菜单路径中获取的值(在本例中为“ user /%user”);这是一种特殊情况,因为该函数将获取所返回的值user_load()
。
$items['user/%user'] = array(
'title' => 'My account',
'title callback' => 'user_page_title',
'title arguments' => array(1),
'page callback' => 'user_view_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
// By assigning a different menu name, this item (and all registered child
// paths) are no longer considered as children of 'user'. When accessing the
// user account pages, the preferred menu link that is used to build the
// active trail (breadcrumb) will be found in this menu (unless there is
// more specific link), so the link to 'user' will not be in the breadcrumb.
'menu_name' => 'navigation',
);
假设先前的菜单定义如下,并使用“ user / hello”之类的路径进行调用。
$items['user/%'] = array(
'title' => 'My account',
'title callback' => 'user_page_title',
'title arguments' => array(1),
'page callback' => 'user_view_page',
'page arguments' => array(1),
'access callback' => 'user_view_access',
'access arguments' => array(1),
// By assigning a different menu name, this item (and all registered child
// paths) are no longer considered as children of 'user'. When accessing the
// user account pages, the preferred menu link that is used to build the
// active trail (breadcrumb) will be found in this menu (unless there is
// more specific link), so the link to 'user' will not be in the breadcrumb.
'menu_name' => 'navigation',
);
在这种情况下,访问回调将接收从路径中获取的值作为参数(0表示“用户”,而1表示“用户”之后的部分和斜杠);在这种情况下,该值为“ hello”。
为了更好地理解这些通配符参数,请参见通配符加载程序参数。该文档页面被标记为Drupal 6,但所报告的内容仍适用于Drupal 7。
访问回调是一种检查某些用户是否具有某些权限的功能。默认的访问回调是user_access()
访问参数列出了由访问回调检查的权限。例如“访问内容”
access callback
呢?如果不是user_access()
,那是否会消除对它的需要access arguments
?
access arguments
吗?