Kategorien
Yii Framework

Yii AR Search mit Relations Attribute Has_Many

Um eine Suche auch über die Relationen einer Active Record Klasse zu realisieren, muss Folgendes beachtet werden:

1. Die Relation muss vorhanden sein:

 public function relations()
    {
            'categories' => array(self::HAS_MANY, 'place_id', 'category_id'),

2. Die Relation muss suchbar sein:

public function rules()
    {
            array('name, categories', 'safe', 'on' => 'search'),

3. In der Suchfunktion muss folgender Code eingefügt werden. Das OR ist dabei optional aber wichtig, wenn man sich wundert, dass keine Ergebnisse angezeigt werden in der View.

  public function findPlaces($searchTerm)
    {
        $criteria = new CDbCriteria;

        $criteria->compare('name', $this->name, true, 'OR');
        $criteria->with = array('categories' => array("together" => true));
        $criteria->compare('categories.name', $searchTerm,true, 'OR');

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }
Kategorien
WordPress Yii Framework

WordPress Integration in Yii Projekt

Wenn man einen WordPress Blog in das Yii Framework intgrieren will und das Layout der Seite behalten will, bietet WordPress die Möglichkeit, die WordPress API zu benutzen ohne ein Theme erstellen zu müssen.

Der Blog/News Bereich soll unter der Adresse: foo.com/news/ erreichbar sein.

WordPress hochladen

WordPress kann wie gewohnt installiert werden und sollte in der Ordner-Hierachie in folgendes Verzeichnis auf selbr Ebene, wie das Yii-Projekt entpackt werden:

yii-project
  assets
  protected
wordpress

Als Datenbank sollte die selber benutzt werden, wie das Yii-Projekt und alle Worpdress-Tabellen sollten ein Prefix erhalten (standardmäßig „wp_“ in der wp-config).

Nachdem man die wp-config angepasst hat, muss noch das Routing von Yii angepasst werden vor der Installation von WordPress.

Yii Controller anlegen

Kategorien
Yii Framework

Yii Yiic Cronjob Permission Denied

Wer das Yiic-Tool zum Starten von Cronjobs benutzt und sich wundert, warum diese nicht ausgeführt werden, der sollte checken, ob der Cronjob korrekt angegeben ist:

php /var/www/vhosts/foo/bar/protected/yiic updateSomething

Ansonsten gibt es einen Fehler wie:

full_path/protected/yiic: Permission denied
Kategorien
Yii Framework

Die besten Yii-Extensions

Das Yii-Framework zeichnet sich besonders durch seinen eleganten Code und seine Vielzahl an Plugins (Extensions) aus.
Es gibt ein eigenes Extensions-Directory, indem für fast jeden Anwendungsfall eine passende Extension von Usern bereit gestellt wird.

Die besten Yii-Extensions

  1. Yii-Bootstrap: ein Yii-Wrapper für das Front-End Framework Twitter Bootstrap mit einer sehr guten Dokumentation
  2. Yii-User: ein Modul, welches das Login, die Registrierung, die Passwort-Vergessen-Funktion und die User-Profil-Seiten bereit stellt
  3. YiiMailer: HTML-Mail versenden mit PHPMailer, die Yii Views können für das Layout verwendet werden
  4. eclientscript: Minify CSS und Javascript Files
  5. carjson: ein Javascript Mapper für PHP Active Record Klassen

Worauf man achten sollte

Wenn man Extensions verwendet in seinem Projekt, solte man darauf achten, dass die Extension

  • weiter gepflegt wird. Dies kann man daran erkennen, ob es ein „Last updated“-Datum in diesem oder im letzten Jahr gab und sich dieses vom „Created on“-Datum unterscheidet
  • die Bewertungen gut und zahlreich sind
  • eine gute und aktuelle  Dokumentation vorhanden ist
Kategorien
Yii Framework

Integration von Vendor-Bibliotheken in das Yii Framework

Für die Nutzung von Fremd-Bibliotheken wie Facebook for PHP SDK innerhalb des Yii-Frameworks sieht die Ordner-Struktur den Ordner vendors vor in protected/vendors.
Dorthin können in Bibliotheken in einen eigenen Unterordner kopiert werden.
Für die Nutzung der Bibliothek gibt es 2 Möglichkeiten:

Die Einbindung in das Autoloading

Diese hat den Vorteil, dass sich nciht mehr um das Einbinden der Bibliothek bei der Benutzung an verschiedenen Stellen innerhalb der Applikation gekümmert werden muss.
Der Nachteil ist, dass das Autoloading von allen Komponenten länger dauert, weil ein Pfad mehr gescannt werden muss nach der passenden Klasse.
Dazu kann in der config/main.php angepasst werden:

 'import'=>array(
    'application.vendors.facebook.*',
 ),

Direktes Laden bei Benutzung der Bibliothek

Wenn die Bibliothek nur an überschaubaren Zeitpunkten benutzt wird lohnt es sich die Bibliothek zur Laufzeit direkt zu laden mit dem import Befehl:

Yii::import('application.vendors.facebook.facebook);

oder direkt mit

require_once 'vendors/myFacebook/facebook.php';

einzubinden, besonders , wenn Dateiname und Klassenamen nicht übereinstimmen, was eine Konvention des Yii-Frameworks ist.

Kategorien
Yii Framework

Yii Access Controll mit Rollen System

Ein sehr mächtiges Rollensystem für authentifizierteUser bringt Yii von Hause aus mit: CAuthManager.

Damit lassen sich User Rollen abbilden wie z.B.

  1. Redakteure dürfen schreiben und nur Ihre eigenen Posts ändern
  2. Hauptredakteure dürfen alle Posts ändern
  3. Leser dürfen Posts lesen
  4. Admins dürfen alles
  5. unangemeldete User dürfen nichts 🙂

1. Schritt: Installation

Dokumentation: Role-Based Access Control

config/main.php:

'components' => array(
        'authManager'=>array(
            'class'=>'CDbAuthManager',
            'connectionID'=>'db',
        ),
),

Kategorien
Yii Framework

Yii User hinzufügen von User Attributen

Wenn man mit dem Yii-User Modul eigene Attribute wie Strasse und Hausnummer hinzufügen will, kann man dies tun, indem man:

  1. eine neue Spalte in der Datenbank Tabelle profiles hinzufügt, z.B. namens street
  2. eine neue Zeile in der Datenbank Tabelle profiles_field hinzufügt:
3 street Strasse VARCHAR 80 10 1 Ungültige Strasse 2 3

Optionale Attribute kennzeichnen

Aufgrund der fehlenden Dokumentation des Moduls muss man ziemlich ausprobieren, um optionale Attribute zu kennzeichnen. Optionale Attribute kann man erreichen durch das Setzen von required auf 2 in der entsprechenden Zeile in der profiles_field Tabelle.

Kategorien
Yii Framework

Yii Pfad-Helfer Klasse

Sehr praktisch für die Verwendung von Pfaden im YII-Framework ist die folgende Klasse, die einen einfacher Zugriff auf die Pfade gibt und gleichzeitig die Anwendung flexibel hält bei Änderungen:

class Paths
{

    public static function getImagesPath()
    {
        return Yii::app()->request->baseUrl .DIRECTORY_SEPARATOR."images".DIRECTORY_SEPARATOR;
    }
    public static function getRootDirectory()
    {
        return Yii::getPathOfAlias('application');
    }
    public static function getWebRootDirectory()
    {
        return Yii::getPathOfAlias('webroot');
    }
    public static function getExtensionDirectory()
    {
        return Yii::getPathOfAlias('ext');
    }
    public static function getViewDirectory()
    {
        return Paths::getRootDirectory().DIRECTORY_SEPARATOR."views".DIRECTORY_SEPARATOR;
    }
    public static function getDataDirectory()
    {
        return Paths::getRootDirectory().DIRECTORY_SEPARATOR."data".DIRECTORY_SEPARATOR;
    }
}
Kategorien
Yii Framework

PhpStorm für Yii konfigurieren

Für das Coden von Yii mit PhpStorm sollte aus Effizienzgründen folgenden Einstellungen vorgenommen werden:

Code Completition aktivieren

Eine Anleitung gibt es hier.

Das Yiistorm Plugin installieren

Es dient zur einfachen Navigation von Controller zu View und mehr. Es muss lediglich die YiiStorm.jar in das PHPStorm Verzeichnis kopiert werden und die IDE neu gestartet werden.

Danach kann man z.B. direkt zum view File navigieren mit Strg+Mausklick in einem Controller-Aufruf wie:

        $this->render('index');
Kategorien
Yii Framework

Yii Installation und Hallo Welt

yiiDas Yii Framework für PHP ist zur Zeit das beste Framework für Web Applikationen, wenn man der Meinungen von vielen Freelancern und phpframeworks.com vertraut.

Die Vorteile von Yii

  • einfacher Einstieg: keine neue Templating oder Konfigurationssprache nötig
  • einfache Konfiguration durch Default Werte: die Konfiguration muss nur bei speziellen Aufgaben angepasst werden (convention over configuration)
  • High Perfomance optimiert
  • sehr hohe Code Wiederverwendbarkeit
  • MVC
  • Extensions: unbegrenzte Anzahl von Komponenten, die einfach installiert werden können, wie z.B. eine User-Verwaltung mit Login, Registrierung usw. yii-user extension
  • RESTful und SOAP Web Services
  • DAO, Active Record, Caching, I18N Mehrsprachigkeit

Unterstütze Datenbank Systeme

  • MySQL ab 4.1.
  • PostgresSQL 7.3.
  • SQLite 2 und 3
  • Microsoft SQL Server ab 2000er Version
  • Oracle

Die Installation von Yii