CakePHP Sanitize für alle Controller
Ich mag es einfach und nutze dabei sehr häufig den AppController um mir immer wiederkehrende Aufgaben zu sparen. Sanitize ist fast immer notwendig um die Benutzereingaben zu säubern und auf die Verwendung in Datenbank Queries vorzubereiten. Hier nun ein kleiner Tip wie man sich das ständige escaping und cleaning in den Actions spart:
class AppController extends Controller
{
var $cleandata = array();
var $helpers = array('Html', 'Form', 'Javascript', 'Time', 'Text');
function beforeFilter() {
if(!empty($this->data)) {
uses('sanitize');
$sanitize = new Sanitize();
$this->cleandata = $sanitize->clean($this->data);
}
}
}
Also wenn wir Daten haben (nicht empty), lade die Sanitize Bibliothek (uses) und schreibe das gesäuberte Array in cleandata.
Nun haben wir $this->data und $this->cleandata in jedem Controller zur Verfügung. Das folgende Beispiel stammt aus dem UsersController:
function signup() {
if(!empty($this->data)) {
if($this->User->create($this->cleandata) && $this->User->validates())
{
echo 'valid!'; // save data .. etc..
}
}
}
Ihr könnt natürlich auch !empty($this->cleandata) verwenden. Mein Beispiel soll nur zur Veranschaulichung dienen.
