Yii
Yii: Anzahl der Zeilen im Grid per DropDown auswählen (pagesize)
Dienstag, 10.01.2012Um in einer Yii Tabelle (“zii.widgets.grid.CGridView”) die Anzahl der angezeigten Zeilen durch den Benutzer dynamisch auswählen zu lassen, zeigt Ihnen dieser Artikel eine Lösung:
Beispielansicht:

Dafür sind in drei Dateien kleine Anpassungen notwendig:
(1) Im Controller (“protected/controllers/xxxController.php”):
1 2 3 4 5 6 7 8 | public function actionAdmin() { // [...] if (isset($_GET['pageSize'])) { Yii::app()->user->setState('pageSize',(int)$_GET['pageSize']); unset($_GET['pageSize']); } // [...] } |
(2) Im Model (“protected/models/xxx.php”);
1 2 3 4 5 6 7 8 9 | public function search() { // [...] return new CActiveDataProvider(get_class($this), array( "pagination" => array( "pageSize" => Yii::app()->user->getState("pageSize",Yii::app()->params['defaultPageSize']), ), "criteria" => $criteria, )); } |
(3) Im View (“protected/views/xxx/admin.php”):
1 2 3 4 5 6 7 8 9 10 11 12 13 | $pageSize=Yii::app()->user->getState('pageSize',Yii::app()->params['defaultPageSize']); $this->widget('zii.widgets.grid.CGridView', array( "id" => "xxx-grid", "dataProvider" => $model->search(), // [...] array( "class" => "CButtonColumn", "header" => CHtml::dropDownList('pageSize',$pageSize,array(10=>10,20=>20,50=>50,100=>100,999999=>"Alles"),array( "onchange" => "$.fn.yiiGridView.update('xxx-grid',{ data:{pageSize: $(this).val() }})", )), ), ), )); |
Bitte nicht vergessen, bei Schritt (3) auch den Namen der Tabelle (im Beispiel “xxx-grid”) auch im “onChange” Event anzupassen. Ansonsten reagiert die Anzeige nicht auf den Wechsel der Auswahl und bleibt stets auf der Standard-Anzahl.
Yii: Passwörter automatisch verschlüsselt in der Datenbank speichern (Beispiel: mySQL & md5)
Montag, 09.01.2012Es ist sehr sinnvoll, ein Passwort vor der Speicherung in die Datenbank automatisch zu verschlüsseln. Dadurch sind diese vor allzu leichtem Auslesen geschützt. Dabei muss auf die Möglichkeit hingewiesen werden, dass natürlich auch MD5 codierte Passwörter nicht zu 100% vor dem Entschlüsseln bzw. Auslesen sicher sind. Es gibt z.Bsp. Tabellen mit gängigen und kurzen Codes – dann hilft auch die beste Codierung wenig.
Als zusätzlichen Schutz sollte man daher einen “Salt” String zusätzlich vor das Passwort kopieren – dadurch wird das Passwort deutlich länger und damit schwerer zu entschlüsseln.
Am Beispiel des PHP Frameworkes Yii stelle ich die automatisch Verschlüsselung vor.
Die Model-Datei (“../protected/models/xyz.php”) muss dafür um die “beforeSave”-Funktion erweitert werden:
1 2 3 4 | public function beforeSave() { $this->password = md5($this->password); return parent::beforeSave(); } |
Für die zusätzliche Verlängerung des Passwortes mit einem “salt” string:
1 2 3 4 | public function beforeSave() { $this->password = md5(Yii::app()->params["salt"] . $this->password); return parent::beforeSave(); } |
Der “salt” string kann dann in der Konfiguration (“../protected/config/main.php”) festgelegt werden. Dieser darf nach dem Speichern von Passwörtern nicht mehr verändert werden, denn ansonsten können die gespeicherten Passwörter nicht mehr vergleichen werden !
1 2 3 4 5 | "params" => array( "adminEmail" => "xxx@yyy.zz", // "salt" string "salt" => "3HpwFE.bQ(GhyTrc=)RsS.E#584qrph-ZgGyeXfx", ), |
Yii: Verbindung zur mySQL Datenbank herstellen (connectionstring)
Freitag, 06.01.2012Um im PHP Framework Yii eine Verbindung zu einer lokalen mySQL Datenbank herzustellen, nutzen Sie folgende Einstellungen in der Datei “../protected/config/main.php”:
1 2 3 4 5 6 7 8 9 | "db" => array( "class" => "CDbConnection", "connectionString" => "mysql:host=localhost;dbname=DBNAME", "username" => "UNAME", "password" => "PWORD", "tablePrefix" => "PFIX", // optional "charset" => "utf8" // optional // "emulatePrepare" => true, // optional ), |
Bitte ersetzen Sie:
| DBNAME | Name Ihrer mySQL Datenbank |
| UNAME | Name des Datenbankbenutzers |
| PWORD | Passwort des Datenbankbenutzers |
| PFIX | Evtl. den Prefix der Datenbanktabellennamen (optional) |
Meist finden Sie in dieser Datei bereits einen vorbereitetn Berich für die mySQL Verbindung.