4.3 Hibakezelés
The original text for this section has changed since it was translated. Please help resolve this difference. You can:
Abban az esetben ha egy ki nem javítható hiba lép fel az alkalmazásodban megszokott dolog a feldolgozás leállítása és a felhasznóló számára egy hibaüzenet megjelenítése. Azét, hogy megkíméljünk ennek kezelésétől és lekódolásától a vezérlőkben és a komponensekben használhatpd a következő metódusokat:
$this->cakeError(<string hibaTipus>, [array parameterek]);
$this->cakeError(<string hibaTipus>, [array parameterek]);
A metódus meghívásával a felhasználó egy hibaoldalt kap és leáll mindenféle további feldolgozás.
A CakePHP-nak vannak előre definiált hiba típusai, de a jelen pillanatban ezek csak magának a keretrendszer szempontjából hasznosak. Egy ami hasznos az alkalmazás fejlesztők számára is az a jó öreg 404-es hiba. Ezt paraméterek nélkül hívhatjuk a következők szerint:
$this->cakeError('error404');
$this->cakeError('error404');
Kiegészítésként azt is megadhatod, hogy mit mondjon milyen url-en keletkezett a 404-es hiba az url paraméter használatával:
$this->cakeError('error404', array('url' => 'valami/akarmi.url'));
$this->cakeError('error404', array('url' => 'valami/akarmi.url'));
Ezek akkor válnak valóban hasznossá, ha a hibakezelőt kiterjeszted, hoyg használja a te saját hiba típusaidat is. Az egyéni hiba kezelések olyanok mint a vezérlő tevékenységek. Általában beállítasz set() valamilyen átadott paramétert, hogy elérhető legyen a Nézet számára és előállítasz egy Nézet fájlt a app/views/errors
könyvtárban.
Hozz létre egy app/app_error.phpfájlt a következők szerint.
<?php
class AppError extends ErrorHandler {
}
?>
<?phpclass AppError extends ErrorHandler {}?>
Az új hiba típusok kezelését úgy valósíthatod meg, hogy metódusokat adsz hozzá ehez az osztályhoz. Egyszerűen csak hozz létre egy új metódust olyan néven ami nevet a hiba típusaként használni akarsz.
Mondjuk van egy alkalmazásunk ami egy csomó fájlt ír a lemezre, így elvárhetó tőle, hogy a hibákról értesítse a usert. Nem akarunk külön kódot hozzáadni az alkalmazás különböző részein, így ez egy remek alkalom saját hiba típus használatára.
Adj egy új metódust az AppError osztályhoz. Egy paramétert fog fogadni, a file-t ami annak a fájlnak az elérési útja lesz amit nem sikerült a lemezre írni.
function nemMentettFile($params) {
$this->controller->set('file', $params['file']);
$this->_outputMessage('nem_mentett_file');
}
function nemMentettFile($params) {$this->controller->set('file', $params['file']);$this->_outputMessage('nem_mentett_file');}
Hozz létre egy Nézetet a app/views/errors/nem_mentett_file.ctp néven
<h2>Nem tudtam elmenteni a fájlt</h2> <p>Nem tudtam elmenteni a(z) <?php echo $file ?> fájlt a lemezre.</p>
<h2>Nem tudtam elmenteni a fájlt</h2><p>Nem tudtam elmenteni a(z) <?php echo $file ?> fájlt a lemezre.</p>
és dobjunk egy hibát a Vezérlőben / Komponensben
$this->cakeError('nemMentettFile', array('file'=>'aFajlNeve'));
$this->cakeError('nemMentettFile', array('file'=>'aFajlNeve'));
Az alapértelmezett működés szerint a $this->__outputMessage(<view-filename>) csak megjeleníti a Nézetet a views/errors/<view-filename>.ctp-ban. Ha szeretnéd felülbírálni ezt a viselkedést újra tudod definiálni a __outputMessage($template)-tet az AppError osztályodban.
