Wie kann ich eine 404-Seite in Phalcon einstellen, die angezeigt wird, wenn ein Controller/eine Aktion nicht existiert?Wie man eine 404-Seite in Phalcon einrichtet
Antwort
Sie können festlegen, dass der Dispatcher dies für Sie erledigt.
Wenn Sie Ihre Anwendung Bootstrap Sie dies tun können ($di
ist Ihre DI Werk):
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
);
Eine ErrorController
<?php
/**
* ErrorController
*/
class ErrorController extends \Phalcon\Mvc\Controller
{
public function show404Action()
{
$this->response->setStatusCode(404, 'Not Found');
$this->view->pick('404/404');
}
}
und eine 404-Ansicht (/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>
Das war sehr hilfreich für mich (fast exakte Kopie, außer für Controller/Action-Namen). Vielen Dank! – Trenton
funktioniert perfekt. – vee
und was ist, wenn ich 503 Statusseite von einer Aktion zusätzlich zu 404 Seite setzen möchte? Kann ich Statuscode als Parameter usw. setzen und von ErrorController lesen? Wie kann ich das machen ? – alexglue
Sie können den Header auch in einem FehlerC setzen ontroller von
mitclass ErrorController extends ControllerBase
{
public function error404Action()
{
$this->response->setHeader('HTTP/1.0 404','Not Found');
// $this->response->setHeader(404, 'Not Found'); <- did not work
}
}
Und bevor, in der Steuerung, in dem ein Fehler occures, können Sie zu diesem Fehler-Controller weiterleiten.
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')
);
}
}
}
, die eine schnelle und schmutzig ist (?) Art und Weise und ist gut, wenn Sie Inhalte aus einer Datenbank erhalten und wollen einen Fehler werfen, wenn nichts gefunden wurde.
Sie Routing verwenden können 404 nicht gefunden Seite zu handhaben:
$router->notFound(array(
"controller" => "index",
"action" => "route404"
));
Ref: http://docs.phalconphp.com/en/latest/reference/routing.html#not-found-paths
Dies funktioniert nur mit diesem Code:' $ router = Phalcon \ Mvc \ Router (FALSCH); // $ defaultRoutes = false' –
Die Lösung von Dimopoulos vorgeschlagen funktioniert nicht. Es erzeugt einen zyklischen Zustand.
Die Phalcon Router-Komponente hat ein Standardverhalten, das ein sehr einfaches Routing bietet, das immer einen URI erwartet, der dem folgenden Muster entspricht: /: controller /: action /: params. Dies wird viele Probleme verursachen, da Phalcon einen Controller durchsuchen wird, der nicht existiert, wenn der Server eine Anfrage für eine URL empfängt, die keiner definierten Route entspricht.
Also, zuerst müssen Sie dieses Verhalten deaktivieren. Dies kann FALSE
während der Router-Instanz Schaffung erfolgen vorbei, wie folgt:
$router = Phalcon\Mvc\Router(FALSE);
An dieser Stelle Sie die Lösung von @ Nguyễn Trọng Bằng vorgeschlagen nutzen können.
$router->notFound(
[
"namespace" => "MyNamespace\Controller"
"controller" => "index",
"action" => "route404"
]
);
Es ist wichtig zu beachten, wenn Sie der Disponent einen Namespace verwenden, wird die Steuerung zu finden nicht in der Lage sein, es sei denn Sie es angeben, wie ich oben tat.
Dies ist nicht nur die einfachste Lösung, sondern die einzige, die funktioniert.
Wenn du disabledest, indem du false an Router übergibst, kann der andere Router nicht gefunden werden und die ganze Seite wird nur auf 404 route gehen. – vee
@vee das ist nicht wahr. Das passiert nur, wenn Sie die Routen nicht definieren: die Zuordnung zwischen einem Pfad und seinem relativen Controller/Aktion. Wie ich oben geschrieben habe, hat der Router ein Standardverhalten, das zu/controller /: action /: params passt, aber Sie können die Verbindung zwischen Ihren Routen und ihren relativen Aktionen frei definieren. Dann können Sie das Standardverhalten deaktivieren. Bevor Sie herunterlesen, lesen Sie die Dokumentation. – noun
Ich wurde gelesen doc. und ich habe Route definiert und bereits getestet, dass dies nicht funktioniert. // Erstelle den Router $ router = new \ Phalcon \ Mvc \ Router (false); $ router-> add ( '/ index/page3/([a-zA-Z0-9 _-] +)/([a-zA-Z0-9 _-] +)/{Seitenname}', Array ( 'controller' => 'Index', 'Aktion' => 'page3', 'roll' => 1, 'Spur' => 2, ) ); $ router-> notFound ( Array ( "Controller" => "Fehler", "Aktion" => "e404" ) ); gehen Sie zu http: // localhost/phalcon /> Seite nicht gefunden gehen Sie zu http: // localhost/phalcon/index/Seite3> Seite nicht gefunden gehen Sie zu jeder Seite in Route definiert> Seite nicht gefunden – vee
- 1. Wie man eine Gruppe in Supervisord einrichtet?
- 2. Wie man eine Abonnementdatenbank (wie youtube) einrichtet?
- 3. Wie man Karma Läufercodeabdeckung einrichtet?
- 4. Wie man ein Webmail in Wordpress einrichtet
- 5. Wie man benutzerdefinierte Schriftart in Emacs einrichtet?
- 6. Wie man einen Tokenizer in elasticsearch einrichtet
- 7. Wie man JDBC in Eclipse einrichtet?
- 8. Wie man Merkurhaken in Kallithea einrichtet
- 9. Wie man Proxy in Swift einrichtet?
- 10. Wie man eine Checkbox-Bindung in Aurelia einrichtet
- 11. wie man diese Beziehung in Yii2 einrichtet
- 12. Wie man Datenbank in yii2 einrichtet?
- 13. Wie man Github Octicons in Rails einrichtet?
- 14. Wie man MySQL Quellcode in Xcode einrichtet?
- 15. Phalcon PhP - wie man das Hauptlayout für eine Aktion deaktiviert
- 16. Wie man einen Cronjob mit codeigniter einrichtet
- 17. Wie man mehrere "Umgebungen" mit CloudBees einrichtet?
- 18. Wie man eine teilweise Krümmung modal nicht ausblenden Symbolleiste einrichtet?
- 19. Wie man JerseyTest mit Frühling-Sicherheit einrichtet?
- 20. Wie man einen geteilten ccache einrichtet
- 21. Wie man eine Entwicklungsumgebung mit vagrant und javaee einrichtet
- 22. Wie man syntastic für vim einrichtet?
- 23. Wie man einen eigenen Geokodierungsserver einrichtet
- 24. Tfs 2010: Wie man einen Unternehmensquellserver einrichtet?
- 25. Wie man elasticsearch auf Heroku einrichtet?
- 26. Wie man diese Komponenten auf JPanel einrichtet?
- 27. Wie man Anwendungsmenü im Elektron einrichtet?
- 28. Wie man libdgx mit IntelliJ einrichtet?
- 29. Wie man Pydevd Ferndebugging mit Heroku einrichtet
- 30. Wie man einen neuen Jenkins-Slave einrichtet
Ich kam zu beantworten ... aber :) – twistedxtra