我是Zend Framework 2的新手。
我创建了一个“Admin”模块,还创建了“UserController”和“AlbumController”。 UserController包含登录和注销操作。 AlbumController包含正常的CRUD和欢迎动作。
现在,当我已经登录时直接访问http://localhost/websites/zendtest/public/admin/login
时,如何在欢迎页面上重定向页面。
同样的问题是当我没有登录时直接访问http://localhost/websites/zendtest/public/admin/album/welcome
时,如何在登录页面上重定向页面。
任何人都可以建议我解决这个问题吗?
我还有另一个问题,我如何在layout.phtml中使用控制器动作值,因为我有MenuContoller用于创建菜单。所以我需要从layout.phtml中的MenuController返回数组来创建动态菜单。
那么,我该怎么做?
答案 0 :(得分:0)
我认为你不会在ZF2 doc中解释。要恢复,您必须使用redirect
插件测试会话和重定向:
$this->redirect()->toRoute('actionname');
重定向插件的使用方式如下:
->toRoute($route, array $params = array(), array $options = array());
使用提供的$params
和$options
重定向到指定路线,以汇总网址。
要对旧版ZF的acl
插件等用户进行身份验证,请转到this page
对于最后一个问题,您可以使用(对于ZF2.1.3)视图中的某些值
$layout = $this->layout();
$layout->myvar = $mymenuarray;
使用
在视图中检索它$myvar...
答案 1 :(得分:0)
我不知道您是如何对用户进行身份验证的,但如果您使用的是Zend\Auth
,那么您可以执行以下操作:
public function loginAction() {
$authService = new \Zend\Authentication\AuthenticationService();
$authService->setStorage(new \Zend\Authentication\Storage\Session('user', 'details'));
if ($authService->hasIdentity()) {
// User is already logged in; redirect to welcome page
return $this->redirect()->toRoute('welcome'); // Assumes that you have a 'welcome' route
}
}
欢迎采取行动:
public function welcomeAction() {
$authService = new \Zend\Authentication\AuthenticationService();
$authService->setStorage(new \Zend\Authentication\Storage\Session('user', 'details'));
if (!$authService->hasIdentity()) {
// User is not logged in; redirect to login page
return $this->redirect()->toRoute('login'); // Assumes that you have a 'login' route
}
}
如果您希望在许多页面上执行此操作,则上述内容可能非常重复,因此您应该考虑将其重复使用,例如:从服务管理器( factory )获取身份验证服务。