如何在Phalcon中設置404頁面以便在控制器/操作不存在時顯示?如何在Phalcon中設置404頁面
回答
您可以設置調度程序爲您執行此操作。
當你引導你的應用程序,你可以做到這一點($di
是你DI廠):
use \Phalcon\Mvc\Dispatcher as PhDispatcher;
$di->set(
'dispatcher',
function() use ($di) {
$evManager = $di->getShared('eventsManager');
$evManager->attach(
"dispatch:beforeException",
function($event, $dispatcher, $exception)
{
switch ($exception->getCode()) {
case PhDispatcher::EXCEPTION_HANDLER_NOT_FOUND:
case PhDispatcher::EXCEPTION_ACTION_NOT_FOUND:
$dispatcher->forward(
array(
'controller' => 'error',
'action' => 'show404',
)
);
return false;
}
}
);
$dispatcher = new PhDispatcher();
$dispatcher->setEventsManager($evManager);
return $dispatcher;
},
true
);
創建ErrorController
<?php
/**
* ErrorController
*/
class ErrorController extends \Phalcon\Mvc\Controller
{
public function show404Action()
{
$this->response->setStatusCode(404, 'Not Found');
$this->view->pick('404/404');
}
}
和404視圖(/views/404/404.volt
)
<div align="center" id="fourohfour">
<div class="sub-content">
<strong>ERROR 404</strong>
<br />
<br />
You have tried to access a page which does not exist or has been moved.
<br />
<br />
Please click the links at the top navigation bar to
navigate to other parts of the site, or
if you wish to contact us, there is information in the About page.
<br />
<br />
[ERROR]
</div>
</div>
您也可以在errorC中設置標題ontroller by
class ErrorController extends ControllerBase
{
public function error404Action()
{
$this->response->setHeader('HTTP/1.0 404','Not Found');
// $this->response->setHeader(404, 'Not Found'); <- did not work
}
}
而之前,在控制器中發生錯誤的地方,可以轉發到這個錯誤控制器。
class IndexController extends ControllerBase
{
public function indexAction()
{
$id = (int)$this->getId($param);
if ($id > 0) {
// do you stuff
} else {
$this->dispatcher->forward(array(
'controller' => 'error', 'action' => 'error404')
);
}
}
}
這是一個快速和骯髒的(?)的方式,也是不錯的,如果你得到來自數據庫的內容,並希望拋出一個錯誤,如果沒有被發現。
您可以使用路由來處理未找到404頁:
$router->notFound(array(
"controller" => "index",
"action" => "route404"
));
編號:http://docs.phalconphp.com/en/latest/reference/routing.html#not-found-paths
這隻適用於以下代碼:'$ router = Phalcon \ Mvc \ Router假); // $ defaultRoutes = false' –
由季莫普洛斯提出的解決辦法是行不通的。它會產生一個循環條件。
Phalcon路由器組件有一個默認行爲,提供了一個非常簡單的路由,它始終需要一個與以下模式匹配的URI:/:controller /:action /:params。這會導致很多問題,因爲Phalcon將搜索一個當服務器收到請求的URL不匹配任何定義的路由時不存在的控制器。
所以,首先,你必須禁用這種行爲。這是可以做到的Router實例創建過程中傳遞FALSE
,如下:
$router = Phalcon\Mvc\Router(FALSE);
在這一點上,你可以使用@阮仲砰提出的解決方案。
$router->notFound(
[
"namespace" => "MyNamespace\Controller"
"controller" => "index",
"action" => "route404"
]
);
重要的是要注意,如果您使用的是命名空間的調度員將無法找到控制器,除非你指定它,就像我上面做了很重要的。
這不僅是最簡單的解決方案,而且是唯一可行的解決方案。
如果通過將false傳遞給Router來禁用,則無法找到所有其他路由,並且所有頁面都轉到404路由。 – vee
@vee,這是不正確的。只有在不定義路線時纔會發生這種情況:路徑與其相對控制器/操作之間的映射。正如我上面所寫的,路由器有一個默認行爲來匹配/:controller /:action /:params,但是你可以自由地定義你的路由和它們相關的行爲之間的關聯。然後你可以禁用默認行爲。在downvote之前閱讀文檔。 – noun
我被閱讀文檔。並且我已經定義了路線並且已經測試過這是行不通的。 //創建路由器 $ router = new \ Phalcon \ Mvc \ Router(false); $ router-> add( '/ index/page3 /([a-zA-Z0-9 _-] +)/([a-zA-Z0-9 _-] +)/ {pagename}', array( '控制器'=> '索引', '動作'=> 'PAGE3', '滾'=> 1, '軌道'=> 2, ) ); $ router-> not found( array( 「controller」=>「error」, 「action」=>「e404」 ) ); 轉到http:// localhost/phalcon />頁面未找到 轉到http:// localhost/phalcon/index/page3>頁面未找到 轉到路由中定義的任何頁面>找不到頁面 – vee
- 1. 如何在phalcon中響應404頁面?
- 2. 如何在自定義404頁面上設置頁面標題?
- 3. 如何在JBoss 5中設置自定義404頁面?
- 4. 如何在WAMP服務器中設置404頁面的樣式
- 5. 如何使用預渲染設置在nginx中的404頁面
- 6. 在IIS 7中爲HTML頁面設置自定義404頁面
- 7. 如何在404頁面上設置隱藏塊(錯誤)Drupal
- 8. Glassfish(2.1)JSF(1.2)設置404頁面
- 9. 爲JSP設置404錯誤頁面
- 10. 如何設置UTF8爲404頁
- 11. 如何根據URL值設置2個不同的404頁面?
- 12. 404頁面的文件htaccees如何設置?
- 13. 在htaccess中爲特定網址設置自定義404頁面
- 14. 在Firebase中,我是否設置了我的404頁面
- 15. 如何在MODX中配置404錯誤頁面?
- 16. 如何設置DIV頁面
- 17. {{content()}}函數如何在伏電頁面phalcon框架中工作
- 18. 如何在單個頁面站點中設置頁面標題
- 19. 如何在EPIServer中將頁面設置爲起始頁面
- 20. 如何創建404頁面?
- 21. 如何在Volt(Phalcon)中設置用戶定義的功能
- 22. 如何在Phalcon框架的Model :: query()中設置別名
- 23. 如何在Phalcon中設置伏編譯的目錄路徑?
- 24. 如何在Phalcon控制器中設置自定義標題
- 25. 如何在Phalcon PHP ORM中設置OR條件?
- 26. 如何設置在頁面加載
- 27. 如何在頁面上設置網址?
- 28. 如何在子頁面上設置JavaScript?
- 29. 如何在頁面下設置博客
- 30. 如何在Laravel創建404頁面?
我來回答......但是:) – twistedxtra