我設置了一個簡單的ACL模塊作爲控制器插件。現在我想實現一個「403渲染策略」,以便「拒絕」我只設置一個403響應,並且將渲染template_map中的「錯誤/ 403」視圖。該功能應該像原來的404策略。我看過Zend\Mvc\View\Http\RouteNotFoundStrategy
,但發現它有點超重。有沒有更簡單的方法來做到這一點?在Zend Framework 2中是否有一個簡單的解決方案來實現403渲染策略?
1
A
回答
2
你可能會看看SlmErrorException,其中我是作者。它允許您拋出標有異常接口的異常。該接口決定是否設置40x或50x狀態碼以及將渲染哪個錯誤模板。
您可以創建自己的異常
namespace MyModule\Exception;
use SlmErrorException\Exception\UnauthorizedInterface;
exception UnauthorizedUserException
extends \Exception
implements UnauthorizedInterface
{
}
然後你的地方拋出異常的代碼,如果拋出的異常實現任何已知接口的模塊檢查。然後將設置一個狀態代碼(所以在這種情況下,403)和視圖error/unauthorized
將被渲染。
此模塊正在開發中,尚未準備好生產。但你可能會看一看,看看它是否合適。也許你可以幫助提供穩定和幫助編寫測試,讓更多的人可以使用它。
0
這是一個不使用第三方模塊的解決方案。
您可以創建自定義事件觸發時,將設置模板所需的一個(請蘆葦代碼註釋):
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$eventManager->getSharedManager()->attach('custom', '403', function(MvcEvent $event) use($eventManager){
//set the 403 template you have previously prepared
$viewModel = new ViewModel();
$viewModel->setTemplate('error/403');
$appViewModel = $event->getViewModel();
$appViewModel->setTemplate('layout/layout');//set the default layout (optional)
$appViewModel->addChild($viewModel, 'content');//add the 403 template to the app layout
//prevent the MvcEvent::EVENT_DISPATCH to fire by calling it
//with high priority (100) and using $event->stopPropagation(true);
$eventManager->attach(MvcEvent::EVENT_DISPATCH, function(MvcEvent $event) {
$event->stopPropagation(true);
}, 100);
});
}
然後你就可以從代碼的任何地方觸發該事件:
$e = new \Zend\Mvc\MvcEvent();
$eventManager = new \Zend\EventManager\EventManager('custom');
$eventManager->trigger('403', $e);
相關問題
- 1. Zend Framework的NoSQL解決方案?
- 2. 同源策略的解決方案
- 3. 我在Java中簡單解決一個簡單的解決方案嗎?
- 4. 尋找簡單的解決方案來剖析一個方法
- 5. 簡單的解決方案
- 6. CSS解決方案圖像渲染
- 7. 是否有一個簡單的解決方案「排除/隱藏」功能的div?
- 8. Stormpath中有一個簡單的'is_authenticated'解決方案嗎?
- 9. Zend Framework 2 ACL的實現
- 10. 如何在javascript中實現決策樹。尋找比我醜陋的解決方案更好的解決方案
- 11. Angular 2:討論實現的現有解決方案
- 12. 用一個理想的Git分支策略爲一個簡單的白色標籤解決方案奮鬥
- 13. 策略來實現一個燼js popover
- 14. OpenGL:渲染樹形菜單的策略?
- 15. Zend Framework:緩存渲染
- 16. Silverlight和實體框架解決方案策略
- 17. LINQ 2 XML:簡單的輸入,腦屁有了解決方案
- 18. 在Zend Framework中渲染布局零件
- 19. 根據3個數據是否有一個簡單的解決方案來查找結果?
- 20. Visual Studio:單一解決方案還是很多解決方案?
- 21. Highcharts boxplot線渲染問題:有沒有解決方案?
- 22. 有沒有一個JavaScript庫來解決IE渲染錯誤?
- 23. Zend Framework中的錯誤渲染
- 24. 是否有一個ASP.NET MVC和jQuery的AJAX超時現有的解決方案?
- 25. 是否有一個一步一步的解決方案實施VoIP到iPhone?
- 26. Django的選擇領域有很多選擇 - 是否有一個簡單的解決方案是有效的?
- 27. 在Zend Framework 2中加載ACL的簡單方法?
- 28. 是否有更簡單的方法來實現openid?
- 29. Zend Framework 2中的渲染/響應策略究竟意味着什麼以及如何使用它?
- 30. Zend Framework 2如何在模塊中渲染partials?
在問這個問題之前,你看過BjyAuthorize(https://github.com/bjyoungblood/BjyAuthorize/)嗎?這是相當完整的,併爲您提供一個體面的未經授權的策略... – Ocramius 2013-02-11 17:04:07
@Ocramius是的,我做到了。這很不錯,我認爲它會解決問題。但可能有另一種(較小的)解決方案?就像在ZF1中那樣 - 你可以在請求中改變控制器和動作,並且403會被提升。 – Toni 2013-02-12 22:11:22
在ZF2中,應用程序異常可以通過連接到Zend \ Mvc \ Application'事件管理器的'Zend \ Mvc \ MvcEvent :: EVENT _ * _ ERROR'事件之一的偵聽器來處理。簡單的關閉也可以工作: '$ app-> getEventManager() - > attach('dispatch.error',function(){ die('application error!'); );' – Ocramius 2013-02-12 22:14:22