4.3 Hibakezelés

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

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]);
  1. $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');
  1. $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'));
  1. $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 {
}	
?>
  1. <?php
  2. class AppError extends ErrorHandler {
  3. }
  4. ?>

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');
}
  1. function nemMentettFile($params) {
  2. $this->controller->set('file', $params['file']);
  3. $this->_outputMessage('nem_mentett_file');
  4. }

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>
  1. <h2>Nem tudtam elmenteni a fájlt</h2>
  2. <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')); 
  1. $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.