权限 - ACL

管理控制器中有一个检查权限的方法。举个例子:

protected function _isAllowed()
{
    return $this->_authorization->isAllowed('Magento_AdminNotification::show_list');
}

它将检查当前用户是否有权访问此操作,了解更多Admin ACL Access Control Lists

Magento 2 Controller 中的其他方法

_forward() 和 _redirect() 动作。

\Magento\Framework\App\Action\Action类为我们提供了 2 个重要的方法:_forward_redirect.

正向法

_forward()protected 函数将编辑请求以将其转移到另一个controller/action类。这不会更改请求 URL。例如,我们有 2 个动作 Forward 和Hello World,如下所示:

namespace Mageplaza\HelloWorld\Controller\Test;
class Forward extends \Magento\Framework\App\Action\Action
{
	public function execute()
	{
		$this->_forward('hello');
	}
}

如果您向 提出请求http://example.com/route_name/test/forward,屏幕上将显示以下结果。

Hello World! Welcome to Mageplaza.com

您还可以在转发时更改请求的控制器、模块和设置参数。请检查_forward()功能以获取更多信息:

protected function _forward($action, $controller = null, $module = null, array $params = null)
{
    $request = $this->getRequest();

    $request->initForward();

    if (isset($params)) {
        $request->setParams($params);
    }

    if (isset($controller)) {
        $request->setControllerName($controller);

        // Module should only be reset if controller has been specified
        if (isset($module)) {
            $request->setModuleName($module);
        }
    }

    $request->setActionName($action);
    $request->setDispatched(false);
}

重定向方法

此方法将转移到另一个controller/action类,并更改响应标头和请求 url。在上面的例子中,如果我们用_forward()这个方法替换_redirect()方法:

	$this->_redirect('*/*/hello');

然后从 url 访问后http://example.com/route_name/test/forward,url 将更改为并在屏幕上http://example.com/route_name/test/hello显示消息。Hello World! Welcome to Mageplaza.com