PHP:Cakephp-Framework: Unterschied zwischen den Versionen

Aus Alexander's Wiki
Zeile 79: Zeile 79:


== Internationalisierung ==
== Internationalisierung ==
Sprachinformationen in ''/app/locale/deu/''
{| class="wikitable"
{| class="wikitable"
|-
|-
Zeile 96: Zeile 97:
|-
|-
| LC_ALL || Überschreibt alle Angaben aus den anderen Kategorien
| LC_ALL || Überschreibt alle Angaben aus den anderen Kategorien
|-
| Beispiel || Beispiel
|}
|}


Im Model ''(erzeugt validation.pot)'':
Im Model ''(erzeugt validation.pot)'':
Zeile 137: Zeile 137:
     }
     }
</source>
</source>


== Validierung ==
== Validierung ==

Version vom 14. Februar 2014, 10:31 Uhr


Einstellungen der Tools

Wenn die Webseite nicht nur Englisch, sondern auch andere Sprachen verwenden soll, dann ist es notwendig einen einheitlichen Zeichensatz festzulegen. Wenn man das nicht macht, können Sonderzeichen falsch dargestellt werden. Meist wird die UTF-8-Zeichenkodierung dafür verwendet. Im Folgenden zeige ich, wie man die Tools, die ich verwendet auf den UTF-8-Zeichensatz umstellt.

Tools Einstellung
Browser
<meta charset="utf-8" /> (HTML5)
  bzw.
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> (XHTML)
Datenbank (mysql)
CREATE TABLE user (
    id               INT UNSIGNED AUTO_INCREMENT,
    username         VARCHAR(50) NOT NULL,
    password         VARCHAR(255) NOT NULL,
    modified         DATETIME DEFAULT NULL,
    created          DATETIME DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; --InnoDB ist langsamer
IDE (Netbeans) Rechtsklick auf das Projekt --> Properties --> Sources/Encoding
IDE (Eclipse) Window/Preferences --> General/Editors/Text Editors/Spelling --> Encoding
Editor (jedit) Extras/Globale Optionen --> Zeichenkodierung --> Standardzeichenkodierung
Editor (notepad++) Kodierung
Spracheditor (poedit) Wenn ein Katalog geöffnet ist. Katalog/Eigenschaften --> Zeichensatz
SQL-Developer Extras/Voreinstellungen --> Umgebung --> Codierung

Installation

git clone git://github.com/cakephp/cakephp.git

In das Webserververzeinis kopieren und die URL aufrufen.

CakePHP-Webseite zur Installation


Aufbau der Webseite

Wie die Webseite aufgebaut wird, beschreibt die Datei app/Views/Layout/default.ctp. Den HTML-Code, den die Views zu den entsprechenden Controllern erzeugen wird durch:

  echo $this->fetch('content');

eingefügt.

Man kann weitere dieser Einfügestellen erstellen indem man in einer View einen Abschnitt definiert, der wie folgt aussehen würde:

  $this->start('Abschnitt');
    //erzeuge HTML-Text
  $this->end();

Auf diesen Namen bezieht man sich dann in der app/Views/Layout/default.ctp durch Einfügen von:

  echo $this->fetch('Abschnitt');


Speichern und Laden von Daten

Die ID einer neu gespeicherten Zeile erhalten

if($this->MyModel->save($this->data)){
    //the id is here
    echo $this->MyModel->id;
}


Internationalisierung

Sprachinformationen in /app/locale/deu/

Kategorie Beschreibung
LC_MESSAGES Übersetzung von Ausgaben an den Benutzer
LC_CTYPE Spezielle Sonderzeichen einer Region
LC_NUMERIC Lokale Formatierung von Zahlen
LC_TIME Lokale Formatierung von Zeitangaben
LC_COLLATE Angabe für den Umgang mit Zeichenketten, z.B. Sortierung
LC_MONETARY Lokale Währungsangaben
LC_ALL Überschreibt alle Angaben aus den anderen Kategorien


Im Model (erzeugt validation.pot):

    public $validationDomain = 'validation';
    
    public $validate = array(
        'username' => array(
            'alphaNumeric' => array(
                'rule'     => 'alphaNumeric',
                'required' => true,
                'message'  => 'Alphabets and numbers only',
                'last'    => false
            ),
            'between' => array(
                'rule'    => array('between', 5, 15),
                'message' => 'Username should be between %d and %d characters'
            )
        ),
    );

Im Helper (kommt in default.pot):

    private static $subSets = array();

    public function __construct() {
        self::$subSets = array(
            'deviceUpload' => array('icon' => 'icon-broadcast', 'color' => 'bg-amber',
                'destination' => array('controller' => 'basedatas', 'action' => 'device_config_load'),
                'text' => __('Device upload')
            ),
        );
    }

    public function getSubSet($name) {
        return BaseDataHelper::$subSets[$name];
    }

Validierung

Im Controller
function x() {                             // Funktionsname ersetzen
  $this->Model->set($this->request->data); // Model ersetzen
  if ($this->request->is('post')) {
     if ($this->Model->validates()) {       // ist validiert
        $this->Model->create();
        if ($this->Model->save($this->request->data)) {
           $this->Session->setFlash(__('saved'));
           $this->redirect(array('controller' => 'ctrl', 'action' => 'act'));
        }
        $this->Session->setFlash(__('failed'));
     } else {                               // Validierung fehlgeschlagen
        //$errors = $this->User->validationErrors;
     }
  }
  ...
}

Sprachkonstrukte

For-Schleifen
foreach ($fields as $i => $field) {
  ...   // $i gibt immer die Bezeichnung oder die Nummer des Array-Elements aus.
  ...   // $field ist das aktuelle Array-Element.
}


Input-Fields
$param = array(
  'autocomplete' => off,  // automatisches Ausfüllen durch Browser verhindern
  'readonly' => 'readonly',
  'disabled' => 'disabled',
  'selection' => $selection,
  'emptySelectable' => true,

  'id' => $id,
  'label' => $label,
  'type' => $type,        // z.B. password, text, file
);

$this->Form->input($field['id'], $param);