diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 13bd1526e..989ab78d6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,16 +16,6 @@ We only ask you to use a couple of conventions: - To fix or update a document we use the `fix/` branch name convention, where `` is the name of the document that you want to fix or update; -If you want to work on a document in a language different from English, please -include the name of the language in the branch name. - -For instance, if you want to propose a new document in Italian you have to use the -following naming convention: `feature/it/`, where `it` is Italian. -The same convention is applied on the fix or update: `fix/it/`. - -You can find the supported languages in the `docs/languages` subdirectory. - - ## DOCUMENT FORMAT The Zend Framework 2 documentation is written using the @@ -65,39 +55,4 @@ To render the documentation in HTML format: The HTML documentation will be generated in `docs/_build/html`. -By default, the `make html` command renders the documentation in English. -To render in a different language you have to specify the LANG in the command line. - -For instance, to render the documentation in Italian (`it`), execute the following command: - - make html LANG=it - -You can find the supported languages in the `docs/languages` subdirectory. - -After you've made changes to .rst files, you can run `make html` again to update HTML for changed pages. - -## TRANSLATION - -If you want to begin a new translation, you need to create a new subdirectory in the 'docs/languages' directory. -The name of the directory must be the [ISO 639-1 code](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) -for your language. - -The compilation process takes all English files in the directory 'docs/languages/en' and overwrites them with those -in your language directory if it exists with the same filename in the same tree. If you want to translate a file, -copy the English file to your directory and start the translation. When the translation is completed, you have -to add a revcheck tag like '.. EN-Revision: 1a526e4' at the top of the file. '1a526e4' are the 7 first characters -of the English commit on which your translation is based. This helps the maintainer of the translation to know if -there exist one or multiple modifications of the English file that need to be added to the translation. - -All revcheck tags have been initialized to 'none'. This indicates to all maintainers of translations that it needs -at least one review of the file after the automatic migration from ZF1 (Docbook to reST). We will provide in a -next future a visual tool for translators to be able to detect non-translated files or outdated files (based on -the revcheck tag). - -In this philosophy, you can translate an image if you want. But there are 2 specific files at the -root of the English directory that you must not translate: - - 'index.rst' - - 'snippets.rst' - -All sentences in these files that need a translation are handled by the reST substitution syntax. You can find them -in the 'translated-snippets.rst' file. +After you've made changes to .rst files, you can run `make html` again to update HTML for changed pages. \ No newline at end of file diff --git a/README.md b/README.md index 033e8bddf..f61015579 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ You can read the development online documentation in [http://zf2.readthedocs.org](http://zf2.readthedocs.org/en/latest/index.html). You can read the last stable documentation in -[http://packages.zendframework.com/docs/latest/manual/en/](http://packages.zendframework.com/docs/latest/manual/en/). +[http://packages.zendframework.com/docs/latest/manual/](http://packages.zendframework.com/docs/latest/manual/). ## BUILDING DOCUMENTATION diff --git a/docs/Makefile b/docs/Makefile index 2d884e348..2806a62c0 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -6,38 +6,22 @@ SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build -LANG = en CALIBRE ?= ebook-convert # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) tmp/$(LANG) +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) tmp/ # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext pre-build: - @rm -rf tmp/$(LANG) - @mkdir -p tmp/$(LANG) - @cp -Rp languages/en/* tmp/$(LANG)/ -ifneq ($(LANG),en) - @for f in $$(cd languages/$(LANG) && find . -type f \( ! -iname ".*" \) | sort); do \ - if [ -f languages/en/$$f ]; then \ - if [ $$(stat -c %s languages/$(LANG)/$$f) = $$(stat -c %s languages/en/$$f) ]; then \ - echo "The file '$$f' seems to be exactly the same as English one, perhaps it could be deleted"; \ - fi; \ - cp languages/$(LANG)/$$f tmp/$(LANG)/$$f; \ - else \ - echo "The file '$$f' is not anymore in English directory, check if it's renamed or deleted"; \ - fi; \ - done -endif - @cp languages/en/conf.py tmp/$(LANG)/conf.py - @sed -i.bak 's/#language = None/language = "$(LANG)"/' tmp/$(LANG)/conf.py - @rm -f tmp/$(LANG)/conf.py.bak + @rm -rf tmp/ + @mkdir -p tmp/ + @cp -Rp src/* tmp/ # Process latex to strip non-ascii characters and perform other necessary # changes @@ -186,14 +170,3 @@ doctest: pre-build @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." -add-missing-revchecktag: -ifneq ($(LANG),en) - @for f in $$(cd languages/$(LANG) && find . -type f \( ! -iname ".*" \)); do \ - if [ -f languages/en/$$f ]; then \ - rev=$$(head -n 3 languages/$(LANG)/$$f | grep -i EN-Revision | cut -f2 -d ':' | tr -d ' '); \ - if [ "$$rev" = "" ]; then \ - echo ".. EN-Revision: none"|cat - languages/$(LANG)/$$f > /tmp/zftmpfile && mv /tmp/zftmpfile languages/$(LANG)/$$f; \ - fi; \ - fi; \ - done -endif diff --git a/docs/languages/de/.gitignore b/docs/languages/de/.gitignore deleted file mode 100644 index 4e971283f..000000000 --- a/docs/languages/de/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -conf.py - diff --git a/docs/languages/de/modules/zend.authentication.adapter.dbtable.rst b/docs/languages/de/modules/zend.authentication.adapter.dbtable.rst deleted file mode 100644 index a53f0cc85..000000000 --- a/docs/languages/de/modules/zend.authentication.adapter.dbtable.rst +++ /dev/null @@ -1,290 +0,0 @@ -.. EN-Revision: none -.. _zend.authentication.adapter.dbtable: - -Datenbanktabellen Authentifizierung -=================================== - -.. _zend.authentication.adapter.dbtable.introduction: - -Einführung ----------- - -``Zend\Auth\Adapter\DbTable`` bietet die Möglichkeit, sich gegenüber Zeugnissen zu authentifizieren, die in einer -Datenbank Tabelle gespeichert sind. Weil ``Zend\Auth\Adapter\DbTable`` eine Instanz von -``Zend\Db\Adapter\Abstract`` benötigt, die an den Konstruktor übergeben wird, ist jede Instanz an eine spezielle -Datenbank Verbindung verknüpft. Andere Konfigurationsoptionen können durch den Konstruktor gesetzt werden und -durch die Methoden der Instanz. Eine für jede Option. - -Die vorhandenen Konfigurationsoptionen beinhalten: - -- **tableName**: Das ist der Name der Datenbanktabelle, welche die Authentifikations Zeugnisse enthält, und gegen - die jene Datenbank-Authentifikations-Abfrage durchgeführt wird. - -- **identityColumn**: Ist der Name der Spalte der Datenbanktabelle, welche die Identität repräsentiert. Die Spalte - der Identität muß eindeutige und einmalige Werte enthalten, wie einen Benutzernamen oder eine Email Adresse. - -- **credentialColumn**: Das ist der Name der Spalte der Datenbanktabelle, die verwendet wird, um die Zeugnisse zu - repräsentieren. Bei einem einfachen Identitäts- und Passwort-Authentifizierungs-Schema korrespondieren die - Zeugnisse mit dem Passwort. Siehe auch die ``credentialTreatment`` Option. - -- **credentialTreatment**: In vielen Fällen sind Passwörter und andere sensitive Daten verschlüsselt, gehasht, - kodiert, gesalted, verschleiert oder auf andere Weise durch irgendeine Funktion oder einen Algorithmus behandelt. - Durch die Spezifikation eines parametrisierbaren Behandlungsstrings mit dieser Methode, wie '``MD5(?)``' oder - '``PASSWORD(?)``', könnte ein Entwickler beliebiges *SQL* an den Eingabe- Zeugnis-Daten anwenden. Da diese - Funktionen der darunter liegenden *RDBMS* speziell gehören, sollte das Handbuch der Datenbank auf das - Vorhandensein solcher Funktionen im eigenen Datenbank System geprüft werden. - -.. _zend.authentication.adapter.dbtable.introduction.example.basic_usage: - -.. rubric:: Grundsätzliche Verwendung - -Wie bereits in der Einführung beschrieben benötigt der ``Zend\Auth\Adapter\DbTable`` Konstruktor eine Instanz von -``Zend\Db\Adapter\Abstract`` die als Datenbank Verbindung fungiert zu welcher die Instanz des -Authentifizierungs-Adapters gebunden ist. Zuerst sollte die Datenbankverbindung erstellt werden. - -Der folgende Code erstellt einen Adapter für eine In-Memory Datenbank, erstellt ein einfaches Datenbankschema, und -fügt eine Zeile ein gegen die später eine Authentifizierungs-Abfrage durchgeführt werden kann. Dieses Beispiel -benötigt die *PDO* SQLite Erweiterung: - -.. code-block:: php - :linenos: - - // Erstellt eine In-Memory SQLite Datenbankverbindung - $dbAdapter = new Zend\Db\Adapter\Pdo\Sqlite(array('dbname' => - ':memory:')); - - // Erstellt eine einfache Datenbank-Erstellungs-Abfrage - $sqlCreate = 'CREATE TABLE [users] (' - . '[id] INTEGER NOT NULL PRIMARY KEY, ' - . '[username] VARCHAR(50) UNIQUE NOT NULL, ' - . '[password] VARCHAR(32) NULL, ' - . '[real_name] VARCHAR(150) NULL)'; - - // Erstellt die Tabelle für die Authentifizierungs Zeugnisse - $dbAdapter->query($sqlCreate); - - // Erstellt eine Abfrage um eine Zeile einzufügen für die eine - // Authentifizierung erfolgreich sein kann - $sqlInsert = "INSERT INTO users (username, password, real_name) " - . "VALUES ('my_username', 'my_password', 'My Real Name')"; - - // Daten einfügen - $dbAdapter->query($sqlInsert); - -Mit der Datenbankverbindung und den vorhandenen Tabellendaten, kann eine Instanz von ``Zend\Auth\Adapter\DbTable`` -erstellt werden. Die Werte der Konfigurationsoptionen können dem Konstruktor übergeben werden, oder als Parameter -der setzenden Methoden nach der Instanziierung: - -.. code-block:: php - :linenos: - - // Die Instanz mit Konstruktor Parametern konfiurieren... - $authAdapter = new Zend\Auth\Adapter\DbTable( - $dbAdapter, - 'users', - 'username', - 'password' - ); - - // ...oder die Instanz mit den setzenden Methoden konfigurieren - $authAdapter = new Zend\Auth\Adapter\DbTable($dbAdapter); - $authAdapter - ->setTableName('users') - ->setIdentityColumn('username') - ->setCredentialColumn('password'); - -An diesem Punkt ist die Instanz des Authentifizierungsadapters bereit um Authentifierungsabfragen zu akzeptieren. -Um eine Authentifierungsabfrage zu formulieren, werden die Eingabezeugnis Werte dem Adapter vor dem Aufruf der -``authenticate()`` Methode, übergeben: - -.. code-block:: php - :linenos: - - // Die Eingabezeugnis Werte setzen (z.B. von einem Login Formular) - $authAdapter - ->setIdentity('my_username') - ->setCredential('my_password'); - - // Die Authentifizierungsabfrage durchführen, das Ergebnis speichern - $result = $authAdapter->authenticate(); - -Zusätzlich zum Vorhandensein der ``getIdentity()`` Methode über das Authentifizierungs Ergebnisobjekt, -unterstützt ``Zend\Auth\Adapter\DbTable`` auch das empfangen der Tabellenzeile wenn die Authentifizierung -erfolgeich war: - -.. code-block:: php - :linenos: - - // Die Identität ausgeben - echo $result->getIdentity() . "\n\n"; - - // Die Ergebniszeile ausgeben - print_r($$authAdapter->getResultRowObject()); - - /* Ausgabe: - my_username - - Array - ( - [id] => 1 - [username] => my_username - [password] => my_password - [real_name] => My Real Name - ) - */ - -Da die Zeile der Tabelle die Zeugnis Daten enthält ist es wichtig diese Werte gegenüber unberechtigten Versuchen -abzusichern. - -.. _zend.authentication.adapter.dbtable.advanced.storing_result_row: - -Fortgeschrittene Verwendung: Ein DbTable Ergebnis Objekt dauerhaft machen -------------------------------------------------------------------------- - -Standardmäßig gibt ``Zend\Auth\Adapter\DbTable`` die unterstützte Identität an das Auth Objekt bei -erfolgreicher Authentifizierung zurück. Ein anderes Verwendungs-Szenario, bei dem Entwickler ein Identitäts -Objekt, welches andere nützliche Informationen enthält, in den dauerhaften Speichermechanismus von ``Zend_Auth`` -abspeichern wollen, wird durch die Verwendung der ``getResultRowObject()`` Methode gelöst die ein **stdClass** -Objekt zurück gibt. Der folgende Code Abschnitt zeigt diese Verwendung: - -.. code-block:: php - :linenos: - - // Mit Zend\Auth\Adapter\DbTable authentifizieren - $result = $this->_auth->authenticate($adapter); - - if ($result->isValid()) { - - // Die Identität als Objekt speichern wobei nur der Benutzername und - // der echte Name zurückgegeben werden - $storage = $this->_auth->getStorage(); - $storage->write($adapter->getResultRowObject(array( - 'username', - 'real_name' - ))); - - // Die Identität als Objekt speichern, wobei die - // Passwort Spalte unterdrückt wird - $storage->write($adapter->getResultRowObject( - null, - 'password' - )); - - /* ... */ - - } else { - - /* ... */ - - } - -.. _zend.authentication.adapter.dbtable.advanced.advanced_usage: - -Fortgeschrittene Verwendung durch Beispiele -------------------------------------------- - -Wärend der primäre Zweck von ``Zend_Auth`` (und konsequenter Weise ``Zend\Auth\Adapter\DbTable``) die -**Authentifizierung** und nicht die **Authorisierung** ist, gibt es ein paar Instanzen und Probleme auf dem Weg -welche Art besser passt. Abhängig davon wie man sich entscheidet ein Problem zu beschreiben, macht es manchmal -Sinn, das was wie ein Authorisierungsproblem aussieht im Authentifizierungs-Adapter zu lösen. - -Mit dieser Definition, hat ``Zend\Auth\Adapter\DbTable`` einige eingebaute Mechanismen die für zusätzliche Checks -wärend der Authentifizierungszeit angepasst werden können, um einige übliche Benutzerprobleme zu lösen. - -.. code-block:: php - :linenos: - - // Der Feldwert des Status eines Accounts ist nicht gleich "compromised" - $adapter = new Zend\Auth\Adapter\DbTable( - $db, - 'users', - 'username', - 'password', - 'MD5(?) AND status != "compromised"' - ); - - // Der aktive Feldwert des Accounts ist gleich "TRUE" - $adapter = new Zend\Auth\Adapter\DbTable( - $db, - 'users', - 'username', - 'password', - 'MD5(?) AND active = "TRUE"' - ); - -Ein anderes Szenario kann die Implementierung eines Saltingmachanismus sein. Salting ist ein Ausdruck der auf eine -Technik verweist welche die Sicherheit der Anwendung sehr stark erhöht. Sie basiert auf der Idee dass das Anfügen -von zufälligen Strings bei jedem Passwort es unmöglich macht eine erfolgreiche Brute-Force Attacke auf die -Datenbank durchzuführen bei der vorberechnete Hashwerte aus einem Verzeichnis genommen werden. - -Hierfür muß die Tabelle so modifiziert werden das Sie unseren Salt-String enthält: - -.. code-block:: php - :linenos: - - $sqlAlter = "ALTER TABLE [users] " - . "ADD COLUMN [password_salt] " - . "AFTER [password]"; - - $dbAdapter->query($sqlAlter); - -Hier ist ein einfacher Weg um einen Salt String für jeden Benutzer bei der Registrierung zu erstellen: - -.. code-block:: php - :linenos: - - for ($i = 0; $i < 50; $i++) { - $dynamicSalt .= chr(rand(33, 126)); - } - -Und nun erstellen wir den Adapter: - -.. code-block:: php - :linenos: - - $adapter = new Zend\Auth\Adapter\DbTable( - $db, - 'users', - 'username', - 'password', - "MD5(CONCAT('" - . Zend\Registry\Registry::get('staticSalt') - . "', ?, password_salt))" - ); - -.. note:: - - Die Sicherheit kann sogar noch mehr erhöht werden indem ein statischer Salt Wert hardcoded in der Anwendung - verwendet wird. Im Falle das die Datenbank korrumpiert wird (z.B. durch eine *SQL* Injection Attacke) aber der - Webserver intakt bleibt sind die Daten für den Angreifer noch immer nicht verwendbar. - -Eine andere Alternative besteht darin die ``getDbSelect()`` Methode von ``Zend\Auth\Adapter\DbTable`` zu verwenden -nachdem der Adapter erstellt wurde. Diese Methode gibt die Instanz des ``Zend\Db\Select`` Objekts zurück welches -verwendet wird um die ``authenticate()`` Methode zu komplettieren. Es ist wichtig anzumerken das diese Methode -immer das gleiche Objekt zurückgibt unabhängig davon ob ``authenticate()`` aufgerufen wurde oder nicht. Diese -Objekt **enthält keine** Identity oder Anmeldeinformationen in sich da diese Werte im Select Objekt wärend des -Ausführens von ``authenticate()`` platziert werden. - -Als Beispiel einer Situation könnte man die ``getDbSelect()`` Methode verwenden um den Status eines Benutzers zu -prüfen, in anderen Worten sehen ob der Account des Benutzers aktiviert ist. - -.. code-block:: php - :linenos: - - // Das Beispiel von oben weiterführen - $adapter = new Zend\Auth\Adapter\DbTable( - $db, - 'users', - 'username', - 'password', - 'MD5(?)' - ); - - // Das Select Objekt (durch Referenz) bekommen - $select = $adapter->getDbSelect(); - $select->where('active = "TRUE"'); - - // Authentifizieren, das stellt sicher das users.active = TRUE - $adapter->authenticate(); - - diff --git a/docs/languages/de/modules/zend.authentication.adapter.digest.rst b/docs/languages/de/modules/zend.authentication.adapter.digest.rst deleted file mode 100644 index 1b3a44aea..000000000 --- a/docs/languages/de/modules/zend.authentication.adapter.digest.rst +++ /dev/null @@ -1,85 +0,0 @@ -.. EN-Revision: none -.. _zend.authentication.adapter.digest: - -Digest Authentication -===================== - -.. _zend.authentication.adapter.digest.introduction: - -Einführung ----------- - -`Digest Authentifizierung`_ ist eine Methode der *HTTP* Authentifizierung welche die `Basis Authentifizierung`_ -verbessert indem ein Weg angeboten wird um Authentifizierungen, ohne die Übermittlung des Passwortes als Klartext -über das Netzwerk, durchzuführen. - -Dieser Adapter erlaubt Authentifizierungen gegen Textdateien die Zeilen enthalten die folgende Basiselemente der -Digest Authentifizierung enthalten: - -- Benutzername, wie z.B. "**joe.user**" - -- Bereich, wie z.B. "**Administrativer Bereich**" - -- *MD5* Hash von Benutzername, Bereich und Passwort, getrennt durch Doppelpunkte - -Die obigen Elemente werden durch Doppelpunkte getrennt, wie im folgenden Beispiel (in dem das Passwort -"**irgendeinPasswort**" ist): - -.. code-block:: text - :linenos: - - irgendeinBenutzer:Irgendein Bereich:fde17b91c3a510ecbaf7dbd37f59d4f8 - -.. _zend.authentication.adapter.digest.specifics: - -Spezifisches ------------- - -Der Digest Authentifizierungs Adapter, ``Zend\Auth\Adapter\Digest``, benötigt verschiedene Eingabeparameter: - -- filename - Der Dateiename gegen den Authentifizierungs-Anfragen durchgeführt werden - -- realm - Digest Authentifizierungs Bereich - -- username - Digest Authentifizierungs Benutzer - -- password - Passwort für den Benutzer des Bereichs - -Diese Parameter müssen vor dem Aufruf von ``authenticate()`` gesetzt werden. - -.. _zend.authentication.adapter.digest.identity: - -Identität ---------- - -Der Digest Authentifizierungs Adapter gibt ein ``Zend\Auth\Result`` Objekt zurück, welches mit der Identität wird -wobei dieses als Arry mit Schlüssel von **realm** und **username** veröffentlicht wird. Die entsprechenden Array -Werte welche diesen Schlüsseln zugeordnet sind korrespondieren mit den Werte die vorher durch den Aufruf von -``authenticate()`` gesetzt wurden. - -.. code-block:: php - :linenos: - - $adapter = new Zend\Auth\Adapter\Digest($filename, - $realm, - $username, - $password); - - $result = $adapter->authenticate(); - - $identity = $result->getIdentity(); - - print_r($identity); - - /* - Array - ( - [realm] => Irgendein Bereich - [username] => irgendeinBenutzer - ) - */ - - - -.. _`Digest Authentifizierung`: http://en.wikipedia.org/wiki/Digest_access_authentication -.. _`Basis Authentifizierung`: http://en.wikipedia.org/wiki/Basic_authentication_scheme diff --git a/docs/languages/de/modules/zend.authentication.adapter.http.rst b/docs/languages/de/modules/zend.authentication.adapter.http.rst deleted file mode 100644 index 5b51c078f..000000000 --- a/docs/languages/de/modules/zend.authentication.adapter.http.rst +++ /dev/null @@ -1,203 +0,0 @@ -.. EN-Revision: none -.. _zend.authentication.adapter.http: - -HTTP Authentication Adapter -=========================== - -.. _zend.authentication.adapter.http.introduction: - -Einführung ----------- - -``Zend\Auth\Adapter\Http`` bietet die am meisten entsprechende Implementation von `RFC-2617`_, `Basis`_ und -`Digest`_ *HTTP* Authentifizierung. Digest Authentifizierung ist eine Methode der *HTTP* Authentifikation welche -die Basis Authentifizierung erweitert indem ein Weg angeboten wird um sich zu Authentifizieren ohne dass das -Passwort im Klartext über das Netzwerk geschickt werden muß. - -**Hauptsächliche Features:** - -- Unterstützt sowohl Basis als auch Digest Authentifizierung. - -- Enthält Aufrufe für alle unterstützten Schemas, damit Klienten mit jedem unterstützten Schema arbeiten - können. - -- Bietet Proxy Authentifizierung. - -- Enthält Unterstützung für die Authentifizierung gegenüber Textdateien und bietet ein Interface für die - Authentifizierung gegenüber anderen Quellen, wie z.B. Datenbanken. - -Es gibt ein paar nennenswerte Features von *RFC-2617* die bis jetzt nicht implementiert wurden: - -- Einstweilige Verfolgung, welche "stale" Support erlaubt und die Unterstützung bei wiederholenden Attacken - erhöht. - -- Authentifizierung mit Integritäts-Prüfung, oder "auth-int". - -- Authentifizierungs-Info *HTTP* Header. - -.. _zend.authentication.adapter.design_overview: - -Design Übersicht ----------------- - -Dieser Adapter besteht aus zwei Sub-Komponenten, die *HTTP* Authentifizierungs Klasse selbst, und den sogenannten -"Auflöser". Die *HTTP* Authentifizierungs Klasse kapselt die Logik für die Ausführung beider, sowohl der Basis -als auch der Digest Authentifizierung. Sie verwendet einen Auflöser um die Identität eines Klienten in -Datenspeichern nachzusehen (standardmäßig eine Textdatei), und die Zeugnisse vom Datenspeicher zu empfangen. Die -"aufgelösten" Zeugnisse werden dann mit den Werten verglichen die vom Klienten übermittelt wurden um zu eruieren -ob die Authentifizierung erfolgreich war. - -.. _zend.authentication.adapter.configuration_options: - -Konfigurations Optionen ------------------------ - -Die ``Zend\Auth\Adapter\Http`` Klasse benötigt ein Konfigurations Array das Ihrem Konstruktor übergeben werden -muß. Es sind verschiedene Konfigurations Optionen vorhanden, und einige davon werden benötigt: - -.. _zend.authentication.adapter.configuration_options.table: - -.. table:: Konfigurations Optionen - - +--------------+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Options Name |Benötigt |Beschreibung | - +==============+=====================================+=====================================================================================================================================================================+ - |accept_schemes|Ja |Ermittelt welches Authentifizierungs Schema der Adapter vom Klienten akzeptiert. Muß eine Leerzeichen=getrennte Liste sein, die 'basic' und, oder 'digest' enthält. | - +--------------+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |realm |Ja |Setzt das Authentifizierungs-Bereich; Benutzernamen sollten im angegebenen Bereich einmalig sein. | - +--------------+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |digest_domains|Ja, wenn accept_schemesdigest enthält|Leerzeichen-getrennte Liste von URIs für welche die gleichen Authentifizierungs Informationen gültig sind. Die URIs müssen nicht alle auf den gleichen Server zeigen.| - +--------------+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |nonce_timeout |Ja, wenn accept_schemesdigest enthält|Setzt die Anzahl an Sekunden für welche die Verfolgung gültig ist. Siehe die Notizen anbei. | - +--------------+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |proxy_auth |Nein |Standardmäßig ausgeschaltet. Einschalten um Proxi Authentifizierung durchzuführen statt normaler originaler Server Authentifizierung. | - +--------------+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - - Die aktuelle Implementation von ``nonce_timeout`` hat einige interessante Nebeneffekte. Diese Einstellung soll - die gültige Lebenszeit einer gegebenen Verfolgung ermitteln, oder effektiv, wie lange die Authentifizierungs - Information eines Klienten akzeptiert wird. Aktuell ist es auf 3600 (zum Beispiel) gesetzt, und führt dazu das - der Klient jede Stunde um neue Zeugnisse gebeten wird. Das wird in einem zukünftigen Release behoben werden, - sobald Verfolgung und "stale" Support implementiert werden. - -.. _zend.authentication.adapter.http.resolvers: - -Auflöser --------- - -Der Job des Auflösers ist es einen Benutzernamen und einen Bereich, und gibt eine Art von Zeugnisswert zurück. -Basis Authentifizierung erwartet einen Hash des Benutzernamens, des Bereichs, und dessen Passwörter (jedes -seperiert durch ein Komma). Aktuell ist der einzige unterstützte Hash Algorithmus *MD5*. - -``Zend\Auth\Adapter\Http`` ist darauf angewiesen das Objekte ``Zend\Auth\Adapter\Http\Resolver\Interface`` -implementieren. Eine Textdatei Auflöser Klasse ist mit diesem Adapter inkludiert, aber jede Art von Auflöser kann -einfach erstellt werden indem das Resolver Interface implementiert wird. - -.. _zend.authentication.adapter.http.resolvers.file: - -Datei Auflöser -^^^^^^^^^^^^^^ - -Der Datei Auflöser ist eine sehr einfache Klasse. Sie hat eine einzelne Eigenschaft die einen Dateinamen -spezifiziert, welcher auch dem Konstruktor übergeben werden kann. Ihre ``resolve()`` Methode geht durch die -Textdatei, und sucht nach einer Zeile mit einem entsprechenden Benutzernamen und Bereich. Das Format der Textdatei -ist ähnlich dem von Apache htpasswd Dateien: - -.. code-block:: text - :linenos: - - ::\n - -Jede Zeile besteht aus drei Feldern - Benutzername, Bereich und Zeugnisse - jede abgeteilt durch einen Doppelpunkt. -Das Zeugnis Feld ist für den Datei Auflöser nicht sichtbar; es gibt den Wert einfach, wie er ist, an den Aufrufer -zurück. Deswegen kann dieses Dateiformat sowohl Basis als auch Digest Authentifizierung behandeln. In der Basis -Authentifizierung sollte das Zeugnis Feld im Klartext stehen. In der Digest Authentifizierung sollte es der oben -beschriebene *MD5* Hash sein. - -Es gibt zwei gleiche einfache Wege um einen Datei Auflöser zu erstellen: - -.. code-block:: php - :linenos: - - $path = 'files/passwd.txt'; - $resolver = new Zend\Auth\Adapter\Http\Resolver\File($path); - -oder - -.. code-block:: php - :linenos: - - $path = 'files/passwd.txt'; - $resolver = new Zend\Auth\Adapter\Http\Resolver\File(); - $resolver->setFile($path); - -Wenn der angegebene Pfad leer oder nicht lesbar ist, wird eine Ausnahme geworfen. - -.. _zend.authentication.adapter.http.basic_usage: - -Grundsätzliche Verwendung -------------------------- - -Zuerst muß ein Array mit den benötigen Konfigurationswerten gesetzt werden: - -.. code-block:: php - :linenos: - - $config = array( - 'accept_schemes' => 'basic digest', - 'realm' => 'My Web Site', - 'digest_domains' => '/members_only /my_account', - 'nonce_timeout' => 3600, - ); - -Dieses Array bringt den Adapter dazu entwedet Basis oder Digest Authentifizierung zu akzeptieren, und benötigt -einen authentifizierten Zugriff auf alle Areale der Site unter ``/members_only`` und ``/my_account``. Der Bereichs -Wert wird normalerweise durch den Browser in der Passwort Dialog Box angezeigt. ``nonce_timeout`` verhält sich -natürlich so wie oben beschrieben. - -Dann wird ein ``Zend\Auth\Adapter\Http`` Objekt erstellt: - -.. code-block:: php - :linenos: - - $adapter = new Zend\Auth\Adapter\Http($config); - -Da beides, Basis und Digest Authentifizierung, unterstützt werden, werden zwei unterschiedliche -Auflösungs-Objekte benötigt. Man könnte das auch einfach durch die Verwendung von zwei unterschiedlichen Klassen -bewerkstelligen: - -.. code-block:: php - :linenos: - - $basicResolver = new Zend\Auth\Adapter\Http\Resolver\File(); - $basicResolver->setFile('files/basicPasswd.txt'); - - $digestResolver = new Zend\Auth\Adapter\Http\Resolver\File(); - $digestResolver->setFile('files/digestPasswd.txt'); - - $adapter->setBasicResolver($basicResolver); - $adapter->setDigestResolver($digestResolver); - -Letztendlich führen wir die Authentifizierung durch. Der Adapter benötigt eine Referenz zu beidem, dem Anfrage -und Antwort Objekten um seinen Job durchführen zu können: - -.. code-block:: php - :linenos: - - assert($request instanceof Zend\Controller\Request\Http); - assert($response instanceof Zend\Controller\Response\Http); - - $adapter->setRequest($request); - $adapter->setResponse($response); - - $result = $adapter->authenticate(); - if (!$result->isValid()) { - // Schlechter Benutzername/Passwort, oder abgebrochener Passwort Prompt - } - - - -.. _`RFC-2617`: http://tools.ietf.org/html/rfc2617 -.. _`Basis`: http://en.wikipedia.org/wiki/Basic_authentication_scheme -.. _`Digest`: http://en.wikipedia.org/wiki/Digest_access_authentication diff --git a/docs/languages/de/modules/zend.authentication.adapter.ldap.rst b/docs/languages/de/modules/zend.authentication.adapter.ldap.rst deleted file mode 100644 index 7fd083fe2..000000000 --- a/docs/languages/de/modules/zend.authentication.adapter.ldap.rst +++ /dev/null @@ -1,367 +0,0 @@ -.. EN-Revision: none -.. _zend.authentication.adapter.ldap: - -LDAP Authentifizierung -====================== - -.. _zend.authentication.adapter.ldap.introduction: - -Einführung ----------- - -``Zend\Auth\Adapter\Ldap`` unterstützt Webanwendungen bei der Authentifizierung mit *LDAP* Services. Die Features -beinhalten Kanonisierung von Benutzernamen und Domainnamen, Mehrfach-Domain Authentifizierung, und -Fehlerbehandlungs Features. Es wurde getestet mit `Microsoft Active Directory`_ und `OpenLDAP`_, sollte auch mit -anderen *LDAP* Service Provider zusammenarbeiten. - -Diese Dokumentation enthält eine Anleitung der Verwendung von ``Zend\Auth\Adapter\Ldap``, eine Beschreibung der -*API*, eine Ausgabe der verschiedenen Optionen, Diagnostische Informationen für die Fehlerbehandlung bei -Authentifizierungs Problemen, und Beispiel Optionen für beide, Active Directory und OpenLDAP Server. - -.. _zend.authentication.adapter.ldap.usage: - -Verwendung ----------- - -Um ``Zend\Auth\Adapter\Ldap`` Authentifizierung in eigene Anwendungen schnell einzubauen, selbst wenn -``Zend_Controller`` nicht verwendet wird, sollte das Fleisch des eigenen Codes in etwa wie folgt aussehen: - -.. code-block:: php - :linenos: - - $username = $this->_request->getParam('username'); - $password = $this->_request->getParam('password'); - - $auth = Zend\Auth\Auth::getInstance(); - - $config = new Zend\Config\Ini('../application/config/config.ini', - 'production'); - $log_path = $config->ldap->log_path; - $options = $config->ldap->toArray(); - unset($options['log_path']); - - $adapter = new Zend\Auth\Adapter\Ldap($options, $username, - $password); - - $result = $auth->authenticate($adapter); - - if ($log_path) { - $messages = $result->getMessages(); - - $logger = new Zend\Log\Log(); - $logger->addWriter(new Zend\Log\Writer\Stream($log_path)); - $filter = new Zend\Log\Filter\Priority(Zend\Log\Log::DEBUG); - $logger->addFilter($filter); - - foreach ($messages as $i => $message) { - if ($i-- > 1) { // $messages[2] und höher sind Log Nachrichten - $message = str_replace("\n", "\n ", $message); - $logger->log("Ldap: $i: $message", Zend\Log\Log::DEBUG); - } - } - } - -Natürlich ist der Logging Code optional, aber es wird dringend empfohlen einen Logger zu verwenden. -``Zend\Auth\Adapter\Ldap`` zeichnet fast jedes Bisschen an Information in ``$messages`` auf das irgendwer -benötigen können (mehr anbei), was allerdings selbst ein nettes Feature für jemanden als History ist, kann -überaus schwierig zu debuggen sein. - -Der ``Zend\Config\Ini`` wird oben verwendet um die Optionen des Adapters zu laden. Er ist also auch optional. Ein -reguläres Array würde genauso gut arbeiten. Das folgende ist eine Beispiel ``application/config/config.ini`` -Datei die Optionen für zwei separate Server hat. Mit mehreren Sets von Server Optionen versucht der Adapter jede -in Reihenfolge bis die Zugangsdaten erfolgreich authentifiziert wurden. Die Namen der Server (z.B., 'server1' und -'server2') sind sehr verallgemeinert. Für Details betreffend dem Array für Optionen, siehe das Kapitel über -**Server Optionen** weiter unten. Es ist zu beachten das ``Zend\Config\Ini`` jeden Wert der mit Gleichheitszeichen -(**=**) geschrieben wird auch unter Anführungszeichen gesetzt wird (wie unten bei DNs gezeigt). - -.. code-block:: ini - :linenos: - - [production] - - ldap.log_path = /tmp/ldap.log - - ; Typische Optionen für OpenLDAP - ldap.server1.host = s0.foo.net - ldap.server1.accountDomainName = foo.net - ldap.server1.accountDomainNameShort = FOO - ldap.server1.accountCanonicalForm = 3 - ldap.server1.username = "CN=user1,DC=foo,DC=net" - ldap.server1.password = pass1 - ldap.server1.baseDn = "OU=Sales,DC=foo,DC=net" - ldap.server1.bindRequiresDn = true - - ; Typische Optionen für Active Directory - ldap.server2.host = dc1.w.net - ldap.server2.useStartTls = true - ldap.server2.accountDomainName = w.net - ldap.server2.accountDomainNameShort = W - ldap.server2.accountCanonicalForm = 3 - ldap.server2.baseDn = "CN=Users,DC=w,DC=net" - -Die obige Konfiguration instruiert ``Zend\Auth\Adapter\Ldap`` das es versuchen soll Benutzer zuerst mit dem -OpenLDAP Server ``s0.foo.net`` authentifizieren soll. Wenn die Authentifizierung auf irgendeinem Grund -fehlschlägt, wird der AD Server ``dc1.w.net`` versucht. - -Mit Servern in verschiedenen Domains, zeigt diese Konfiguration Multi-Domain Authentifizierung. Es können auch -mehrere Server in der gleichen Domain sein um Redundanz anzubieten. - -In diesem Fall ist zu beachten das, selbst wenn OpenLDAP keine Notwendigkeit für kurze NetBIOS Stil Domainnamen -hat die von Windows verwendet werden bieten wir Sie hier an wegen der Kanonifizierung der Namen (beschrieben im -**Kanonifizierung von Benutzernamen** Kapitel anbei). - -.. _zend.authentication.adapter.ldap.api: - -Die API -------- - -Der ``Zend\Auth\Adapter\Ldap`` Konstruktor akzeptiert drei Parameter. - -Der ``$options`` Parameter wird benötigt und muß ein Array sein das ein oder mehrere Sets von Optionen enthält. -Es ist zu beachten das es sich um **Array von Arrays** von :ref:`Zend_Ldap ` Optionen handelt. Selbst -wenn nur ein einzelner *LDAP* Server verwendet wird, müssen die Optionen trotzdem in einem anderen Array sein. - -Anbei ist eine `print_r()`_ Ausgabe von beispielhaften Optionsparameters die zwei Sets von Serveroptionen für -*LDAP* Server enthalten, ``s0.foo.net`` und ``dc1.w.net`` (die gleichen Optionen wie in der oberen *INI* -Repräsentation): - -.. code-block:: console - :linenos: - - Array - ( - [server2] => Array - ( - [host] => dc1.w.net - [useStartTls] => 1 - [accountDomainName] => w.net - [accountDomainNameShort] => W - [accountCanonicalForm] => 3 - [baseDn] => CN=Users,DC=w,DC=net - ) - - [server1] => Array - ( - [host] => s0.foo.net - [accountDomainName] => foo.net - [accountDomainNameShort] => FOO - [accountCanonicalForm] => 3 - [username] => CN=user1,DC=foo,DC=net - [password] => pass1 - [baseDn] => OU=Sales,DC=foo,DC=net - [bindRequiresDn] => 1 - ) - - ) - -Die oben angebotene Information in jedem Set von Optionen ist hauptsächlich deswegen unterschiedlich weil AD -keinen Benutzernamen wärend des Bindesn in der DN Form benötigt (siehe die ``bindRequiresDn`` Option des **Server -Optionen** Kapitels weiter unten), was bedeutet das die Anzahl der, mit dem Empfangen der DN, für einen -Benutzernamen der Authentifiziert werden soll, assoziierten Optionen, unterdrückt werden kann. - -.. note:: - - **Was ist ein ausgezeichneter Name?** - - Ein DN oder "distinguished name" ist ein String der den Pfad zu einem Objekt im *LDAP* Verzeichnis - repräsentiert. Jede komma-seperierte Komponente ist ein Attribut und Wert der einen Node repräsentiert. Die - Komponenten werden rückwirkend evaluiert. Zum Beispiel ist der Benutzeraccount **CN=Bob - Carter,CN=Users,DC=w,DC=net** direkt in **CN=Users,DC=w,DC=net container** enthalten. Diese Struktur wird am - besten mit einem *LDAP* Browser wie das *ADSI* Edit *MMC* snap-in für Active Directory oder phpLDAPadmin - erkundet. - -Die Namen von Servern (z.B. 'server1' und 'server2' wie unten gezeigt) sind großteils beliebig, aber aus Gründen -der Verwendung von ``Zend_Config`` sollten die Identifikatoren (im Gegensatz dazu das Sie nummerische Indezes sind) -vorhanden sein, und sollten keine spezielle Zeichen enthalten die vom assoziierten Dateiformat verwendet werden -(z.B. der '**.**'*INI* Eigenschafts Separator, '**&**' für *XML* Entity Referenzen, usw.). - -Mit mehreren Sets von Serveroptionen, kann der Adapter Benutzer in mehreren Domains authentifizieren und bietet ein -Failover damit, wenn ein Server nicht erreichbar ist, ein anderer abgefragt wird. - -.. note:: - - **Die glorreichen Details: Was passiert bei der Authentifizierungs Methode?** - - Wenn die ``authenticate()`` Methode aufgerufen wird, iteriert der Adapter über jedes Set von Serveroptione, - setzt diese auf der internen ``Zend_Ldap`` Instanz und ruft die ``Zend\Ldap\Ldap::bind()`` Methode, mit dem - Benutzernamen und Passwort das authentifiziert werden soll, auf. Die ``Zend_Ldap`` Klasse prüft um zu sehen ob - der Benutzer mit einer Domain qualifiziert ist (hat z.B. eine Domainkomponente wie ``alice@foo.net`` oder - ``FOO\alice``). Wenn eine Domain vorhanden ist, aber mit keiner der Domainnamen der Server (``foo.net`` oder - *FOO*) übereinstimmt, wird eine spezielle Ausnahme geworfen und durch ``Zend\Auth\Adapter\Ldap`` gefangen, was - bewirkt das der Server ignoriert wird und der nächste, in den Serveroptionen gesetzte Server, ausgewählt wird. - Wenn eine Domain **doch** passt, oder der Benutzer keinen qualifizierten Benutzernamen angegeben hat, fährt - ``Zend_Ldap`` weiter fort und versucht mit den angegebenen Zugangsdaten zu binden. Wenn das Binden nicht - erfolgreich war wirft ``Zend_Ldap`` eine ``Zend\Ldap\Exception`` welche durch ``Zend\Auth\Adapter\Ldap`` - gefangen wird, und das nächste Set von Serveroptionen wird versucht. Wenn das Binden erfolgreich war, wird die - Iteration gestoppt, und die ``authenticate()`` Methode des Adapters gibt ein erfolgreiches Ergebnis zurück. - Wenn alle Serveroptionen ohne Erfolg durchprobiert wurden, schlägt die Authentifizierung fehl, und - ``authenticate()`` gibt ein Fehlerergebnis zurück mit der Fehlermeldung der letzten Iteration. - -Die username und password Parameter des ``Zend\Auth\Adapter\Ldap`` Konstruktors repräsentieren die Zugangsdaten -die authentifiziert werden sollen (z.B. die Zugangsdaten die durch den Benutzer über eine *HTML* Login Form -angegeben werden). Alternativ können Sie auch mit den ``setUsername()`` und ``setPassword()`` Methoden gesetzt -werden. - -.. _zend.authentication.adapter.ldap.server-options: - -Server Optionen ---------------- - -Jedes Set von Serveroptionen **im Kontext von Zend\Auth\Adapter\Ldap** besteht aus den folgenden Optionen welche, -großteils ungeändert, an ``Zend\Ldap\Ldap::setOptions()`` übergeben werden: - -.. _zend.authentication.adapter.ldap.server-options.table: - -.. table:: Server Optionen - - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Name |Beschreibung | - +======================+=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |host |Der Hostname des LDAP Servers der diese Optionen repräsentiert. Diese Option wird benötigt. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |port |Der Port auf den der LDAP Server schaut. Wenn useSslTRUE ist, ist der Standardwert von port 636. Wenn useSslFALSE ist, ist der Standardwert von port 389. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |useStartTls |Ob der LDAP Client einen TSL (aka SSLv2) verschlüsselten Transport verwenden soll oder nicht. Der Wert TRUE wird in einer Produktionsumgebung strengstens empfohlen um zu verhindern das Passwörter im Klartext übertragen werden. Der Standardwert ist FALSE, da Server typischerweise nach deren Installation erwarten das ein Zertifikat installiert wird. Die useSsl und useStartTls Optionen schließen sich gegenseitig aus. Die useStartTls Option sollte über useSsl favorisiert werden, aber nicht alle Server unterstützen diesen neueren Mechanismus. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |useSsl |Ob der LDAP Client einen SSL verschlüsselten Transport verwenden soll. Die useSsl und useStartTls Optionen schließen sich gegenseitig aus, aber useStartTls sollte favorisiert werden wenn der Server und die LDAP Bibliothek des Clients diese unterstützen. Dieser Wert ändert auch den Standardwert von port (siehe die port Beschreibung weiter oben). | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |username |Der DN des Accounts der verwendet wird um DN Account Loopups durchzuführen. LDAP Server die den Benutzernamen in DN Form benötigen wenn "bind" durchgeführt wird, benötigen diese Option. Wenn bindRequiresDnTRUE ist, wird diese Option benötigt. Dieser Account muß kein privilegierter Account sein - ein Account mit nur-lese Zugriff zu Objekten unter baseDn ist alles was notwendig ist (und bevorzugt unter dem Prinzip des geringsten Privilegs). | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |password |Das Passwort des Accounts der verwendet wird um DN Lookups durchzuführen. Wenn diese Option nicht unterstützt wird, versucht der LDAP Client einen "anonymen bind" wenn DN Lookups durchgeführt werden. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |bindRequiresDn |Einige LDAP Server benötigen den zum Binden verwendeten Benutzernamen in der DN Form wie CN=Alice Baker,OU=Sales,DC=foo,DC=net (grundsätzlich alle Server außer AD). Wenn diese Option TRUE ist, instuiert dies Zend_Ldap das der DN automatisch empfangen wird, abhängig vom Benutzernamen der authentifiziert wird, wenn er nicht bereits in DN Form ist, und diesen dann wieder mit der richtigen DN zu binden. Der Standardwert ist FALSE. Aktuell ist nur von Microsoft Active Directory Server (ADS) bekannt das es den Benutzernamen nicht in der DN Form benötigt wenn gebunden wird, und deswegen kann diese Option mit AD auch FALSE sein (und sollte das auch, da das Empfangen des DN eine extra Anfrage zum Server benötigt). Andernfalls muß diese Option auf TRUE gesetzt werden (z.B. für OpenLDAP). Diese Option kontrolliert das Standard acountFilterFormat das verwendet wird wenn nach Accounts gesucht wird. Siehe auch die accountFilterFormat Option. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |baseDn |Der Ort vom DN unter dem alle Accounts die authentifiziert werden. Diese Option wird benötigt. Wenn man sich unsicher über den richtigen baseDn ist, sollte es genug sein Ihn von der DNS Domain des Benutzers der die DC= Komponenten verwedet abzuleiten. Wenn der Hauptname eines Benutzers alice@foo.net ist, sollte ein baseDn von DC=foo,DC=net funktionieren. Eine präzisere Ortsangabe (z.B. OU=Sales,DC=foo,DC=net) ist trotzdem effizienter. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountCanonicalForm |Ein Wert von 2, 3 oder 4 zeigt die Form zu der Account Namen authorisiert werden sollten nachdem die Authentifizierung erfolgreich war. Die Werte sind wie folgt: 2 für traditionelle Benutzernamen-Stil Namen (z.B., alice), 3 für Schrägstrich-Stil Namen (z.B., FOO\\alice) oder 4 für Authentifiziert-Sil Namen (z.B., alice@foo.net). Der Standardwert ist 4 (z.B., alice@foo.net). Mit einem Wert von 3, z.B., wird die Identität die von Zend\Auth\Result::getIdentity() zurückgegeben wird (und Zend\Auth\Auth::getIdentity(), wenn Zend_Auth verwendet wird), immer FOO\\alice sein, unabhängig von der Form in der Alice angegeben wurde, egal ob es alice, alice@foo.net, FOO\\alice, FoO\\aLicE, foo.net\\alice, etc. Siehe das Kapitel Kanonisierung von Account Namen in der Zend_Ldap Dokumentation für Details. Bei der Verwendung von mehreren Sets von Serveroptionen ist es empfehlenswert, aber nicht notwendig, das die selbe accountCanonicalForm in allen Serveroptionen verwendet wird, sodas die sich ergebenden Benutzernamen immer auf die selbe Art und Weise kanonisiert werden (z.b. wenn man auf EXAMPLE\\username mit einem AD Server kanonisiert, aber zu username@example.com mit einem OpenLDAP Server, kann das quirks für die High-Level Logik einer Anwendung sein).| - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountDomainName |Der FQDN Domainname für welchen der Ziel LDAP Server eine Authorität ist (z.B., example.com). Diese Option wird verwendet um Namen zu kanonisieren sodas der Benutzername der vom Benutzer angeboten wird, wie es für das Binden notwendig ist, konvertiert werden kann. Er wird auch verwendet um festzustellen ob der Server eine Authorität für den angegebenen Benutzernamen ist (z.B., wenn accountDomainNamefoo.net ist und der angegebene Benutzer bob@bar.net, wird der Server nicht abgefragt, und das Ergebnis wird ein Fehler sein). Diese Option wird nicht benötigt, aber wenn Sie nicht angegeben wird, dann werden Benutzernamen in prinzipieller Namensform (z.B., alice@foo.net) nicht unterstützt. Es wird stark empfohlen das diese Option angegeben wird, da es viele Anwendungsfälle gibt welche die Erstellung von prinzipieller Namensform benötigen. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountDomainNameShort|Die 'short' Domain für die der Ziel LDAP Server eine Authorität ist (z.B., FOO). Es ist z ubeachten das es ein 1:1 Mapping zwischen accountDomainName und accountDomainNameShort existiert. Diese Option sollte verwendet werden um den NetBIOS Domainnamen für Windows Netzwerke zu spezifizieren, kann aber auch von nicht-AD Servern verwendet werden (z.B., für Konsistenz bei mehreren Sets von Serveroptionen bei dem Schrägstrich Stil accountCanonicalForm). Diese Option wird nicht benötigt, aber wenn Sie nicht angegeben wird, werden Benutzernamen im Schrägstrich Stil (z.B. FOO\\alice) nicht unterstützt. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountFilterFormat |Der LDAP Suchfilter der für die Suche nach Accounts verwendet wird. Dieser String ist ein printf()-Stil Ausdruck der ein '%s' enthalten muß um den Benutzernamen unterzubringen. Der Standardwert ist '(&(objectClass=user)(sAMAccountName=%s))', ausgenommen bindRequiresDn wird auf TRUE gesetzt. In diesem Fall ist der Standardwert '(&(objectClass=posixAccount)(uid=%s))'. Wenn, zum Beispiel, aus irgendeinem Grund bindRequiresDn = true mit AD verwendet werden soll, muß accountFilterFormat = '(&(objectClass=user)(sAMAccountName=%s))' gesetzt werden. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |optReferrals |Wenn sie auf TRUE gesetzt wird, zeigt diese Option dem LDAP Client an, das Referenzen gefolgt werden soll. Der Standardwert ist FALSE. | - +----------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - - Wenn **useStartTls = TRUE** oder **useSsl = TRUE** aktiviert ist, erzeugt der *LDAP* Client einen Fehler der - aussagt das er das Zertifikat des Servers nicht überprüfen kann. Angenommen die *PHP* *LDAP* Erweiterung ist - ultimativ verlinkt mit der OpenLDAP Client Bibliothek, muß man um dieses Problem zu lösen "``TLS_REQCERT - never``" im OpenLDAP Client ``ldap.conf`` setzen (und den Web Server restarten) um der OpenLDAP Client - Bibliothek anzuzeigen das man dem Server vertraut. Alternativ, wenn man annimmt das der Server gehackt werden - könnte kann das Basiszertifikat des *LDAP* Servers exportiert und auf den Webserver gegeben werden so dass der - OpenLDAP Client die Identität des Servers prüfen kann. - -.. _zend.authentication.adapter.ldap.debugging: - -Debug Nachrichten sammeln -------------------------- - -``Zend\Auth\Adapter\Ldap`` sammelt Debug Informationen in seiner ``authenticate()`` Methode. Diese Information wird -im ``Zend\Auth\Result`` Objekt als Nachrichten gespeichert. Das von ``Zend\Auth\Result::getMessages()`` -zurückgegebene Array kann wie folgt beschrieben werden: - -.. _zend.authentication.adapter.ldap.debugging.table: - -.. table:: Debug Nachrichten - - +-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Array Index der Nachricht|Beschreibung | - +=========================+========================================================================================================================================================================================================================================+ - |Index 0 |Eine generelle, Benutzerfreundliche Meldung die für die Anzeige für Benutzer passt (z.B. "Ungültige Anmeldedaten"). Wenn die Authentifizierung erfolgreich ist, dann ist dieser String leer. | - +-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Index 1 |Eine detailiertere Fehlermeldung die nicht für die Anzeige für Benutzer hergenommen werden kann, die aber mitgeloggt werden sollte zum Vorteil des Server Operators. Wenn die Authentifizierung erfolgreich war, ist dieser String leer.| - +-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Indezes 2 und höher |Alle Logmeldungen in Reihenfolge starten bei Index 2. | - +-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Aus der Praxis heraus sollte der Index 0 dem Benutzer angezeigt werden (z.B. bei Verwendung des FlashMessenger -Helfers), Index 1 sollte geloggt werden und, wenn die Debugging Information gesammelt wird, sollten die Indezes 2 -und höher auch geloggt werden (auch wenn die letzte Nachricht immer den String vom Index 1 enthält). - -.. _zend.authentication.adapter.ldap.options-common-server-specific: - -Übliche Optionen für spezielle Server -------------------------------------- - -.. _zend.authentication.adapter.ldap.options-common-server-specific.active-directory: - -Optionen für Active Directory -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Für *ADS* sind die folgenden Optionen beachtenswert: - -.. _zend.authentication.adapter.ldap.options-common-server-specific.active-directory.table: - -.. table:: Optionen für Active Directory - - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Name |Zusätzliche Notizen | - +======================+==============================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |host |Wie bei allen Servern, wird diese Option benötigt. | - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |useStartTls |Zum Zwecke der Sicherheit, sollte das TRUE sein wenn der Server das notwendige Zertifikat installiert hat. | - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |useSsl |Möglicherweise als Alternative zu useStartTls zu verwenden (siehe davor). | - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |baseDn |Wie bei allen Servern, wird diese Option benötigt. Standardmäßig platziert AD alle Benutzer Accounts unter dem Users Container (z.B., CN=Users,DC=foo,DC=net), aber der Standard ist in größeren Organisationen nicht üblich. Der AD Administrator sollte nach der besten DN für Accounts für die eigene Anwendung gefragt werden. | - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountCanonicalForm |Das wird man normalerweise für Schrägstrich-Stil Namen auf 3 stellen (z.B., FOO\\alice), was für Windows Benutzer am bekanntesten ist. Man sollte nicht die unqualifizierte Form 2 verwenden (z.B., alice), da das anderen Benutzern Zugriff auf die Anwendung geben würde, wenn Sie den gleichen Benutzernamen in anderen vertrauten Domains haben (z.B., BAR\\alice und FOO\\alice würden als der gleiche Benutzer behandelt). (siehe auch die Notiz anbei.)| - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountDomainName |Das wird mit AD benötigt, ausser accountCanonicalForm 2 wird verwendet, was wiederum nicht eingesetzt werden sollte. | - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountDomainNameShort|Der NetBIOS Name der Domain in der die Benutzer sind und für den der AD Server die Authorität ist. Das wird benötigt wenn der Schrägstrich-Stil accountCanonicalForm verwendet wird. | - +----------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - - Technisch sollte es keine Probleme mit irrtümlichen Domain-übergreifenden Authentifizierungen mit der - aktuellen ``Zend\Auth\Adapter\Ldap`` Implementation geben, da Serverdomains explizit geprüft werden, aber das - muss für zukünftige Implementationen, welche die Domain wärend der Laufzeit ermitteln, nicht wahr sein, oder - auch wenn ein alternativer Adapter verwendet wird (z.B., Kerberos). Generell ist bekannt das die Mehrdeutigkeit - von Accountnamen ein Sicherheitsproblem ist. Man sollte deswegen immer versuchen qualifizierte Accountnamen zu - verwenden. - -.. _zend.authentication.adapter.ldap.options-common-server-specific.openldap: - -Optionen für OpenLDAP -^^^^^^^^^^^^^^^^^^^^^ - -Für OpenLDAP oder einen generellen *LDAP* Server der ein typisches posixAccount Stil Schema verwendet sind die -folgenden Optionen beachtenswert: - -.. _zend.authentication.adapter.ldap.options-common-server-specific.openldap.table: - -.. table:: Optionen für OpenLDAP - - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Name |Zusätzliche Notizen | - +======================+===============================================================================================================================================================================================================================================================================================================================+ - |host |Wie bei allen Servern, wird diese Option benötigt. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |useStartTls |Zum Zwecke der Sicherheit, sollte das TRUE sein wenn der Server das notwendige Zertifikat installiert hat. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |useSsl |Möglicherweise als Alternative zu useStartTls zu verwenden (siehe davor). | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |username |Benötigt und muß ein DN sein, da OpenLDAP den Benutzernamen in DN Form benötigt wenn ein Binden durchgeführt wird. Es sollte versucht werden einen nicht privilegierten Account zu verwenden. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |password |Das Passwort das zum Benutzernamen von oben gehört. Es kann aber unterdrückt werden wenn der LDAP Server anonymes Binden bei Abfragen zu Benutzer Accounts erlaubt. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |bindRequiresDn |Benötigt und muß TRUE sein, da OpenLDAP den Benutzernamen in DN Form benötigt wenn ein Binden durchgeführt wird. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |baseDn |Wie bei allen Servern, wird diese Option benötigt und zeigt den DN in dem alle Accounts die authentifiziert werden enthalten sind. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountCanonicalForm |Optional, aber der Standardwert ist 4 (prinzipielle-Stil Namen wie alice@foo.net) und könnte für die Benutzer nicht ideal sein wenn diese Schrägstrich-Stil Namen verwendetn (z.B., FOO\\alice). Für Schrägstrich-Stil Namen sollte der Wert 3 verwendet werden. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountDomainName |Benötigt es sei denn man verwendet accountCanonicalForm 2, was nicht zu empfehlen ist. | - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |accountDomainNameShort|Wenn AD auch nicht verwendet wird, wird dieser Wert nicht benötigt. Andernfalls, wenn accountCanonicalForm 3 verwendet wird, wird diese Option benötigt und sollte ein Kurzname sein der adäquat zu accountDomainName korrespondiert (z.B., wenn accountDomainNamefoo.net ist, wäre ein guter accountDomainNameShort Wert FOO).| - +----------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - - -.. _`Microsoft Active Directory`: http://www.microsoft.com/windowsserver2003/technologies/directory/activedirectory/ -.. _`OpenLDAP`: http://www.openldap.org/ -.. _`print_r()`: http://php.net/print_r diff --git a/docs/languages/de/modules/zend.authentication.intro.rst b/docs/languages/de/modules/zend.authentication.intro.rst deleted file mode 100644 index b2dbf2549..000000000 --- a/docs/languages/de/modules/zend.authentication.intro.rst +++ /dev/null @@ -1,391 +0,0 @@ -.. EN-Revision: none -.. _zend.authentication.introduction: - -Einführung -========== - -``Zend_Auth`` bietet eine *API* für das Authentifizieren und enthält konkrete Authentifizierungs-Adapter für -übliche Use Case Szenarien. - -``Zend_Auth`` behandelt nur die **Authentifizierung** und nicht die **Authorisierung**. Authentifizierung ist lose -definiert als das Ermitteln ob eine Entität aktuell das ist was Sie vorgibt zu sein (z.B. Identifizierung), -basierend auf einem Set von Zeugnissen. Authorisierung, der Prozess des Entscheidens ob es einer Entität erlaubt -wird auf andere Entitäten Zugriff zu erhalten, oder um auf diesen Operationen durchzuführen, ist ausserhalb der -Möglichkeit von ``Zend_Auth``. Für weitere Informationen über Authorisierung und Zugriffskontrolle mit dem Zend -Framework, sollte :ref:`Zend\Permissions\Acl ` angeschaut werden. - -.. note:: - - Die ``Zend_Auth`` Klasse implementiert das Singleton Pattern - nur eine Instanz der Klasse ist vorhanden - durch - Ihre statische ``getInstance()`` Methode. Das bedeutet das die Verwendung des **new** Operators und des - **clone** Keywords mit der ``Zend_Auth`` Klasse nicht funktioniert; stattdessen muß - ``Zend\Auth\Auth::getInstance()`` verwendet werden. - -.. _zend.authentication.introduction.adapters: - -Adapter -------- - -Ein ``Zend_Auth`` Adapter wird verwendet um sich gegenüber einem speziellen Typ von Authentifizierungs Services zu -authentifizieren, wie *LDAP*, *RDBMS*, oder Datei-basierenden Speichern. Verschiedene Adapter besitzen leicht -unterschiedliche Optionen und Verhaltensweisen, aber einige grundlegende Dinge sind für Authentifizierungs Adapter -üblich. Zum Beispiel das die Authentifizierung Zeugnisse akzeptiert werden (enthält auch vorgegebene -Identitäten), das Abfragen am Authentifizierungsservice durchgeführt werden, und das Ergebnisse zurückgegeben -werden, sind für ``Zend_Auth`` Adapter üblich. - -Jede ``Zend_Auth`` Adapter Klasse implementiert ``Zend\Auth\Adapter\Interface``. Dieses Interface definiert eine -Methode, ``authenticate()``, die eine Adapter Klasse implementieren muß um eine Authentifizierungsanfrage -auszuführen. Jede Adapter Klasse muß vorher vorbereitet sein bevor ``authenticate()`` aufgerufen wird. Diese -Vorbereitung des Adapters enthält das Setzen der Zeugnisse (z.B. Benutzername und Passwort) und die Definition von -Werten für Adapter spezifische Konfigurationoptionen, wie Datenbank Verbindungsdaten für einen Datenbank Tabellen -Adapter. - -Das folgende ist ein Beispiel eines Authentifierungs-Adapters der einen Benutzernamen und ein Passwort für die -Authentifizierung benötigt. Andere Details, wie zum Beispiel der Authentifizierungs-Service abgefragt wird, werden -der Kürze halber ausgelassen: - -.. code-block:: php - :linenos: - - class MyAuthAdapter implements Zend\Auth\Adapter\Interface - { - /** - * Setzt Benutzername und Passwort für die Authentifizierung - * - * @return void - */ - public function __construct($username, $password) - { - // ... - } - - /** - * Führt einen Authentifizierungs-Versuch durch - * - * @throws Zend\Auth\Adapter\Exception Wenn die Authentifizierung nicht - * durchgeführt wurde - * @return Zend\Auth\Result - */ - public function authenticate() - { - // ... - } - } - -Wie im Docblock angegeben, muß ``authenticate()`` eine Instanz von ``Zend\Auth\Result`` (oder einer von -``Zend\Auth\Result`` abgeleiteten Klassen) zurückgeben. Wenn aus bestimmten Gründen eine Durchführung einer -Authentifizierungs-Anfrage nicht möglich ist, sollte ``authenticate()`` eine Ausnahme werfen die von -``Zend\Auth\Adapter\Exception`` abgeleitet ist. - -.. _zend.authentication.introduction.results: - -Ergebnisse ----------- - -``Zend_Auth`` Adapter geben eine Instanz von ``Zend\Auth\Result`` mit Hilfe von ``authenticate()`` zurück um die -Ergebnisse des Authentifizierungs-Versuches darzustellen. Adapter veröffentlichen das ``Zend\Auth\Result`` Objekt -bei der Erstellung, so das die folgenden vier Methoden ein grundsätzliches Set von Benutzerbezogenen Operationen -bieten die für die Ergebnisse von ``Zend_Auth`` Adapter üblich sind: - -- ``isValid()``- Gibt ``TRUE`` zurück wenn und nur wenn das Ergebnis einen erfolgreichen - Authentifizierungs-Versuch repräsentiert - -- ``getCode()``- Gibt einen konstanten ``Zend\Auth\Result`` Identifizierer damit der Typ des - Authentifizierungs-Fehlers, oder des Erfolgs der stattgefunden hat, ermittelt werden kann. Das kann in - Situationen verwendet werden in denen der Entwickler die verschiedenen Ergebnistypen der Authentifizierung - unterschiedlich behandeln will. Das erlaubt es dem Entwickler zum Beispiel detailierte Statistiken über die - Authentifizierungs-Ergebnisse zu erhalten. Eine andere Verwendung dieses Features ist es spezielle, - benutzerdefinierte Nachrichten anzubieten, um Benutzern eine bessere Usability zu ermöglichen, einfach dadurch - das Entwickler dazu aufgerufen sind die Risiken solche defailierte Informationen Benutzern anzubieten, statt - einer generellen Nachricht eines Authentifizierungs-Fehlers. Für weitere Informationen siehe die Notiz anbei. - -- ``getIdentity()``- Gibt die Identität des Authentifizierungs-Versuchs zurück - -- ``getMessages()``- Gibt ein Array von Nachrichten zurück nach einem fehlgeschlagenen Authentifizierungs-Versuch - -Ein Entwickler kann wünschen basierend auf dem Typ des Authentifizierungs-Ergebnisses zu verzweigen um -spezialisiertere Operationen durchzuführen. Einige Operationen die für Entwickler nützlich sein können sind zum -Beispiel das Sperren von Konten nachdem zu oft ein falsches Passwort angegeben wurde, das markieren von IP Adressen -nachdem zuviele nicht existierende Identitäten angegeben wurden und das anbieten von speziellen, -benutzerdefinierten Nachrichten für Authentifizierungs-Ergebnisse an den Benutzer. Die folgenden Ergebniscodes -sind vorhanden: - -.. code-block:: php - :linenos: - - Zend\Auth\Result::SUCCESS - Zend\Auth\Result::FAILURE - Zend\Auth\Result::FAILURE_IDENTITY_NOT_FOUND - Zend\Auth\Result::FAILURE_IDENTITY_AMBIGUOUS - Zend\Auth\Result::FAILURE_CREDENTIAL_INVALID - Zend\Auth\Result::FAILURE_UNCATEGORIZED - -Das folgende Beispiel zeigt wie ein Entwickler anhand des Ergebniscodes verzweigen könnte: - -.. code-block:: php - :linenos: - - // Innerhalb von AuthController / loginAction - $result = $this->_auth->authenticate($adapter); - - switch ($result->getCode()) { - - case Zend\Auth\Result::FAILURE_IDENTITY_NOT_FOUND: - /** Was wegen nicht existierender Identität machen **/ - break; - - case Zend\Auth\Result::FAILURE_CREDENTIAL_INVALID: - /** Was wegen ungültigen Zeugnissen machen **/ - break; - - case Zend\Auth\Result::SUCCESS: - /** Was wegen erfolgreicher Authentifizierung machen **/ - break; - - default: - /** Was wegen anderen Fehlern machen **/ - break; - } - -.. _zend.authentication.introduction.persistence: - -Dauerhafte Identitäten ----------------------- - -Eine Anfrage zu authentifizieren die Authentifizierungs Zeugnisse enthält ist per se nützlich, aber auch wichtig -um die Authentifizierungs Identität bearbeiten zu können ohne das immer die Authentifizierungs Zeugnisse mit -jeder Anfrage vorhanden sein müssen. - -Trotzdem ist *HTTP* ein statusloses Protokoll, und Techniken wie Cookies und Sessions wurden entwickelt um Stati -über mehrere Anfragen hinweg in Server-seitigen Web Anwendungen zu erhalten. - -.. _zend.authentication.introduction.persistence.default: - -Normale Persistenz in PHP Sessions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Standardmäßig bietet ``Zend_Auth`` dauerhafte Speicherung der Identität eines erfolgreichen Authentifizierungs -Versuches durch Verwendung der *PHP* Session. Bei einem erfolgreichen Authentifizierungs Versuch speichert -``Zend\Auth\Auth::authenticate()`` die Identität des Authentifizierungs Ergebnisses im persistenten Speicher. Solange -die Konfiguration nicht verändert wird, verwendet ``Zend_Auth`` eine Speicherklasse die -``Zend\Auth\Storage\Session`` heißt und die im Gegenzug :ref:`Zend_Session ` verwendet. Eine eigene -Klasse kann stattdessen verwendet werden, indem ein Objekt an ``Zend\Auth\Auth::setStorage()`` übergeben wird welches -``Zend\Auth\Storage\Interface`` implementiert. - -.. note:: - - Wenn das automatische persistente Speichern der Identität für einen bestimmten Anwendungsfall nicht anwendbar - ist, können Entwickler trotzdem die ``Zend_Auth`` Klasse weiterhin verwenden statt direkt eine Adapterklasse - anzusprechen. - -.. _zend.authentication.introduction.persistence.default.example: - -.. rubric:: Den Namensraum der Session ändern - -``Zend\Auth\Storage\Session`` verwendet einen Session Namensraum von '``Zend_Auth``'. Diese Namensraum kann -überschrieben werden indem ein anderer Wert an den Konstruktor von ``Zend\Auth\Storage\Session`` übergeben wird, -und dieser Wert wird intern an den Konstruktor von ``Zend\Session\Namespace`` weitergereicht. Das sollte vor einem -Versuch einer Authentifizierung stattfinden da ``Zend\Auth\Auth::authenticate()`` die automatische Speicherung der -Identität durchführt. - -.. code-block:: php - :linenos: - - // Eine Referenz zur Singleton Instanz von Zend_Auth speichern - $auth = Zend\Auth\Auth::getInstance(); - - // 'someNamespace' statt 'Zend_Auth' verwenden - $auth->setStorage(new Zend\Auth\Storage\Session('someNamespace')); - - /** - * @todo Den Auth Adapter $authAdapter erstellen - */ - - // Authentifizieren, das Ergebnis speichern, und die Identität bei Erfolg - // persistent machen - $result = $auth->authenticate($authAdapter); - -.. _zend.authentication.introduction.persistence.custom: - -Eigene Speicher implementieren -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Zeitweise wollen Entwickler einen anderen Speichermechanismus für Identitäten verwenden als es von -``Zend\Auth\Storage\Session`` angeboten wird. Für solche Fälle können Entwickler einfach -``Zend\Auth\Storage\Interface`` implementieren und eine Instanz der Klasse an ``Zend\Auth\Auth::setStorage()`` -übergeben. - -.. _zend.authentication.introduction.persistence.custom.example: - -.. rubric:: Eine eigene Speicher Klasse verwenden - -Um eine andere Speicherklasse für die Persistenz von Identitäten zu verwenden als sie durch -``Zend\Auth\Storage\Session`` angeboten wird, können Entwickler ``Zend\Auth\Storage\Interface`` implementieren: - -.. code-block:: php - :linenos: - - class MyStorage implements Zend\Auth\Storage\Interface - { - /** - * Gibt true zurück wenn und nur wenn der Speicher leer ist - * - * @throws Zend\Auth\Storage\Exception Wenn es unmöglich ist festzustellen - * ob der Speicher leer ist - * @return boolean - */ - public function isEmpty() - { - /** - * @todo Implementierung - */ - } - - /** - * Gibt den Inhalt des Speichers zurück - * - * Das Verhalten ist undefiniert wenn der Speicher leer ist. - * - * @throws Zend\Auth\Storage\Exception Wenn das Lesen von Lesen vom Speicher - * unmöglich ist - * @return mixed - */ - public function read() - { - /** - * @todo Implementierung - */ - } - - /** - * Schreibt $contents in den Speicher - * - * @param mixed $contents - * @throws Zend\Auth\Storage\Exception Wenn das Schreiben von $contents in - * den Speicher unmöglich ist - * @return void - */ - public function write($contents) - { - /** - * @todo Implementierung - */ - } - - /** - * Löscht die Intalte vom Speicher - * - * @throws Zend\Auth\Storage\Exception Wenn das Löschen der Inhalte vom - * Speicher unmöglich ist - * @return void - */ - public function clear() - { - /** - * @todo Implementierung - */ - } - - } - -Um diese selbstgeschriebene Speicherklasse zu verwenden wird ``Zend\Auth\Auth::setStorage()`` aufgerufen bevor eine -Authentifizierungsanfrage stattfindet: - -.. code-block:: php - :linenos: - - // Zend_Auth anweisen das die selbstdefinierte Speicherklasse verwendet wird - Zend\Auth\Auth::getInstance()->setStorage(new MyStorage()); - - /** - * @todo Den Auth Adapter $authAdapter erstellen - */ - - // Authentifizieren, das Ergebnis speichern, und die Identität bei Erfolg - $result = Zend\Auth\Auth::getInstance()->authenticate($authAdapter); - -.. _zend.authentication.introduction.using: - -Verwendung ----------- - -Es gibt zwei vorhandene Wege um ``Zend_Auth`` Adapter zu verwenden: - -. Indirekt durch ``Zend\Auth\Auth::authenticate()`` - -. Direkt durch die ``authenticate()`` Methode des Adapters - -Das folgende Beispiel zeigt wie ein ``Zend_Auth`` Adapter indirekt verwendet werden kann, durch die Verwendung der -``Zend_Auth`` Klasse: - -.. code-block:: php - :linenos: - - // Eine Referenz zur Singleton-Instanz von Zend_Auth erhalten - $auth = Zend\Auth\Auth::getInstance(); - - // Authentifizierungs Adapter erstellen - $authAdapter = new MyAuthAdapter($username, $password); - - // Authentifizierungs Versuch, das Ergebnis abspeichern - $result = $auth->authenticate($authAdapter); - - if (!$result->isValid()) { - // Authentifizierung fehlgeschlagen; die genauen Gründe ausgeben - foreach ($result->getMessages() as $message) { - echo "$message\n"; - } - } else { - // Authentifizierung erfolgreich; die Identität ($username) wird in - // der Session gespeichert - // $result->getIdentity() === $auth->getIdentity() - // $result->getIdentity() === $username - } - -Sobald die Authentifizierung in einer Anfrage durchgeführt wurde, so wie im obigen Beispiel, ist es sehr einfach -zu Prüfen ob eine erfolgreich authentifizierte Identität existiert: - -.. code-block:: php - :linenos: - - $auth = Zend\Auth\Auth::getInstance(); - if ($auth->hasIdentity()) { - // Identität existiert; auslesen - $identity = $auth->getIdentity(); - } - -Um eine Identität vom persistenten Speicher zu entfernen muß einfach die ``clearIdentity()`` Methode verwendet -werden. Das würde typischerweise für die Implementierung einer "Abmelde" Operation in einer Anwendung Verwendung -finden. - -.. code-block:: php - :linenos: - - Zend\Auth\Auth::getInstance()->clearIdentity(); - -Wenn die automatische Verwendung von persistenten Speichern für einen bestimmten Verwendungszweck unangebracht -ist, kann ein Entwickler einfach die Verwendung der ``Zend_Auth`` Klasse umgehen, und eine Adapter Klasse direkt -verwenden. Die direkte Verwendung einer Adapterklasse enthält das Konfigurieren und Vorbereiten eines Adapter -Objektes und den Aufruf dessen ``authenticate()`` Methode. Adapter-spezifische Details werden in der Dokumentation -jeden Adapters besprochen. Das folgende Beispeil verwendet ``MyAuthAdapter`` direkt: - -.. code-block:: php - :linenos: - - // Den Authentifizierungs Adapter erstellen - $authAdapter = new MyAuthAdapter($username, $password); - - // Authentifizierungs Versuch, speichere das Ergebnis - $result = $authAdapter->authenticate(); - - if (!$result->isValid()) { - // Authentifizierung fehlgeschlagen; die genauen Gründe ausgeben - foreach ($result->getMessages() as $message) { - echo "$message\n"; - } - } else { - // Authentifizierung erfolgreich - // $result->getIdentity() === $username - } - - diff --git a/docs/languages/de/modules/zend.barcode.creation.rst b/docs/languages/de/modules/zend.barcode.creation.rst deleted file mode 100644 index 02bffbdb9..000000000 --- a/docs/languages/de/modules/zend.barcode.creation.rst +++ /dev/null @@ -1,166 +0,0 @@ -.. EN-Revision: none -.. _zend.barcode.creation: - -Barcodes mit Hilfe der Zend_Barcode Klasse erstellen -==================================================== - -.. _zend.barcode.creation.configuration: - -Verwendung von Zend\Barcode\Barcode::factory ------------------------------------- - -``Zend_Barcode`` verwendet eine Factory Methode um die Instanz eines Renderers zu erstellen der -``Zend\Barcode\Renderer\RendererAbstract`` erweitert. Die Factory Methode akzeptiert fünf Argumente. - -. Der Name des Barcode Formats (z.B., "code39") (benötigt) - -. Der Name des Renderers (z.B., "image") (benötigt) - -. Optionen die an das Barcode Objekt übergeben werden (ein Array oder ``Zend_Config`` Objekt) (optional) - -. Optionen die an das Renderer Objekt übergeben werden (ein Array oder ``Zend_Config`` Object) (optional) - -. Ein Boolean um anzuzeigen ob Fehler automatisch dargestellt werden sollen oder nicht. Wenn eine Exception - stattfindet, wird das angegebene Barcode Objekt mit der Repräsentation des Fehlers ersetzt (optional der - Standardwert ``TRUE``) - -.. _zend.barcode.creation.configuration.example-1: - -.. rubric:: Einen Renderer mit Zend\Barcode\Barcode::factory() erhalten - -``Zend\Barcode\Barcode::factory()`` instanziert Barcode Objekte und Renderer und verbindet diese miteinander. In diesem -ersten Beispiel verwenden wir den **Code39** Barcode Typ zusammen mit dem **Image** Renderer. - -.. code-block:: php - :linenos: - - // Nur der darzustellende Text wird benötigt - $barcodeOptions = array('text' => 'ZEND-FRAMEWORK'); - - // Keine Optionen benötigt - $rendererOptions = array(); - $renderer = Zend\Barcode\Barcode::factory( - 'code39', 'image', $barcodeOptions, $rendererOptions - ); - -.. _zend.barcode.creation.configuration.example-2: - -.. rubric:: Zend\Barcode\Barcode::factory() mit Zend_Config Objekten verwenden - -Man kann ein ``Zend_Config`` Objekt an die Factory übergeben um die notwendigen Objekte zu erstellen. Das folgende -Beispiel ist funktionell identisch mit dem vorherigen. - -.. code-block:: php - :linenos: - - // Nur ein Zend_Config Objekt verwenden - $config = new Zend\Config\Config(array( - 'barcode' => 'code39', - 'barcodeParams' => array('text' => 'ZEND-FRAMEWORK'), - 'renderer' => 'image', - 'rendererParams' => array('imageType' => 'gif'), - )); - - $renderer = Zend\Barcode\Barcode::factory($config); - -.. _zend.barcode.creation.drawing: - -Einen Barcode zeichnen ----------------------- - -Wenn der Barcode **gezeichnet** wird, empfängt man die Ressource in welcher der Barcode gezeichnet wird. Um einen -Barcode zu zeichnen kann man die ``draw()`` Methode des Renderers aufrufen, oder einfach die von ``Zend_Barcode`` -angebotene Proxy Methode verwenden. - -.. _zend.barcode.creation.drawing.example-1: - -.. rubric:: Einen Barcode mit dem Renderer Objekt zeichnen - -.. code-block:: php - :linenos: - - // Nur der zu zeichnende Text wird benötigt - $barcodeOptions = array('text' => 'ZEND-FRAMEWORK'); - - // Keine Optionen benötigt - $rendererOptions = array(); - - // Zeichne den Barcode in einem neuen Bild - $imageResource = Zend\Barcode\Barcode::factory( - 'code39', 'image', $barcodeOptions, $rendererOptions - )->draw(); - -.. _zend.barcode.creation.drawing.example-2: - -.. rubric:: Einen Barcode mit Zend\Barcode\Barcode::draw() zeichnen - -.. code-block:: php - :linenos: - - // Nur der zu zeichnende Text wird benötigt - $barcodeOptions = array('text' => 'ZEND-FRAMEWORK'); - - // Keine Optionen benötigt - $rendererOptions = array(); - - // Zeichne den Barcode in einem neuen Bild - $imageResource = Zend\Barcode\Barcode::draw( - 'code39', 'image', $barcodeOptions, $rendererOptions - ); - -.. _zend.barcode.creation.renderering: - -Einen Barcode darstellen ------------------------- - -Wenn man einen Barcode darstellt, zeichnet man den Barcode, man sendet die Header und man sendet die Ressource -(z.B. zu einem Browser). Um einen Barcode darzustellen muss man die ``render()`` Methode des Renderers aufrufen, -oder einfach die Proxy Methode verwenden die von ``Zend_Barcode`` angeboten wird. - -.. _zend.barcode.creation.renderering.example-1: - -.. rubric:: Einen Barcode mit dem Renderer Objekt darstellen - -.. code-block:: php - :linenos: - - // Nur der zu zeichnende Text wird benötigt - $barcodeOptions = array('text' => 'ZEND-FRAMEWORK'); - - // Keine Optionen benötigt - $rendererOptions = array(); - - // Zeichne den Barcode in einem neuen Bild - // Sende die Header und das Bild - Zend\Barcode\Barcode::factory( - 'code39', 'image', $barcodeOptions, $rendererOptions - )->render(); - -Das wird diesen Barcode erstellen: - -.. image:: ../images/zend.barcode.introduction.example-1.png - :width: 275 - :align: center - -.. _zend.barcode.creation.renderering.example-2: - -.. rubric:: Einen Barcode mit Zend\Barcode\Barcode::render() darstellen - -.. code-block:: php - :linenos: - - // Nur der zu zeichnende Text wird benötigt - $barcodeOptions = array('text' => 'ZEND-FRAMEWORK'); - - // Keine Optionen benötigt - $rendererOptions = array(); - - // Zeichne den Barcode in einem neuen Bild - // Sende die Header und das Bild - Zend\Barcode\Barcode::render( - 'code39', 'image', $barcodeOptions, $rendererOptions - ); - -Das wird den selben Barcode erzeugen wie im vorherigen Beispiel. - - diff --git a/docs/languages/de/modules/zend.barcode.intro.rst b/docs/languages/de/modules/zend.barcode.intro.rst deleted file mode 100644 index 43b68f317..000000000 --- a/docs/languages/de/modules/zend.barcode.intro.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. EN-Revision: none -.. _zend.barcode.introduction: - -Einführung -========== - -``Zend_Barcode`` bietet einen generischen Weg um Barcode zu erzeugen. Die ``Zend_Barcode`` Komponente ist in zwei -Unterkomponenten unterteilt: Barcode Objekte und Renderer. Objekte erlauben es Barcodes unabhängig von Renderern -zu erstellen. Renderer erlauben es Barcodes basieren auf der benötigten Unterstützung zu zeichnen. - - diff --git a/docs/languages/de/modules/zend.barcode.objects.details.rst b/docs/languages/de/modules/zend.barcode.objects.details.rst deleted file mode 100644 index 4541dab88..000000000 --- a/docs/languages/de/modules/zend.barcode.objects.details.rst +++ /dev/null @@ -1,410 +0,0 @@ -.. EN-Revision: none -.. _zend.barcode.objects.details: - -Beschreibung der ausgelieferten Barcodes -======================================== - -Anbei findet man detailierte Informationen über alle Barcode Typen welche standardmäßig mit Zend Framework -ausgeliefert werden. - -.. _zend.barcode.objects.details.error: - -Zend\Barcode\Object\Error -------------------------- - -.. image:: ../images/zend.barcode.objects.details.error.png - :width: 400 - :align: center - -Dieser Barcode ist ein spezieller Fall. Er wird intern verwendet um eine Exception automatisch darzustellen wenn -diese von der ``Zend_Barcode`` Komponente gefangen wird. - -.. _zend.barcode.objects.details.code25: - -Zend\Barcode\Object\Code25 --------------------------- - -.. image:: ../images/zend.barcode.objects.details.code25.png - :width: 152 - :align: center - -- **Name:** Code 25 (oder Code 2 of 5 oder Code 25 Industrial) - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** Optional (Modulo 10) - -- **Länge:** Variabel - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. _zend.barcode.objects.details.code25interleaved: - -Zend\Barcode\Object\Code25interleaved -------------------------------------- - -.. image:: ../images/zend.barcode.objects.details.int25.png - :width: 101 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Code25`` (Code 2 of 5). Er hat die gleichen Details und Optionen und -fügt folgendes hinzu: - -- **Name:** Code 2 of 5 Interleaved - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** Optional (Modulo 10) - -- **Länge:** variabel (immer eine gerade Anzahl an Zeichen) - -Vorhandene Optionen: - -.. _zend.barcode.objects.details.code25interleaved.table: - -.. table:: Optionen für Zend\Barcode\Object\Code25interleaved - - +--------------+--------+------------+----------------------------------------------------------+ - |Option |Datentyp|Standardwert|Beschreibung | - +==============+========+============+==========================================================+ - |withBearerBars|Boolean |FALSE |Zeichnet eine dicke Linie am Beginn und Ende des Barcodes.| - +--------------+--------+------------+----------------------------------------------------------+ - -.. note:: - - Wenn die Anzahl der Zeichen nicht gerade ist, wird ``Zend\Barcode\Object\Code25interleaved`` fehlende Nullen dem - Barcode Text automatisch voranstellen. - -.. _zend.barcode.objects.details.ean2: - -Zend\Barcode\Object\Ean2 ------------------------- - -.. image:: ../images/zend.barcode.objects.details.ean2.png - :width: 41 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Ean5`` (*EAN* 5) und hat die gleichen Details und Optionen, und -fügt die folgenden hinzu: - -- **Name:** *EAN*-2 - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** nur intern verwendet aber nicht dargestellt - -- **Länge:** 2 Zeichen - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 2 ist, wird ``Zend\Barcode\Object\Ean2`` fehlende Nullen dem Barcode - Text automatisch voranstellen. - -.. _zend.barcode.objects.details.ean5: - -Zend\Barcode\Object\Ean5 ------------------------- - -.. image:: ../images/zend.barcode.objects.details.ean5.png - :width: 68 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Ean13`` (*EAN* 13) und hat eigene Details und Optionen und fügt die -folgenden hinzu: - -- **Name:** *EAN*-5 - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** nur intern verwendet aber nicht dargestellt - -- **Länge:** 5 Zeichen - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 5 ist, wird ``Zend\Barcode\Object\Ean5`` fehlende Nullen dem Barcode - Text automatisch voranstellen. - -.. _zend.barcode.objects.details.ean8: - -Zend\Barcode\Object\Ean8 ------------------------- - -.. image:: ../images/zend.barcode.objects.details.ean8.png - :width: 82 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Ean13`` (*EAN* 13) und hat eigene Details und Optionen und fügt die -folgenden hinzu: - -- **Name:** *EAN*-8 - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** erforderlich (Modulo 10) - -- **Länge:** 8 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 8 ist, wird ``Zend\Barcode\Object\Ean8`` fehlende Nullen dem Barcode - Text automatisch voranstellen. - -.. _zend.barcode.objects.details.ean13: - -Zend\Barcode\Object\Ean13 -------------------------- - -.. image:: ../images/zend.barcode.objects.details.ean13.png - :width: 113 - :align: center - -- **Name:** *EAN*-13 - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** erforderlich (Modulo 10) - -- **Länge:** 13 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 13 ist, wird ``Zend\Barcode\Object\Ean13`` fehlende Nullen dem Barcode - Text automatisch voranstellen. - - Die Option ``withQuietZones`` hat bei diesem Barcode keinen Effekt - -.. _zend.barcode.objects.details.code39: - -Zend\Barcode\Object\Code39 --------------------------- - -.. image:: ../images/zend.barcode.introduction.example-1.png - :width: 275 - :align: center - -- **Name:** Code 39 - -- **Erlaubte Zeichen:**'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%' - -- **Checksumme:** Optional (Modulo 43) - -- **Länge:** Variabel - -.. note:: - - ``Zend\Barcode\Object\Code39`` fügt automatisch die Start und Stop Zeichen ('\*') hinzu. - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. _zend.barcode.objects.details.identcode: - -Zend\Barcode\Object\Identcode ------------------------------ - -.. image:: ../images/zend.barcode.objects.details.identcode.png - :width: 137 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Code25interleaved`` (Code 2 of 5 Interleaved), und enthält einige -seiner Fähigkeiten; er hat auch selbst einige spezielle. - -- **Name:** Identcode (Deutsche Post Identcode) - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** zwingend (Modulo 10 aber unterschiedlich von Code25) - -- **Länge:** 12 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 12 ist, wird ``Zend\Barcode\Object\Identcode`` fehlende Nullen dem - Barcode Text automatisch voranstellen. - -.. _zend.barcode.objects.details.itf14: - -Zend\Barcode\Object\Itf14 -------------------------- - -.. image:: ../images/zend.barcode.objects.details.itf14.png - :width: 155 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Int25`` (Code 2 of 5 Interleaved), und erweitert einige seiner -Möglichkeiten; er hat auch selbst einige spezielle. - -- **Name:** *ITF*-14 - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** zwingend (Modulo 10) - -- **Länge:** 14 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 14 ist, wird ``Zend\Barcode\Object\Itf14`` fehlende Nullen dem Barcode - Text automatisch voranstellen. - -.. _zend.barcode.objects.details.leitcode: - -Zend\Barcode\Object\Leitcode ----------------------------- - -.. image:: ../images/zend.barcode.objects.details.leitcode.png - :width: 155 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Identcode`` (Deutsche Post Identcode), und enthält einige seiner -Möglichkeiten; er hat auch einige eigene Möglichkeit. - -- **Name:** Leitcode (Deutsche Post Leitcode) - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** zwingend (Modulo 10 unterschiedlich zu Code25) - -- **Länge:** 14 Zeichen (inklusive der Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 14 ist, wird ``Zend\Barcode\Object\Leitcode`` fehlende Nullen dem - Barcode Text automatisch voranstellen. - -.. _zend.barcode.objects.details.planet: - -Zend\Barcode\Object\Planet --------------------------- - -.. image:: ../images/zend.barcode.objects.details.planet.png - :width: 286 - :align: center - -- **Name:** Planet (PostaL Alpha Numeric Encoding Technique) - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** erforderlich (Modulo 10) - -- **Länge:** 12 oder 14 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. _zend.barcode.objects.details.postnet: - -Zend\Barcode\Object\Postnet ---------------------------- - -.. image:: ../images/zend.barcode.objects.details.postnet.png - :width: 286 - :align: center - -- **Name:** Postnet (POSTal Numeric Encoding Technique) - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** erforderlich (Modulo 10) - -- **Länge:** 6, 7, 10 oder 12 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. _zend.barcode.objects.details.royalmail: - -Zend\Barcode\Object\Royalmail ------------------------------ - -.. image:: ../images/zend.barcode.objects.details.royalmail.png - :width: 158 - :align: center - -- **Name:** Royal Mail oder *RM4SCC* (Royal Mail 4-State Customer Code) - -- **Erlaubte Zeichen:**'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - -- **Checksumme:** erforderlich - -- **Länge:** variabel - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. _zend.barcode.objects.details.upca: - -Zend\Barcode\Object\Upca ------------------------- - -.. image:: ../images/zend.barcode.objects.details.upca.png - :width: 115 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Ean13`` (*EAN* 13) und erweitert einige seiner Möglichkeiten; er -hat auch selbst einige. - -- **Name:** *UPC*-A (Universal Product Code) - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** erforderlich (Modulo 10) - -- **Länge:** 12 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 12 ist, wird ``Zend\Barcode\Object\Upca`` fehlende Nullen dem Barcode - Text automatisch voranstellen. - - Die Option ``withQuietZones`` hat bei diesem Barcode keinen Effekt - -.. _zend.barcode.objects.details.upce: - -Zend\Barcode\Object\Upce ------------------------- - -.. image:: ../images/zend.barcode.objects.details.upce.png - :width: 71 - :align: center - -Dieser Barcode erweitert ``Zend\Barcode\Object\Upca`` (*UPC*-A), und verwendet einige seiner Fähigkeiten; er hat -auch einige eigene. Das erste Zeichen des zu kodierenden Textes ist das System (0 oder 1). und enthält einige -seiner Möglichkeiten; er hat auch einige eigene Möglichkeit. - -- **Name:** *UPC*-E (Universal Product Code) - -- **Erlaubte Zeichen:**'0123456789' - -- **Checksumme:** erforderlich (Modulo 10) - -- **Länge:** 8 Zeichen (inklusive Checksumme) - -Es gibt keine speziellen Optionen für diesen Barcode. - -.. note:: - - Wenn die Anzahl der Zeichen kleiner als 8 ist, wird ``Zend\Barcode\Object\Upce`` fehlende Nullen dem Barcode - Text automatisch voranstellen. - -.. note:: - - Wenn das erste Zeichen des zu kodierenden Textes nicht 0 oder 1 ist, ersetzt ``Zend\Barcode\Object\Upce`` dieses - automatisch durch 0. - - Die Option ``withQuietZones`` hat bei diesem Barcode keinen Effekt - - diff --git a/docs/languages/de/modules/zend.barcode.objects.rst b/docs/languages/de/modules/zend.barcode.objects.rst deleted file mode 100644 index 858a4d162..000000000 --- a/docs/languages/de/modules/zend.barcode.objects.rst +++ /dev/null @@ -1,170 +0,0 @@ -.. EN-Revision: none -.. _zend.barcode.objects: - -Zend_Barcode Objekte -==================== - -Barcode Objekte erlauben es Barcodes unabhängig von der Unterstützung eines Renderers zu erstellen. Nach der -Erstellung kann der Barcode als Array von Zeichen Anweisungen empfangen werden die an einen Renderer übergeben -werden können. - -Objekte haben eine große Anzahl an Optionen. Die meisten von Ihnen sind allen Objekten gemein. Diese Optionen -können auf vier Wegen gesetzt werden: - -- Als Array oder ``Zend_Config`` Objekt welches dem Constructor übergeben wird. - -- Als Array das der ``setOptions()`` Methode übergeben wird. - -- Als ``Zend_Config`` Objekt welches der ``setConfig()`` Methode übergeben wird. - -- Über individuelle Setter für jeden Konfigurations Typ. - -.. _zend.barcode.objects.configuration: - -.. rubric:: Unterschiedliche Wege ein Barcode Objekt zu parametrisieren - -.. code-block:: php - :linenos: - - $options = array('text' => 'ZEND-FRAMEWORK', 'barHeight' => 40); - - // Fall 1: Constructor - $barcode = new Zend\Barcode\Object\Code39($options); - - // Fall 2: setOptions() - $barcode = new Zend\Barcode\Object\Code39(); - $barcode->setOptions($options); - - // Fall 3: setConfig() - $config = new Zend\Config\Config($options); - $barcode = new Zend\Barcode\Object\Code39(); - $barcode->setConfig($config); - - // Fall 4: individuelle Setter - $barcode = new Zend\Barcode\Object\Code39(); - $barcode->setText('ZEND-FRAMEWORK') - ->setBarHeight(40); - -.. _zend.barcode.objects.common.options: - -Gemeinsame Optionen -------------------- - -In der folgenden Liste haben die Werte keine Einheit; wir werden den Ausdruck "Einheit" verwenden. Zum Beispiel, -ist der Standardwert "dünner Balken" genau "1 Einheit". Die echte Einheit hängt von der Unterstützung beim -Darstellen ab (siehe :ref:`die Renderer Dokumentation ` für mehr Informationen). Setter -werden benannt indem der erste Buchstabe der Option großgeschrieben und dem Namen "set" vorangestellt wird (z.B. -"barHeight" => "setBarHeight"). Alle Optionen haben einen entsprechenden Getter dem "get" vorangestellt ist (z.B. -"getBarHeight"). Die vorhandenen Optionen sind: - -.. _zend.barcode.objects.common.options.table: - -.. table:: Gemeinsame Optionen - - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ |Standardwert |Beschreibung | - +==================+===================+===================+=================================================================================================================================+ - |barcodeNamespace |String |Zend\Barcode\Object|Namespace des Renderers; zum Beispiel wenn man den Renderer erweitern muss | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |barHeight |Integer |50 |Höhe der Balken | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |barThickWidth |Integer |3 |Breite des dicken Balken | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |barThinWidth |Integer |1 |Breite des dünnen Balkens | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |factor |Integer |1 |Faktor mit dem die Balkenbreiten und Schriftgrößen multipliziert werden | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |foreColor |Integer |0 (schwarz) |Farbe des Balken und des Textes. Könnte als Integer oder als HTML Wert übergeben werden (z.B. "#333333") | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |backgroundColor |Integer oder String|16777125 (white) |Farbe des Hintergrundes. Könnte als Integer oder als HTML Wert übergeben werden (z.B. "#333333") | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |reverseColor |Boolean |FALSE |Erlaubt die Änderung der Farbe des Balken und des Hintergrunds | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |orientation |Integer |0 |Orientierung des Barcodes | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |font |String oder Integer|NULL |Pfad zu einer TTF Schriftart oder eine Zahl zwischen 1 und 5 wenn die Bilderstellung mit GD verwendet wird (interne Schriftarten)| - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |fontSize |Integer |10 |Größe der Schriftart (nicht anwendbar bei nummerischen Schriftarten) | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |withBorder |Boolean |FALSE |Zeichnet einen Rahmen um den Barcode und die Randzonen | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |withQuietZones |Boolean |TRUE |Lässt die Leerzone vor und nach dem Barcode weg | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |drawText |Boolean |TRUE |Setzt ob der Text unter dem Barcode angezeigt wird | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |stretchText |Boolean |FALSE |Spezifiziert ob der Text entlang des kompletten Barcodes gestreckt werden soll | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |withChecksum |Boolean |FALSE |Zeigt ob die Checksumme dem Barcode automatisch hinzugefügt wird oder nicht | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |withChecksumInText|Boolean |FALSE |Zeigt ob die Checksumme in der textuellen Repräsentation angezeigt wird oder nicht | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - |text |String |NULL |Der Text der repräsentiert wird, als Barcode | - +------------------+-------------------+-------------------+---------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.barcode.objects.common.options.barcodefont: - -Spezieller Fall der statischen setBarcodeFont() -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann eine gemeinsame Schriftart für alle eigenen Objekte setzen indem die statische Methode -``Zend\Barcode\Object::setBarcodeFont()`` verwendet wird. Dieser Wert wird von individuellen Objekten immer -überschrieben wenn die ``setFont()`` Methode verwendet wird. - -.. code-block:: php - :linenos: - - // In der eigenen Bootstrap Datei: - Zend\Barcode\Object::setBarcodeFont('my_font.ttf'); - - // Später im eigenen Code: - Zend\Barcode\Barcode::render( - 'code39', - 'pdf', - array('text' => 'ZEND-FRAMEWORK') - ); // will use 'my_font.ttf' - - // oder: - Zend\Barcode\Barcode::render( - 'code39', - 'image', - array( - 'text' => 'ZEND-FRAMEWORK', - 'font' => 3 - ) - ); // will use the 3rd GD internal font - -.. _zend.barcode.objects.common.getters: - -Gemeinsame zusätzliche Getter ------------------------------ - - - -.. _zend.barcode.objects.common.getters.table: - -.. table:: Gemeinsame Getter - - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |Getter |Daten Typ|Beschreibung | - +===================================+=========+==========================================================================================================================+ - |getType() |String |Gibt den Namen der Barcode Klasse ohne den Namespace zurück (z.B. gibt Zend\Barcode\Object\Code39 einfach "code39" zurück)| - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getRawText() |String |Gibt den originalen Text zurück der beim Objekt angegeben wurde | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getTextToDisplay() |String |Gibt den Text zurück welche angezeigt wird, inklusive, wenn aktiviert, den Wert der Checksumme | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getQuietZone() |Integer |Gibt die Größe des Raumes an der vor und nach dem Barcode benötigt wird und keine Zeichnung enthält | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getInstructions() |Array |Gibt die Zeichenanweisungen als Array zurück. | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getHeight($recalculate = false) |Integer |Gibt die Höhe des Barcodes berechnet nach einer möglichen Rotation zurück | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getWidth($recalculate = false) |Integer |Gibt den Wert des Barcodes berechnet nach einer möglichen Rotation zurück | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getOffsetTop($recalculate = false) |Integer |Gibt die oberste Position des Barcodes berechnet nach einer möglichen Rotation zurück | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - |getOffsetLeft($recalculate = false)|Integer |Gibt die linke Position des Barcodes berechnet nach einer möglichen Rotation zurück | - +-----------------------------------+---------+--------------------------------------------------------------------------------------------------------------------------+ - -.. include:: zend.barcode.objects.details.rst - diff --git a/docs/languages/de/modules/zend.barcode.renderers.rst b/docs/languages/de/modules/zend.barcode.renderers.rst deleted file mode 100644 index e2e8d41be..000000000 --- a/docs/languages/de/modules/zend.barcode.renderers.rst +++ /dev/null @@ -1,114 +0,0 @@ -.. EN-Revision: none -.. _zend.barcode.renderers: - -Zend_Barcode Renderer -===================== - -Renderer haben einige gemeinsame Optionen. Diese Optionen können auf vier Wegen gesetzt werden: - -- Als Array oder ``Zend_Config`` Objekt das dem Constructor übergeben wird. - -- Als Array das der ``setOptions()`` Methode übergeben wird. - -- Als ``Zend_Config`` Objekt das der ``setConfig()`` Methode übergeben wird. - -- Als diskreter Wert der an individuelle Setter übergeben wird. - -.. _zend.barcode.renderers.configuration: - -.. rubric:: Unterschiedliche Wegen ein Renderer Objekt zu parametrisieren - -.. code-block:: php - :linenos: - - $options = array('topOffset' => 10); - - // Fall 1 - $renderer = new Zend\Barcode\Renderer\Pdf($options); - - // Fall 2 - $renderer = new Zend\Barcode\Renderer\Pdf(); - $renderer->setOptions($options); - - // Fall 3 - $config = new Zend\Config\Config($options); - $renderer = new Zend\Barcode\Renderer\Pdf(); - $renderer->setConfig($config); - - // Fall 4 - $renderer = new Zend\Barcode\Renderer\Pdf(); - $renderer->setTopOffset(10); - -.. _zend.barcode.renderers.common.options: - -Gemeinsame Optionen -------------------- - -In der folgenden Liste haben die Werte keine Einheit; wir werden den Ausdruck "Einheit" verwenden. Zum Beispiel, -ist der Standardwert "dünner Balken" genau "1 Einheit". Die echte Einheit hängt von der Unterstützung beim -Darstellen ab. Die individuellen Setter werden erkannt indem der erste Buchstabe der Option großgeschrieben und -dem Namen "set" vorangestellt wird (z.B. "barHeight" => "setBarHeight"). Alle Optionen haben einen entsprechenden -Getter dem "get" vorangestellt ist (z.B. "getBarHeight"). Die vorhandenen Optionen sind: - -.. _zend.barcode.renderers.common.options.table: - -.. table:: Gemeinsame Optionen - - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ |Standardwert |Beschreibung | - +====================+===================+=====================+=====================================================================================================================================================================================================================================================================+ - |rendererNamespace |String |Zend\Barcode\Renderer|Namespace des Renderers; zum Beispiel wenn man den Renderer erweitern muss | - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |horizontalPosition |String |"left" |Kann "left", "center" oder "right" sein. Das kann bei PDF nützlich sein, oder wenn die setWidth() Methode mit einem Image Renderer verwendet wird. | - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |verticalPosition |String |"top" |Kann "top", "middle" oder "bottom" sein. Das kann bei PDF nützlich sein, oder wenn die setHeight() Methode mit einem Image Renderer verwendet wird. | - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |leftOffset |Integer |0 |Oberste Position des Barcodes innerhalb des Renderers. Wenn er verwendet wird, überschreibt dieser Wert die Option "horizontalPosition". | - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |topOffset |Integer |0 |Oberste Position des Barcodes innerhalb des Renderers. Wenn er verwendet wird, überschreibt dieser Wert die Option "verticalPosition". | - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |automaticRenderError|Boolean |TRUE |Ob Fehler automatisch dargestellt werden sollen oder nicht. Wenn eine Exception stattfindet, wird das angegebene Barcode Objekt mit einer Repräsentation des Fehlers ersetzt. Es ist zu beachten das einige Fehler (oder Exceptions) nicht dargestellt werden können.| - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |moduleSize |Float |1 |Größe eines darstellenden Moduls im Support. | - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |barcode |Zend\Barcode\Object|NULL |Das Barcode Objekt welches dargestellt werden soll. | - +--------------------+-------------------+---------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Es existiert ein zusätzlicher Getter: ``getType()``. Er gibt den Namen der Renderer Klasse ohne den Namespace -zurück (z.B. gibt ``Zend\Barcode\Renderer\Image``"image" zurück. - -.. _zend.barcode.renderers.image: - -Zend\Barcode\Renderer\Image ---------------------------- - -Der Image Renderer zeichnet die Anweisungsliste des Barcode Obejekts in eine Bild Ressource. Die Komponente -benötigt die GD Erweiterung. Die Standardbreite eines Moduls ist 1 Pixel. - -Vorhandene Optionen sind: - -.. _zend.barcode.renderers.image.table: - -.. table:: Zend\Barcode\Renderer\Image Optionen - - +---------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert|Beschreibung | - +=========+=========+============+===============================================================================================================================+ - |height |Integer |0 |Erlaubt es die Höhe des ergebenen Bildes zu spezifizieren. Wenn diese "0" ist wird die Höhe vom Barcode Objekt kalkuliert. | - +---------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------+ - |width |Integer |0 |Erlaubt es die Breite des ergebenden Bildes zu spezifizieren. Wenn diese "0" ist wird die Breite vom Barcode Objekt kalkuliert.| - +---------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------+ - |imageType|String |"png" |Spezifiziert das Bildformat. Kann "png", "jpeg", "jpg" oder "gif" sein. | - +---------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.barcode.renderers.pdf: - -Zend\Barcode\Renderer\Pdf -------------------------- - -Der *PDF* Renderer zeichnet die Anweisungsliste des Barcode Objekts in ein *PDF* Dokument. Die Standardbreite eines -Moduls ist 0.5 Punkt. - -Es gibt keine speziellen Optionen für diesen Renderer. - - diff --git a/docs/languages/de/modules/zend.cache.backends.rst b/docs/languages/de/modules/zend.cache.backends.rst deleted file mode 100644 index c83efc0c4..000000000 --- a/docs/languages/de/modules/zend.cache.backends.rst +++ /dev/null @@ -1,347 +0,0 @@ -.. EN-Revision: none -.. _zend.cache.backends: - -Zend_Cache Backends -=================== - -Es gibt zwei Arten von Backends: Standard und erweiterte. Natürlich bieten erweiterte Backends mehr Features. - -.. _zend.cache.backends.file: - -Zend\Cache\Backend\File ------------------------ - -Dieses (erweiterte) Backend speichert Cache Datensätze in Dateien (in einem gewählten Verzeichnis). - -Mögliche Optionen sind : - -.. _zend.cache.backends.file.table: - -.. table:: File Backend Optionen - - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert|Beschreibung | - +==========================+=========+============+=====================================================================================================================================================================================================================================================================================================================================================================================+ - |cache_dir |String |'/tmp/' |Verzeichnis, in dem die Cache Dateien gespeichert werden | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |file_locking |Boolean |TRUE |Ein- oder Ausschalten von file_locking: kann die Beschädigung des Caches unter schlechten Bedingungen verhindern, aber es hilft nicht bei Multithreaded Webservern oder bei NFS Filesystemen... | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |read_control |Boolean |TRUE |Ein- oder Ausschalten von read_control: eingeschaltet wird ein Kontrollschlüssel im Cache File inkludiert und dieser Schlüssel wird mit dem Schlüssel verglichen, der nach dem Lesen berechnet wird. | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |read_control_type |String |'crc32' |Typ der Schreibkontrolle (nur wenn read_control eingeschaltet ist). Mögliche Werte sind : 'md5' (bestes, aber am Langsamsten), 'crc32' (etwas weniger sicher, aber schneller, beste Wahl), 'adler32' (neue Wahl, schneller als crc32), 'strlen' um nur die Länge zu testen (schnellstes). | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hashed_directory_level |Integer |0 |Level der gehashten Verzeichnis Struktur: 0 heißt "keine gehashte Verzeichnis Strutur, 1 heißt "ein Level von Verzeichnissen", 2 heißt "zwei Levels"... Diese Option kann den Cache nur dann schneller machen, wenn viele Tausende Cache Dateien verwendet werden. Nur spezielle Messungen können helfen, den perfekten Wert zu finden. Möglicherweise ist 1 oder 2 ein guter Anfang.| - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hashed_directory_umask |Integer |0700 |Umask für die gehashte Verzeichnis Struktur | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |file_name_prefix |String |'zend_cache'|Präfix für Cache Dateien; man muss mit dieser Option sehr vorsichtig umgehen, weil ein zu generischer Wert in einem System Cache Verzeichnis (wie /tmp) kann beim Löschen des Caches zu großen Problemen führen. | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |cache_file_umask |Integer |0700 |umask nach Cache Dateien | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |metatadatas_array_max_size|Integer |100 |Interne maximale Größe für das Metadaten Array (dieser Wert sollte nicht geändert werden außer man weiß was man macht) | - +--------------------------+---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.backends.sqlite: - -Zend\Cache\Backend\Sqlite -------------------------- - -Dieses (erweiterte) Backend speichert die Cache Datensätze in einer SQLite Datenbank. - -Mögliche Optionen sind : - -.. _zend.cache.backends.sqlite.table: - -.. table:: Sqlite Backend Optionen - - +----------------------------------+---------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert|Beschreibung | - +==================================+=========+============+=============================================================================================================================================================================================================================================================================================================================================================================================================================+ - |cache_db_complete_path (mandatory)|String |NULL |Der komplette Pfad (inklusive Dateiname) der SQLite Datenbank | - +----------------------------------+---------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |automatic_vacuum_factor |Integer |10 |Deaktiviert oder stellt den automatischen Vakuumprozess ein. Der automatische Vakuumprozess defragmentiert die Datenbankdatei (und verkleinert sie) wenn clean() oder delete() aufgerufen wird: 0 bedeutet kein automatisches Vakuum; 1 bedeutet systematisches Vakuum (wenn die delete() or clean() Methoden aufgerufen werden; x (integer) > 1 => automatisches Vakuum zufällig einmal pro x clean() oder delete() Aufrufe.| - +----------------------------------+---------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.backends.memcached: - -Zend\Cache\Backend\Memcached ----------------------------- - -Dieses (erweiterte) Backend speichert Cache Datensätze in einem Memcached Server. `memcached`_ ist ein -hoch-performantes, verteiltes Speicher Objekt Caching System. Um dieses Backend zu benutzen, wird ein Memcached -Dämon benötigt und `die Memcached PECL Erweiterung`_. - -Vorsicht: mit diesem Backend werden zur Zeit "Marker" nicht unterstützt genauso wie das -"doNotTestCacheValidity=true" Argument. - -Mögliche Optionen sind : - -.. _zend.cache.backends.memcached.table: - -.. table:: Memcached Backend Optionen - - +-------------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert |Beschreibung | - +=============+=========+=============================================================================================================================================================================+===================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |servers |Array |array(array('host' => 'localhost','port' => 11211, 'persistent' => true, 'weight' => 1, 'timeout' => 5, 'retry_interval' => 15, 'status' => true, 'failure_callback' => '' ))|Ein Array von Memcached Servern; jeder Memcached Server wird durch ein assoziatives Array beschrieben : 'host' => (string) : Der Name des Memcached Servers, 'port' => (int) : Der Port des Memcached Servers, 'persistent' => (bool) : Persistente Verbindungen für diesen Memcached Server verwenden oder nicht 'weight' => (int) : Das Gewicht des Memcached Servers, 'timeout' => (int) : Das Timeout des Memcached Servers, 'retry_interval' => (int) : Das Wiederholungsintervall des Memcached Servers, 'status' => (bool) : Der Status des Memcached Servers, 'failure_callback' => (callback) : Der failure_callback des Memcached Servers| - +-------------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |compression |Boolean |FALSE |TRUE wenn on-the-fly Kompression verwendet werden soll | - +-------------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |compatibility|Boolean |FALSE |TRUE wenn man den Compatibility Modus mit alten Memcache Servern oder Erweiterungen verwenden will | - +-------------+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.backends.apc: - -Zend\Cache\Backend\Apc ----------------------- - -Dieses (erweiterte) Backend speichert Cache Datensätze im Shared Memory durch die `APC`_ (Alternativer *PHP* -Cache) Erweiterung (welche natürlich für die Verwendung dieses Backends benötigt wird). - -Vorsicht: mit diesem Backend werden "Marker" zur Zeit nicht unterstützt genauso wie das -"doNotTestCacheValidity=true" Argument. - -Es gibt keine Optionen für dieses Backend. - -.. _zend.cache.backends.xcache: - -Zend\Cache\Backend\Xcache -------------------------- - -Dieses Backend speichert Cache Einträge im Shared Memory durch die `XCache`_ Erweiterung (welche natürlich -benötigt wird, damit dieses Backend verwendet werden kann). - -Achtung: Bei diesem Backend werden "tags" aktuell nicht unterstützt sowie das "doNotTestCacheValidity=true" -Argument. - -Mögliche Optionen sind: - -.. _zend.cache.backends.xcache.table: - -.. table:: Xcache backend options - - +--------+---------+------------+---------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert|Beschreibung | - +========+=========+============+=================================================================================+ - |user |String |NULL |xcache.admin.user, notwendig für die clean() Methode | - +--------+---------+------------+---------------------------------------------------------------------------------+ - |password|String |NULL |xcache.admin.pass (in offener Form, nicht MD5), notwendig für die clean() Methode| - +--------+---------+------------+---------------------------------------------------------------------------------+ - -.. _zend.cache.backends.platform: - -Zend\Cache\Backend\ZendPlatform -------------------------------- - -Dieses Backend verwendet die Content Caching *API* des `Zend Platform`_ Produktes. Natürlich muss man die Zend -Platform installiert haben, um dieses Backend verwenden zu können. - -Dieses Backend unterstützt Tags, aber nicht den ``CLEANING_MODE_NOT_MATCHING_TAG`` Löschmodus. - -Bei Definition dieses Backends muß ein Trennzeichen -- '-', '.', ' ', oder '\_' -- zwischen den Wörtern 'Zend' -und 'Platform' definiert sein wenn die ``Zend\Cache\Cache::factory()`` Methode verwendet wird: - -.. code-block:: php - :linenos: - - $cache = Zend\Cache\Cache::factory('Core', 'Zend Platform'); - -Es gibt keine Optionen für dieses Backend. - -.. _zend.cache.backends.twolevels: - -Zend\Cache\Backend\TwoLevels ----------------------------- - -Dieses (erweiterte) Backend ist ein Hybrides. Es speichert Cache Einträge in zwei anderen Backends: Ein schnelles -(aber limitiertes) wie Apc, Memcache... und ein "langsames" wie File, Sqlite... - -Dieses Backend verwendet den Priority Parameter (der auf Frontend Level angegeben wird wenn ein Eintrag gespeichert -wird) und den verbleibenden Platz im schnellen Backend um die Verwendung dieser zwei Backends zu optimieren. - -Dieses Backend sollte mit Verwendung eines Word Separators -- '-', '.', ' ', oder '\_' -- zwischen den Wörtern -'Two' und 'Levels' spezifiziert werden wenn die ``Zend\Cache\Cache::factory()`` Methode verwendet wird: - -.. code-block:: php - :linenos: - - $cache = Zend\Cache\Cache::factory('Core', 'Two Levels'); - -Vorhandene Optionen sind: - -.. _zend.cache.backends.twolevels.table: - -.. table:: TwoLevels Backend Optionen - - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Datentyp|Standardwert|Beschreibung | - +==========================+========+============+===============================================================================================================================================================================================================================================+ - |slow_backend |String |File |Der "langsame" Backendname | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |fast_backend |String |Apc |Der "schnelle" Backendname | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |slow_backend_options |Array |array() |Die "langsamen" Backendoptionen | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |fast_backend_options |Array |array() |Die "schnellen" Backendoptionen | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |slow_backend_custom_naming|Boolean |FALSE |Wenn TRUE, wird das slow_backend Argument als kompletter Klassenname verwendet; wenn FALSE, wird das frontend Argument als Ende des "Zend\Cache\Backend\[...]" Klassennamens verwendet | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |fast_backend_custom_naming|Boolean |FALSE |Wenn TRUE, wird das fast_backend Argument als kompletter Klassenname verwendet; wenn FALSE, wird das frontend Argument als Ende des "Zend\Cache\Backend\[...]" Klassennamens verwendet | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |slow_backend_autoload |Boolean |FALSE |Wenn TRUE, wird kein require_once für das langsame Backend verwendet (nur für eigene Backends nützlich) | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |fast_backend_autoload |Boolean |FALSE |Wenn TRUE, wird kein require_once für das schnelle Backend verwendet (nur für eigene Backends nützlich) | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |auto_refresh_fast_cache |Boolean |TRUE |Wenn TRUE, wird der schnelle Cache automatisch refresht wenn ein Cache Eintrag getroffen wird | - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |stats_update_factor |Integer |10 |Ausschalten / Feintunen der Berechnung des Füll-Prozentsatzes des schnellen Backends (wenn ein Eintrag in den Cache gespeichert wird, die Berechnung des Füll-Prozentsatzes des schnellen Backends zufällig 1 mal bei x Cache Schreibvorgängen)| - +--------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.backends.zendserver: - -Zend\Cache\Backend\ZendServer\Disk und Zend\Cache\Backend\ZendServer\ShMem --------------------------------------------------------------------------- - -Diese Backends speichern Cacheeinträge indem Sie die Caching Funktionalitäten von `Zend Server`_ verwenden. - -Achtung: mit diesen Backends werden für den Moment "Tags" nicht unterstützt, wegen dem -"doNotTestCacheValidity=true" Argument. - -Diese Backends arbeiten nur in einer Zend Server Umgebung für Seiten die über *HTTP* oder *HTTPS* angefragt -wurden und nicht für Kommandozeilen Ausführung. - -Dieses Backend muß durch Verwendung des **customBackendNaming** Parameter mit ``TRUE`` spezifiziert werden wenn -die Methode ``Zend\Cache\Cache::factory()`` verwendet wird: - -.. code-block:: php - :linenos: - - $cache = Zend\Cache\Cache::factory('Core', 'Zend\Cache\Backend\ZendServer\Disk', - $frontendOptions, $backendOptions, false, true); - -Es gibt keine Optionen für diese Backends. - -.. _zend.cache.backends.static: - -Zend\Cache\Backend\Static -------------------------- - -Dieses Backend arbeitet in Verbindung mit ``Zend\Cache\Frontend\Capture`` (diese zwei müssen zusammen verwendet -werden) um die Ausgabe von Anfragen als statische Dateien zu speichern. Dies bedeutet das die statischen Dateien -bei weiteren Anfragen direkt serviert werden ohne dass *PHP* oder sogar Zend Framework involviert sind. - -.. note:: - - ``Zend\Cache\Frontend\Capture`` arbeitet indem es eine Callback Funktion registriert welche aufgerufen wird wenn - der Ausgabebuffer den es verwendet gelöscht wird. Damit das richtig funktioniert muss er der letzte - Ausgabebuffer in der Anfrage sein. Um dies zu garantieren **muss** der Ausgabebuffer welcher vom Dispacher - verwendet wird ausgeschaltet sein indem ``Zend\Controller\Front``'s Methode ``setParam()`` verwendet wird, zum - Beispiel ``$front->setParam('disableOutputBuffering', true);`` oder indem - "resources.frontcontroller.params.disableOutputBuffering = true" in der Bootstrap Konfigurationsdatei (wir - nehmen *INI* an) wenn ``Zend_Application`` verwendet wird. - -Der Vorteil dieses Caches besteht darin das eine starke Verbesserung des Durchsatzes stattfindet weil statische -Dateien zurückgegeben werden und keine weitere dynamische Bearbeitung stattfindet. Natürlich gibt es auch einige -Nachteile. Der einzige Weg um dynamische Anfragen wieder zu haben besteht darin die gecachten Dateien von anderswo -in der Anwendung zu löschen (oder über einen Cronjob wenn das zeitlich abgestimmt werden soll). Es ist auch auf -Single-Server Anwendungen begrenzt begrenzt bei denen nur ein Dateisystem verwendet wird. Trotzdem kann es eine -große Bedeutung haben wenn man mehr Geschwindigkeit haben will ohne auf Kosten eines Proxies auf einzelnen -Maschinen zu setzen. - -Bevor die Optionen beschrieben werden sollte man beachten das dies einige Änderungen der Standardwerte in der -``.htaccess`` Datei benötigt damit Anfrage auf die staischen Dateien zeigen wenn diese existieren. Hier ist ein -Beispiel einer einfachen Anwendung die etwas Inhalt cacht, inklusive zwei spezifischer Feeds welche zusätzliche -Behandlung benötigen um einen korrekten Content-Type Header zu schicken: - -.. code-block:: text - :linenos: - - AddType application/rss+xml .xml - AddType application/atom+xml .xml - - RewriteEngine On - - RewriteCond %{REQUEST_URI} feed/rss$ - RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}\.xml -f - RewriteRule ^ cached/%{REQUEST_URI}.xml [L,T=application/rss+xml] - - RewriteCond %{REQUEST_URI} feed/atom$ - RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}\.xml -f - RewriteRule ^ cached/%{REQUEST_URI}.xml [L,T=application/atom+xml] - - RewriteCond %{DOCUMENT_ROOT}/cached/index\.html -f - RewriteRule ^/*$ cached/index.html [L] - RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}\.(html|xml|json|opml|svg) -f - RewriteRule ^ cached/%{REQUEST_URI}.%1 [L] - - RewriteCond %{REQUEST_FILENAME} -s [OR] - RewriteCond %{REQUEST_FILENAME} -l [OR] - RewriteCond %{REQUEST_FILENAME} -d - RewriteRule ^ - [NC,L] - - RewriteRule ^ index.php [NC,L] - -Das obenstehende nimmt an das statische Dateien im Verzeichnis ``./public/cached`` gecacht werden. Wir betrachten -die Einstellung dieses Ortes unter "public_dir" weiter unten. - -Durch die Natur des Cachens von statischen Dateien bietet die Backend Klasse zwei zusätzliche Methoden an: -``remove()`` und ``removeRecursively()``. Beide akzeptieren eine Anfrage *URI* welche, wenn Sie mit dem -"public_dir" in dem statische Dateien gecacht werden verknüpft wird, und eine vor-gespeicherte Erweiterung -angehängt wird, entweder den Namen einer statischen Datei anbietet welche zu löschen ist, oder einen -Verzeichnispfad welcher rekursiv zu löschen ist. Durch die Einschränkung von ``Zend\Cache\Backend\Interface`` -akzeptieren alle anderen Methoden wie ``save()`` eine ID welche durch Anwendung von ``bin2hex()`` auf eine Anfrage -*URI* berechnet wird. - -Durch das Level an dem das statische Cachen arbeitet ist das statische Dateicaching auf eine einfachere Verwendung -mit ``Zend\Controller\Action\Helper\Cache`` ausgelegt. Dieser Helfer assistiert beim Einstellen welche Aktionen -eines Controllers zu cachen sind, mit welchen Tags, und mit welcher Erweiterung. Er bietet auch Methoden für das -Entleeren des Caches durch die Anfrage *URI* oder Tag. Statischen Dateicaching wird auch durch -``Zend\Cache\Manager`` unterstützt welcher vorkonfigurierte Konfigurationstemplates für den statischen Cache -enthält (als ``Zend\Cache\Manager::PAGECACHE`` oder "page"). Die Standardwerte können hierbei wie benötigt -konfiguriert werden um einen "public_dir" Ort für das Cachen zu setzen, usw. - -.. note:: - - Es sollte beachtet werden dass der statische Cache aktuell einen zweiten Cache verwendet um Tags zu speichern - (offensichtlich können wir Sie nicht anderswo speichern da bei einem statischen Cache *PHP* nicht aufgerufen - wird wenn er richtig arbeitet). Das ist nur ein standardmäßiger Core Cache, und er sollte ein persistentes - Backend wie File oder TwoLevels verwenden (um die Vorteile des Memory Speichers zu verwenden ohne die permanente - Persistenz zu opfern). Das Backend enthält die Option "tag_cache" um es zu konfigurieren (das ist - obligatorisch), oder die Methode ``setInnerCache()``. - -.. _zend.cache.backends.static.table: - -.. table:: Statische Backend Optionen - - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Datentyp|Standardwert|Beschreibung | - +=====================+========+============+==============================================================================================================================================================================================================================================================================================================================================================+ - |public_dir |String |NULL |Verzeichnis in dem statische Dateien zu speichern sind. Es muß im öffentlichen Verzeichnis existieren. | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |file_locking |Boolean |TRUE |file_locking aktivieren oder deaktivieren: Kann die Korruption des Caches unter schlechten Umständen verhindern hilft aber nicht bei Multithreaded Webservern oder bei NFS Dateisystemen. | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |read_control |Boolean |TRUE |Lesekontrolle aktivieren oder deaktivieren: Aktiviert wird ein Kontrollschlüssel in die Cachedatei eingebettet und dieser Schlüssel wird mit dem verglichen der nach dem Lesen berechnet wird. | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |read_control_type |String |'crc32' |Typ der Lesekontrolle (nur wenn die Lesekontrolle aktiviert ist). Mögliche Werte sind: 'md5' (am besten aber langsam), 'crc32' (etwas weniger sicher aber schneller, bessere Wahl), 'adler32' (neue Wahl, schneller als cec32), 'strlen' für einen reinen Längentest (am schnellsten). | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |cache_file_umask |Integer |0700 |Umask für gecachte Dateien. | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |cache_directory_umask|Integer |0700 |Umask für Verzeichnisse welche im public_dir erstellt wurden. | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |file_extension |String |'.html' |Standardmäßige Dateierweiterung für erstellt statische Dateien. Diese kann im Fluge konfiguriert werden, siehe Zend\Cache\Backend\Static::save() obwohl generell empfohlen wird sich auf Zend\Controller\Action\Helper\Cache zu verlassen wenn man das macht, weil es ein einfacherer Weg ist als mit Arrays oder der manuellen Serialisierung herumzuspielen.| - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |index_filename |String |'index' |Wenn eine Anfrage URI nicht genügend Informationen enthält um eine statische Datei zu erstellen (normalerweise bedeutet dies einen Indexaufruf, z.B. die URI von '/'), dann wir stattdessen index_filename verwendet. Deshalb würden '' oder '/' auf 'index.html' verweisen (in der Annahme das die standardmäßige file_extension '.html' ist). | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |tag_cache |Object |NULL |Wird verwendet um einen 'inner' Cache zu Setzen der verwendet wird um Tags zu speichern und Dateierweiterungen mit statischen Dateien zu verknüpfen. Das muss gesetzt sein, oder der statische Cache kann nicht verfolgt und gemanagt werden. | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |disable_caching |Boolean |FALSE |Wenn es auf TRUE gesetzt wird, werden statische Dateien nicht gecacht. Das zwingt alle Anfragen dynamisch zu sein, selbst wenn diese markiert und in den Controller gecacht sind. Dies ist für das Debuggen nützlich. | - +---------------------+--------+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - - -.. _`memcached`: http://www.danga.com/memcached/ -.. _`die Memcached PECL Erweiterung`: http://pecl.php.net/package/memcache -.. _`APC`: http://pecl.php.net/package/APC -.. _`XCache`: http://xcache.lighttpd.net/ -.. _`Zend Platform`: http://www.zend.com/en/products/platform -.. _`Zend Server`: http://www.zend.com/en/products/server/downloads-all?zfs=zf_download diff --git a/docs/languages/de/modules/zend.cache.cache.manager.rst b/docs/languages/de/modules/zend.cache.cache.manager.rst deleted file mode 100644 index 889746caf..000000000 --- a/docs/languages/de/modules/zend.cache.cache.manager.rst +++ /dev/null @@ -1,184 +0,0 @@ -.. EN-Revision: none -.. _zend.cache.cache.manager: - -Der Cache Manager -================= - -Es ist die Natur von Anwendungen eine Vielzahl an Caches jedes Types zu benötigen oft abhängig vom Controller, -der Bibliothek oder dem Domainmodell auf das zugegriffen wird. Um die einfache Definition von ``Zend_Cache`` -Optionen zu erlauben (wie von der Bootstrap), damit auf ein Cacheobjekt zugegriffen werden kann und nur ein -minimales Setup im Sourcecode der Anwendung benötigt wird, wurde die Klasse ``Zend\Cache\Manager`` geschrieben. -Diese Klasse wird von ``Zend\Application\Resource\Cachemanager`` verwendet um sicherzustellen das die Konfiguration -der Bootstrap vorhanden ist, und ``Zend\Controller\Action\Helper\Cache`` um einen einfachen Zugriff und eine -einfache Instanzierung von Controllern und anderen Helfern zu erlauben. - -Die grundsätzliche Operation dieser Komponente ist wie folgt. Der Cache Manager erlaubt es Benutzern "Option -Templates" zu konfigurieren, grundsätzlich Optionen für ein Set von benannten Caches. Diese können gesetzt -werden indem die Methode ``Zend\Cache\Manager::setCacheTemplate()`` verwendet wird. Diese Templates führen einen -Cache nicht aus solange der Benutzer nicht versucht einen benannten Cache zu empfangen (assoziiert mit einem -existierenden Optionstemplate) indem die Methode ``Zend\Cache\Manager::getCache()`` verwendet wird. - -.. code-block:: php - :linenos: - - $manager = new Zend\Cache\Manager; - - $dbCache = array( - 'frontend' => array( - 'name' => 'Core', - 'options' => array( - 'lifetime' => 7200, - 'automatic_serialization' => true - ) - ), - 'backend' => array( - 'name' => 'Core', - 'options' => array( - 'cache_dir' => '/path/to/cache' - ) - ) - ); - - $manager->setCacheTemplate('database', $dbCache); - - /** - * Überall anders wo der Cache Manager vorhanden ist... - */ - $databaseCache = $manager->getCache('database'); - -Der Cache Manager erlaubt das einfache Erstellen von vor-instanzierten Caches durch Verwenden der Methode -``Zend\Cache\Manager::setCache()``. - -.. code-block:: php - :linenos: - - $frontendOptions = array( - 'lifetime' => 7200, - 'automatic_serialization' => true - ); - - $backendOptions = array( - 'cache_dir' => '/path/to/cache' - ); - - $dbCache = Zend\Cache\Cache::factory('Core', - 'File', - $frontendOptions, - $backendOptions); - - $manager = new Zend\Cache\Manager; - $manager->setCache('database', $dbCache); - - /** - * Überall anders wo der Cache Manager vorhanden ist... - */ - $databaseCache = $manager->getCache('database'); - -Wenn man aus irgendeinem Grund unsicher ist ob der Cache Manager einen vor-instanzierten Cache enthält oder ein -relevantes Option Cache Template um einen auf Anfrage zu erstellen, kann die Existenz einer benannten -Cachekonfiguration oder Instanz geprüft werden indem die Methode ``Zend\Cache\Manager::hasCache()`` verwendet -wird. - -.. code-block:: php - :linenos: - - $manager = new Zend\Cache\Manager; - - $dbCache = array( - 'frontend' => array( - 'name' => 'Core', - 'options' => array( - 'lifetime' => 7200, - 'automatic_serialization' => true - ) - ), - 'backend' => array( - 'name' => 'Core', - 'options' => array( - 'cache_dir' => '/path/to/cache' - ) - ) - ); - - $manager->setCacheTemplate('database', $dbCache); - - /** - * Überall anders wo der Cache Manager vorhanden ist... - */ - if ($manager->hasCache('database')) { - $databaseCache = $manager->getCache('database'); - } else { - // Erstelle einen Cache wenn keiner from Manager vorhanden ist - } - -In einigen Szenarios könnte man eine Anzahl von generell zu verwendenden Caches definiert haben indem -``Zend\Cache\Manager`` verwendet wird, aber deren Optionen feintunen bevor Sie anhängig von Ihren Notwendigkeiten -verwendet werden. Man kann vorher gesetzte Cache Templates on the fly bearbeiten bevor Sie instanziert werden indem -die Methode ``Zend\Cache\Manager::setTemplateOptions()`` verwendet wird. - -.. code-block:: php - :linenos: - - $manager = new Zend\Cache\Manager; - - $dbCache = array( - 'frontend' => array( - 'name' => 'Core', - 'options' => array( - 'lifetime' => 7200, - 'automatic_serialization' => true - ) - ), - 'backend' => array( - 'name' => 'Core', - 'options' => array( - 'cache_dir' => '/path/to/cache' - ) - ) - ); - - $manager->setCacheTemplate('database', $dbCache); - - /** - * Überall anders wo der Cache Manager vorhanden ist... - * Hier haben wir entschieden einige kommende Datenbankabfragen zu Memcache zu - * Speichern statt dem vorkonfigurierten File Backend - */ - $fineTuning = array( - 'backend' => array( - 'name' => 'Memcached', - 'options' => array( - 'servers' => array( - array( - 'host' => 'localhost', - 'port' => 11211, - 'persistent' => true, - 'weight' => 1, - 'timeout' => 5, - 'retry_interval' => 15, - 'status' => true, - 'failure_callback' => '' - ) - ) - ) - ) - ); - $manager->setTemplateOptions('database', $fineTuning); - $databaseCache = $manager->getCache('database'); - -Um zu helfen den Cache Manager sinnvoller zu machen wird ``Zend\Application\Resource\Cachemanager`` und auch der -Action Helfer ``Zend\Controller\Action\Helper\Cache`` angeboten. Beide sind in den betreffenden Abschnitten des -Referenz Handbuchs beschrieben. - -``Zend\Cache\Manager`` enthält bereits vier vordefinierte Cache Templates welche "skeleton", "default", "page" und -"tagcache" heißen. Der Standardcache ist ein einfacher Dateibasierter Cache welcher das Core Frontend verwendet -und annimmt das ein cache_dir auf dem gleichen Level wie das konventionelle "public" Verzeichnis einer Zend -Framework Anwendung existiert und "cache" heißt. Der Skeleton Cache ist aktuell ein ``NULL`` Cache, er enthält -also keine Optionen. Die verbleibenden zwei Caches werden verwendet um einen standardmäßigen statischen -Seitencache zu implementieren wobei statisches *HTML*, *XML* oder sogar *JSON* in statische Dateien unter -``/public`` geschrieben sein können. Die Kontrolle über einen statischen Seitencache wird über -``Zend\Controller\Action\Helper\Cache`` angeboten, und man kann die Einstellungen dieser "page" verändern und den -"tagcache" den Sie verwendet um Tags zu verfolgen indem ``Zend\Cache\Manager::setTemplateOptions()`` verwendet -wird, oder sogar ``Zend\Cache\Manager::setCacheTemplate()`` wenn alle deren Optionen überladen werden. - - diff --git a/docs/languages/de/modules/zend.cache.frontends.rst b/docs/languages/de/modules/zend.cache.frontends.rst deleted file mode 100644 index c529e32bf..000000000 --- a/docs/languages/de/modules/zend.cache.frontends.rst +++ /dev/null @@ -1,592 +0,0 @@ -.. EN-Revision: none -.. _zend.cache.frontends: - -Zend_Cache Frontends -==================== - -.. _zend.cache.frontends.core: - -Zend\Cache\Core ---------------- - -.. _zend.cache.frontends.core.introduction: - -Einführung -^^^^^^^^^^ - -``Zend\Cache\Core`` ist ein spezielles Frontend, da es der Kern dieses Moduls ist. Es ist ein generelles Cache -Frontend und wurde von anderen Klassen erweitert. - -.. note:: - - Alle Frontends sind von ``Zend\Cache\Core`` abgeleitet, so dass deren Methoden und Optionen (wie folgt - beschrieben) auch in anderen Frontends vorhanden sind. Deswegen werden sie dort nicht dokumentiert. - -.. _zend.cache.frontends.core.options: - -Mögliche Optionen -^^^^^^^^^^^^^^^^^ - -Diese Optionen werden der Factory Methode übergeben wie im nachfolgenden Beispiel demonstriert. - -.. _zend.cache.frontends.core.options.table: - -.. table:: Core Frontend Optionen - - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert|Beschreibung | - +=========================+=========+============+================================================================================================================================================================================================================================================================================================================================================================================================================+ - |caching |Boolean |TRUE |Ein= / Ausschalten vom Caching (kann sehr nützlich für das Debuggen von gecachten Skripten sein) | - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |cache_id_prefix |String |NULL |Ein Präfix für alle Cache IDs. Wenn er auf NULL gesetzt wird, wird kein Cache ID Präfix verwendet. Der Cache ID Präfix erstellt grundsätzlich einen Namespace im Cache, der verschiedenen Anwendungen oder Websites die Verwendung eines gemeinsamen Caches erlaubt. Jede Anwendung oder Website kann einen anderen Cache ID Prüfix verwenden sodas spezielle Cache IDs mehr als einmal verwendet werden können.| - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |lifetime |Integer |3600 |Cache Lebensdauer (in Sekunden), wenn auf NULL gesetzt, ist der Cache für immer gültig. | - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |logging |Boolean |FALSE |Wenn auf TRUE gesetzt, wird das Logging durch Zend_Log aktiviert (aber das System wird langsamer) | - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |write_control |Boolean |TRUE |Ein- / Ausschalten der Schreibkontrolle (der Cache wird gleich gelesen, nachdem er geschrieben wurde, um fehlerhafte Einträge zu finden); das Einschalten der Schreibkontrolle wird das Schreiben des Caches etwas verlangsamen, aber nicht das Lesen des Caches (es können defekte Cache Dateien entdeckt werden, aber es ist keine perfekte Kontrolle) | - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |automatic_serialization |Boolean |FALSE |Ein- / Ausschalten der automatischen Serialisierung, kann dafür benutzt werden, um Daten direkt zu speichern, welche keine Strings sind (aber es ist langsamer) | - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |automatic_cleaning_factor|Integer |10 |Ausschalten / Abgleichen des automatischen Löschprozesses (Garbage Collector): 0 heißt keine automatische Löschung des Caches, 1 heißt Systematische Cache Löschung und x > 1 heißt automatisches zufälliges Löschen 1 mal nach x Schreiboperationen. | - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |ignore_user_abort |Boolean |FALSE |Auf TRUE gesetzt, wird der Kern das PHP Flag ignore_user_abort innerhalb der save() Methode setzen um Cache Korruption in einigen Fällen zu verhindern | - +-------------------------+---------+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.core.examples: - -Beispiele -^^^^^^^^^ - -Ein Beispiel wird ganz am Anfang des Handbuches gegeben. - -Wenn nur Strings in den Cache gespeichert werden (denn mit der "automatic_serialization" Option wäre es möglich -Booleans zu speichern), kann ein kompakterer Weg wie folgt gewählt werden: - -.. code-block:: php - :linenos: - - // Es wird angenommen das $cache existiert - - $id = 'myBigLoop'; // Die Cache ID von dem "das gecached werden soll" - - if (!($data = $cache->load($id))) { - // Cache miss - - $data = ''; - for ($i = 0; $i < 10000; $i++) { - $data = $data . $i; - } - - $cache->save($data); - - } - - // [...] Irgendwas mit $data machen (ausgeben, verarbeiten, usw.) - -Wenn mehrere Blöcke von Daten oder Daten Instanzen gecached werden sollen, ist die Idee dahinter die gleiche: - -.. code-block:: php - :linenos: - - // Sicherstellen, dass eindeutige Identifizierer verwendet werden: - $id1 = 'foo'; - $id2 = 'bar'; - - // Block 1 - if (!($data = $cache->load($id1))) { - // Cache miss - - $data = ''; - for ($i=0;$i<10000;$i++) { - $data = $data . $i; - } - - $cache->save($data); - - } - echo($data); - - // Hier wird NIE gecached - echo('NIE GECACHED! '); - - // Block 2 - if (!($data = $cache->load($id2))) { - // Cache miss - - $data = ''; - for ($i=0;$i<10000;$i++) { - $data = $data . '!'; - } - - $cache->save($data); - - } - echo($data); - -Wenn spezielle Werte gecached werden sollen (boolean mit der "automatic_serialization" Option) oder leere Strings -kann die kompakte Erstellung wie oben gezeigt nicht verwendet werden. Der Cache Eintrag muß formell getestet -werden. - -.. code-block:: php - :linenos: - - // Die kompakte Erstellung - // (nicht gut wenn leere Strings und/oder boolsche Werte gecached werden) - if (!($data = $cache->load($id))) { - - // Cache fehlgeschlagen - - // [...] wir erstellen $data - - $cache->save($data); - - } - - // wir machen etwas mit $data - - // [...] - - // die komplette Erstellung (funktioniert in jedem Fall) - if (!($cache->test($id))) { - - // Cache fehlgeschlagen - - // [...] wir erstellen $data - - $cache->save($data); - - } else { - - // Cache getroffen - - $data = $cache->load($id); - - } - - // Wir machen irgendetwas mit $data - -.. _zend.cache.frontends.output: - -Zend\Cache\Frontend\Output --------------------------- - -.. _zend.cache.frontends.output.introduction: - -Einführung -^^^^^^^^^^ - -``Zend\Cache\Frontend\Output`` ist ein Ausgabe-Empfangendes Frontend. Es verwendet den Ausgabe Puffer in *PHP*, um -alles zwischen der ``start()`` und der ``end()`` Methode zu fangen. - -.. _zend.cache.frontends.output.options: - -Mögliche Optionen -^^^^^^^^^^^^^^^^^ - -Dieses Frontend hat keine bestimmten Optionen zusätzlich zu denen von ``Zend\Cache\Core``. - -.. _zend.cache.frontends.output.examples: - -Beispiele -^^^^^^^^^ - -Ein Beispiel wird ganz am Anfang des Handbuches gegeben. Hier ist es mit kleinen Änderungen: - -.. code-block:: php - :linenos: - - // Wenn es ein Cache Miss ist, wird das puffern der Ausgabe ausgelöst - if (!($cache->start('mypage'))) { - - // Alle wie gewohnt ausgeben - echo 'Hallo Welt! '; - echo 'Das wird gecached ('.time().') '; - - $cache->end(); // Ausgabepufferung beenden - - } - - echo 'Hier wird nie gecached ('.time().').'; - -Die Verwendung dieser Form ist ziemlich einfach, um Ausgabe caching in einem bereits bestehenden Projekt, mit nur -wenig oder gar keinen Codeänderungen, zu erhalten. - -.. _zend.cache.frontends.function: - -Zend\Cache\Frontend\Function ----------------------------- - -.. _zend.cache.frontends.function.introduction: - -Einführung -^^^^^^^^^^ - -``Zend\Cache\Frontend\Function`` cached das Ergebnis von Funktionsaufrufen. Es hat eine einzelne Hauptmethode -genannt ``call()``, welche den Funktionsnamen und Parameter für den Aufruf in einem Array entgegennimmt. - -.. _zend.cache.frontends.function.options: - -Mögliche Optionen -^^^^^^^^^^^^^^^^^ - -.. _zend.cache.frontends.function.options.table: - -.. table:: Cache Frontend Optionen - - +--------------------+---------+------------+----------------------------------------------------------+ - |Option |Daten Typ|Standardwert|Beschreibung | - +====================+=========+============+==========================================================+ - |cache_by_default |Boolean |TRUE |Wenn TRUE, wird der Funktionsaufruf standardmäßig gecached| - +--------------------+---------+------------+----------------------------------------------------------+ - |cached_functions |Array | |Funktionsnamen, die immer gecached werden sollen | - +--------------------+---------+------------+----------------------------------------------------------+ - |non_cached_functions|Array | |Funktionsnamen, die nie gecached werden sollen | - +--------------------+---------+------------+----------------------------------------------------------+ - -.. _zend.cache.frontends.function.examples: - -Beispiele -^^^^^^^^^ - -Die Verwendung der ``call()`` Funktion ist die gleiche, wie die von ``call_user_func_array()`` in *PHP*: - -.. code-block:: php - :linenos: - - $cache->call('veryExpensiveFunc', $params); - - // $params ist ein Array - // Für das Aufrufen von veryExpensiveFunc(1, 'foo', 'bar') mit Caching kann, - // z.B. $cache->call('veryExpensiveFunc', array(1, 'foo', 'bar')) benutzt - // werden - -``Zend\Cache\Frontend\Function`` ist elegant genug, um beides zu cachen, den Rückgabewert der Funktion und deren -interne Ausgabe. - -.. note:: - - Man kann jede eingebaute oder benutzerdefinierte Funktion übergeben, mit Ausnahme von ``array()``, ``echo()``, - ``empty()``, ``eval()``, ``exit()``, ``isset()``, ``list()``, ``print()`` und ``unset()``. - -.. _zend.cache.frontends.class: - -Zend\Cache\Frontend\Class -------------------------- - -.. _zend.cache.frontends.class.introduction: - -Einführung -^^^^^^^^^^ - -``Zend\Cache\Frontend\Class`` ist unterschiedlich zu ``Zend\Cache\Frontend\Function``, weil es das Cachen von -Objekten und statischen Methodenaufrufen erlaubt. - -.. _zend.cache.frontends.class.options: - -Mögliche Optionen -^^^^^^^^^^^^^^^^^ - -.. _zend.cache.frontends.class.options.table: - -.. table:: Class Frontend Optionen - - +-------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Datentyp|Standardwert|Beschreibung | - +=========================+========+============+===================================================================================================================================================================================+ - |cached_entity (Notwendig)|Mixed | |Wenn auf einen Klassennamen gesetzt, wird eine abstrakte Klasse gecached und es werden statische Aufrufe verwendet; wenn auf ein Objekt gesetzt, wird deren Objektmethoden gecached| - +-------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |cache_by_default |Boolean |TRUE |Wenn TRUE, wird der Aufruf standardmäßig gecached | - +-------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |cached_methods |Array | |Methodennamen, die immer gecached werden sollen | - +-------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |non_cached_methods |Array | |Methodennamen, die nie gecached werden sollen | - +-------------------------+--------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.frontends.class.examples: - -Beispiele -^^^^^^^^^ - -zum Beispiel, um einen statischen Aufruf zu cachen: - -.. code-block:: php - :linenos: - - class Test { - - // Statische Methode - public static function foobar($param1, $param2) { - echo "foobar_output($param1, $param2)"; - return "foobar_return($param1, $param2)"; - } - - } - - // [...] - $frontendOptions = array( - 'cached_entity' => 'Test' // Der Name der Klasse - ); - // [...] - - // Der gecachte Aufruf - $result = $cache->foobar('1', '2'); - -Um klassische Methodenaufrufe zu cachen : - -.. code-block:: php - :linenos: - - class Test { - - private $_string = 'Hallo !'; - - public function foobar2($param1, $param2) { - echo($this->_string); - echo "foobar2_output($param1, $param2)"; - return "foobar2_return($param1, $param2)"; - } - - } - - // [...] - $frontendOptions = array( - 'cached_entity' => new Test() // Eine Instanz der Klasse - ); - // [...] - - // Der gecachte Aufruf - $res = $cache->foobar2('1', '2'); - -.. _zend.cache.frontends.file: - -Zend\Cache\Frontend\File ------------------------- - -.. _zend.cache.frontends.file.introduction: - -Einführung -^^^^^^^^^^ - -``Zend\Cache\Frontend\File`` ist ein Frontend angetrieben durch den Änderungszeitpunkt einer "Masterdatei". Es ist -wirklich interessant für Beispiele in Konfigurations- oder Templateanwendungen. Es ist auch möglich mehrere -Masterdateien zu verwenden. - -Zum Beispiel eine *XML* Konfigurationsdatei, welche von einer Funktion geparsed wird und die ein "Config Objekt" -zurückgibt (wie durch ``Zend_Config``). Mit ``Zend\Cache\Frontend\File`` kann das "Config Objekt" im Cache -gespeichert werden (um zu Verhindern, das die *XML* Konfiguration jedes mal geparsed wird), aber mit einer strengen -Abhängigkeit zur "Masterdatei". Wenn also die *XML* Konfigurationsdatei geändert wird, wird der Cache sofort -ungültig. - -.. _zend.cache.frontends.file.options: - -Mögliche Optionen -^^^^^^^^^^^^^^^^^ - -.. _zend.cache.frontends.file.options.table: - -.. table:: File Frontend Optionen - - +---------------------------+---------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert |Beschreibung | - +===========================+=========+=================================+==============================================================================================================================================================================================================================================================+ - |master_File (depreciated) |String |'' |Der komplette Pfad und Name der Master Datei | - +---------------------------+---------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |master_files |Array |array() |Ein Array der kompletten Pfade der Masterdateien | - +---------------------------+---------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |master_files_mode |String |Zend\Cache\Frontend\File::MODE_OR|Zend\Cache\Frontend\File::MODE_AND oder Zend\Cache\Frontend\File::MODE_OR ; bei MODE_AND müssen alle Masterdateien angegriffen werden um einen Cache ungültig zu machen, bei MODE_OR ist eine eizelne angegriffene Datei genug um den Cache ungültig zu machen| - +---------------------------+---------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |ignore_missing_master_files|Boolean |FALSE |bei TRUE werden fehlende Masterdateien leise ignoriert (andernfalls wird eine Exception geworfen) | - +---------------------------+---------+---------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.frontends.file.examples: - -Beispiele -^^^^^^^^^ - -Die Verwendung dieses Frontends ist die gleiche wie die von ``Zend\Cache\Core``. Es gibt kein eigenes Beispiel - -was als einziges gemacht werden muß, ist das **master_File** zu definieren, wenn die Factory verwendet wird. - -.. _zend.cache.frontends.page: - -Zend\Cache\Frontend\Page ------------------------- - -.. _zend.cache.frontends.page.introduction: - -Einführung -^^^^^^^^^^ - -``Zend\Cache\Frontend\Page`` ist wie ``Zend\Cache\Frontend\Output`` aber entwickelt für eine komplette Seite. Es -ist unmöglich ``Zend\Cache\Frontend\Page`` nur für das Cachen eines einzelnen Blockes zu verwenden. - -Andererseits wird die "Cache ID" automatisch berechnet mit ``$_SERVER['REQUEST_URI']`` und (abhängig von den -Optionen) mit ``$_GET``, ``$_POST``, ``$_SESSION``, ``$_COOKIE``, ``$_FILES``. Trotzdem muß nur eine Methode -aufgerufen werden (``start()``), weil der Aufruf von ``end()`` immer vollautomatisch ist, wenn die Seite endet. - -Zur Zeit ist es nicht eingebaut, aber es ist ein *HTTP* abhängiges System geplant, um Bandbreiten zu sparen (das -System wird ein "*HTTP* 304 nicht geändert" schicken, wenn der Cache gefunden wurde und wenn der Browser bereits -eine gültige Version hat). - -.. note:: - - Dieses Frontend arbeitet indem es eine Callback Funktion registriert welche aufgerufen wird wenn das Buffern der - Ausgabe welches es verwendet, gelöscht wird. Damit dies korrekt arbeitet muss es der letzte Ausgabebuffer in - der Anfrage sein. Um dies zu garantieren **muss** der Ausgabebuffer, den der Dispatcher verwendet, deaktiviert - sein indem die ``setParam()`` Methode von ``Zend\Controller\Front`` verwendet wird. Zum Beispiel - ``$front->setParam('disableOutputBuffering', true)`` oder durch Hinzufügen von - "resources.frontcontroller.params.disableOutputBuffering = true" zum eigenen Konfigurationsdatei der Bootstrap - (*INI* angenommen) wenn ``Zend_Application`` verwendet wird. - -.. _zend.cache.frontends.page.options: - -Mögliche Optionen -^^^^^^^^^^^^^^^^^ - -.. _zend.cache.frontends.page.options.table: - -.. table:: Page Frontend Optionen - - +----------------+---------+------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Option |Daten Typ|Standardwert |Beschreibung | - +================+=========+========================+======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |http_conditional|Boolean |FALSE |Verwendung des http_conditional Systems (zur Zeit nicht implementiert) | - +----------------+---------+------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |debug_header |Boolean |FALSE |Wenn TRUE, wird ein Debugging Text vor jeder gecacheten Seite hinzugefügt | - +----------------+---------+------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |default_options |Array |array(...siehe unten...)|Ein assoziatives Array mit Standard Optionen: (boolean, TRUE per Default) cache: Cache ist aktiviert wenn TRUE(boolean, FALSE per Default) cache_with_get_variables: wenn TRUE, ist der Cache weiterhin aktiviert, selbst wenn es einige Variablen im $_GET Array gibt (boolean, FALSE per Default) cache_with_post_variables: wenn TRUE, ist der Cache weiterhin aktiviert, selbst wenn es einige Variablen im $_POST Array gibt (boolean, FALSE per Default) cache_with_session_variables: wenn TRUE, ist der Cache weiterhin aktiviert, selbst wenn es einige Variablen im $_SESSION Array gibt (boolean, FALSE per Default) cache_with_files_variables: wenn TRUE, ist der Cache weiterhin aktiviert, selbst wenn es einige Variablen im $_FILES Array gibt (boolean, FALSE per Default) cache_with_cookie_variables: wenn TRUE, ist der Cache weiterhin aktiviert, selbst wenn es einige Variablen im $_COOKIE Array gibt (boolean, TRUE per Default) make_id_with_get_variables: wenn TRUE, wird die Cache ID vom Inhalt des $_GET Arrays abhängig sein (boolean, TRUE per Default) make_id_with_post_variables: wenn TRUE, wird die Cache ID vom Inhalt des $_POST Arrays abhängig sein (boolean, TRUE per Default) make_id_with_session_variables: wenn TRUE, wird die Cache ID vom Inhalt des $_SESSION Arrays abhängig sein (boolean, TRUE per Default) make_id_with_files_variables: wenn TRUE, wird die Cache ID vom Inhalt des $_FILES Arrays abhängig sein (boolean, TRUE per Default) make_id_with_cookie_variables: wenn TRUE, wird die Cache ID vom Inhalt des $_COOKIE Arrays abhängig sein (int, FALSE by default) specific_lifetime: wenn nicht FALSE, wird die angegebene Lifetime für das ausgewählte Regex verwendet (array, array() by default) tags: Tags für den Cache Eintrag (int, NULL by default) priority: Priorität (wenn das Backend das unterstützt)| - +----------------+---------+------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |regexps |Array |array() |Ein assoziatives Array, um Optionen nur für einige REQUEST_URI zu setzen. Die Schlüssel sind reguläre Ausdrücke (PCRE), die Werte sind ein assoziatives Array mit spezifischen Optionen, die gesetzt werden sollen, wenn der reguläre Ausdruck auf $_SERVER['REQUEST_URI'] passt (siehe die default_options für eine Liste der verfügbaren Optionen); wenn verschiedene reguläre Ausdrücke auf $_SERVER['REQUEST_URI'] passen, wird nur der letzte verwendet. | - +----------------+---------+------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |memorize_headers|Array |array() |Ein Array von Strings die zu einem HTTP Headernamen korrespondieren. Aufgelistete Header werden mit den Cache Daten gespeichert und wieder "abgespielt" wenn der Cache getroffen wird. | - +----------------+---------+------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.cache.frontends.page.examples: - -Beispiele -^^^^^^^^^ - -Die Verwendung von ``Zend\Cache\Frontend\Page`` ist wirklich trivial : - -.. code-block:: php - :linenos: - - // [...] // Benötigt, Konfiguration und Factory - - $cache->start(); - // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt, - // und das Skript stoppt hier - - // Rest der Seite ... - -Ein etwas komplexeres Beispiel, welches einen Weg zeigt, um ein zentralisiertes Cache Management in einer Bootstrap -Datei zu erhalten (um es z.B. mit ``Zend_Controller`` zu verwenden) - -.. code-block:: php - :linenos: - - /* - * Es sollte vermieden werden, zu viele Zeilen vor dem Cache Bereich zu setzen - * zum Beispiel sollten für optimale Performanz "require_once" oder - * "Zend\Loader\Loader::loadClass" nach dem Cache Bereich stehen - */ - - $frontendOptions = array( - 'lifetime' => 7200, - 'debug_header' => true, // für das Debuggen - 'regexps' => array( - // cache den gesamten IndexController - '^/$' => array('cache' => true), - - // cache den gesamten IndexController - '^/index/' => array('cache' => true), - - // wir cachen nicht den ArticleController... - '^/article/' => array('cache' => false), - - // ...aber wir cachen die "View" Aktion von diesem ArticleController - '^/article/view/' => array( - 'cache' => true, - - // und wir cachen sogar wenn es einige Variablen in $_POST gibt - 'cache_with_post_variables' => true, - - // aber die Cache Id wird vom $_POST Array abhängig sein - 'make_id_with_post_variables' => true, - ) - ) - ); - - $backendOptions = array( - 'cache_dir' => '/tmp/' - ); - - // erhalte ein Zend\Cache\Frontend\Page Objekt - $cache = Zend\Cache\Cache::factory('Page', - 'File', - $frontendOptions, - $backendOptions); - - $cache->start(); - - // Wenn der Cache gefunden wurde, wird das Ergebnis zum Browser geschickt, - // und das Skript stoppt hier - - // [...] das Ende der Bootstrap Datei - // diese Zeilen werden nicht ausgeführt, wenn der Cache ausgegeben wurde - -.. _zend.cache.frontends.page.cancel: - -Die spezielle cancel Methode -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Aus Designgründen, kann es in einigen Fällen (zum Beispiel bei Verwendung von nicht *HTTP* 200 Return Codes), -notwendig sein den aktuellen Cacheprozess zu unterbrechen. Deshalb zeigen wir für dieses spezielle Frontend die -``cancel()`` Methode. - -.. code-block:: php - :linenos: - - // [...] // Benötigt, Konfiguration und Factory - - $cache->start(); - - // [...] - - if ($someTest) { - $cache->cancel(); - // [...] - } - - // [...] - -.. _zend.cache.frontends.capture: - -Zend\Cache\Frontend\Capture ---------------------------- - -.. _zend.cache.frontends.capture.introduction: - -Einführung -^^^^^^^^^^ - -``Zend\Cache\Frontend\Capture`` ist wie ``Zend\Cache\Frontend\Output`` aber für komplette Seiten gestaltet. Es ist -nicht möglich ``Zend\Cache\Frontend\Capture`` für das Cachen eines einzelnen Blocks zu verwenden. Diese Klasse -ist speziell dazu gestaltet um nur in Verbindung mit dem ``Zend\Cache\Backend\Static`` Backend zu funktionieren -indem es komplette Seiten von *HTML*/*XML* oder anderen Inhalten in einer statischen physikalischen Datei auf dem -lokalen Dateisystem cached. - -Sehen Sie bitte in die Dokumentation von ``Zend\Cache\Backend\Static`` für alle Use Cases bezüglich dieser -Klasse. - -.. note:: - - Dieses Frontend arbeitet indem es eine Callback Funktion registriert welche aufgerufen wird wenn das Buffern der - Ausgabe welches es verwendet, gelöscht wird. Damit dies korrekt arbeitet muss es der letzte Ausgabebuffer in - der Anfrage sein. Um dies zu garantieren *muss* der Ausgabebuffer, den der Dispatcher verwendet, deaktiviert - sein indem die ``setParam()`` Methode von ``Zend\Controller\Front`` verwendet wird. Zum Beispiel - ``$front->setParam('disableOutputBuffering', true)`` oder durch Hinzufügen von - "resources.frontcontroller.params.disableOutputBuffering = true" zum eigenen Konfigurationsdatei der Bootstrap - (*INI* angenommen) wenn ``Zend_Application`` verwendet wird. - - diff --git a/docs/languages/de/modules/zend.cache.introduction.rst b/docs/languages/de/modules/zend.cache.introduction.rst deleted file mode 100644 index 69a78bdb5..000000000 --- a/docs/languages/de/modules/zend.cache.introduction.rst +++ /dev/null @@ -1,139 +0,0 @@ -.. EN-Revision: none -.. _zend.cache.introduction: - -Einführung -========== - -``Zend_Cache`` bietet einen generellen Weg für das Cachen von Daten. - -Cachen im Zend Framework wird mit Frontends durchgeführt, wobei Cache Datensätze über Backend Adapter (**File**, -**Sqlite**, **Memcached**...), durch ein flexibles System von IDs und Tags, gespeichert werden. Durch deren -Verwendung ist es einfach, spezielle Typen von Datensätzen im Nachhinein zu Löschen (zum Beispiel: "Löschen -aller Cache Datensätze welche mit einem bestimmten Tag markiert sind"). - -Der Kern des Moduls (``Zend\Cache\Core``) ist generell, flexibel und konfigurierbar. Nun gibt es - für spezielle -Bedürfnisse - Cache Frontends, welche ``Zend\Cache\Core`` erweitern: **Output**, **File**, **Function** und -**Class**. - -.. _zend.cache.introduction.example-1: - -.. rubric:: Ein Frontend mit Zend\Cache\Cache::factory() erzeugen - -``Zend\Cache\Cache::factory()`` instanziiert korrekte Objekte und fügt sie zusammen. In diesem ersten Beispiel wird das -**Core** Frontend zusammen mit dem **File** Backend verwendet. - -.. code-block:: php - :linenos: - - $frontendOptions = array( - 'lifetime' => 7200, // Lebensdauer des Caches 2 Stunden - 'automatic_serialization' => true - ); - - $backendOptions = array( - 'cache_dir' => './tmp/' // Verzeichnis, in welches die Cache Dateien kommen - ); - - // Ein Zend\Cache\Core Objekt erzeugen - $cache = Zend\Cache\Cache::factory('Core', - 'File', - $frontendOptions, - $backendOptions); - -.. note:: - - **Frontends und Backends bestehend aus mehrfachen Wörtern** - - Bei einige Frontends und Backends werden mehrere Wörter verwendet wie z.B. 'ZendPlatform'. Wenn diese der - Fabrik spezifiziert werden, müssen diese aufgeteilt werden indem man ein Trennzeichen verwendet, wie z.B. das - Leerzeichen (' '), Bindestrich ('-'), oder den Punkt ('.'). - -.. _zend.cache.introduction.example-2: - -.. rubric:: Das Ergebnis einer Datenbankabfrage cachen - -Jetzt, da wir ein Frontend haben, kann jeder Typ von Daten gecached werden (Serialisierung ist eingeschaltet). Zum -Beispiel können Ergebnisse von sehr umfangreichen Datenbankabfragen gecached werden. Nach dem Cachen ist es sogar -gar nicht mehr notwendig, eine Verbindung zur Datenbank zu machen; Datensätze werden vom Cache genommen und -deserialisiert. - -.. code-block:: php - :linenos: - - // $cache initialisiert im vorhergehenden Beispiel - - // Nachsehen, ob der Cache bereits existiert: - if (!$result = $cache->load('myresult')) { - - // Cache miss; mit Datenbank verbinden - - $db = Zend\Db\Db::factory( [...] ); - - $result = $db->fetchAll('SELECT * FROM huge_table'); - - $cache->save($result, 'myresult'); - - } else { - - // Cache hit! Ausgeben, damit wir es wissen - echo "Der ist vom Cache!\n\n"; - - } - - print_r($result); - -.. _zend.cache.introduction.example-3: - -.. rubric:: Cache Ausgabe mit dem Zend_Cache Frontend - -Abschnitte, in denen die Ausgabe gecached werden soll, werden 'markiert', durch Hinzufügen von etwas bedingter -Logik, wobei der Abschnitt innerhalb der ``start()`` und ``end()`` Methoden gekapselt wird (das ähnelt dem ersten -Beispiel, und ist eine Kernstrategie für das Cachen). - -Darin muß die Ausgabe der Daten wie immer geschehen - jede Ausgabe wird gecached, wenn die Ausführung auf die -``end()`` Methode trifft. Bei der nächsten Ausführung wird der komplette Abschnitt übersprungen, dafür werden -die Daten vom Cache geholt (solange der Cache Datensatz gültig ist). - -.. code-block:: php - :linenos: - - $frontendOptions = array( - 'lifetime' => 30, // Lebenszeit des Caches 30 Sekunden - 'automatic_serialization' => false // Dieser Wert ist der Standardwert - ); - - $backendOptions = array('cache_dir' => './tmp/'); - - $cache = Zend\Cache\Cache::factory('Output', - 'File', - $frontendOptions, - $backendOptions); - - // Wir übergeben eine eindeutige Identifizierung an die start() Methode - if (!$cache->start('mypage')) { - // Ausgabe wie gewöhnlich: - - echo 'Hallo Welt! '; - echo 'Das ist gecached ('.time().') '; - - $cache->end(); // Die Ausgabe wird gespeichert und zum Browser gesendet - } - - echo 'Das wird nie gecached ('.time().').'; - -Zu beachten ist dass das Ergebnis von ``time()`` zweimal ausgegeben wird; das ist etwas dynamisches für -Demonstrationszwecke. Beim Versuch dieses auszuführen und mehrfach zu refreshen, kann bemerkt werden, dass sich -die erste Nummer nie ändert, während die zweite sich ändert, während die Zeit verstreicht. Das geschieht, weil -die erste Nummer, die im gecacheten Abschnitt ausgegeben wird, im Gegensatz zur anderen Ausgabe gecached wurde. -Nach einer halben Minute (die Lebensdauer wurde auf 30 Sekunden gesetzt) sind die Nummern wieder identisch, weil -der Cache Eintrag abgelaufen ist - er muß wieder gecached werden. Man sollte das im Browser oder in der Konsole -testen. - -.. note:: - - Wenn ``Zend_Cache`` benutzt wird, muß auf die wichtigen Cache Identifizierungen geachtet werden (welche an - ``save()`` und ``start()`` übergeben werden). Diese müssen für jede Ressource einzigartig sein, die gecached - werden soll. Andernfalls würden sich unverknüpfte Cache Datensätze gegenseitig entfernen oder, noch - schlimmer, anstatt des anderen dargestellt werden. - - diff --git a/docs/languages/de/modules/zend.cache.theory.rst b/docs/languages/de/modules/zend.cache.theory.rst deleted file mode 100644 index 1988e85ed..000000000 --- a/docs/languages/de/modules/zend.cache.theory.rst +++ /dev/null @@ -1,145 +0,0 @@ -.. EN-Revision: none -.. _zend.cache.theory: - -Die Theorie des Cachens -======================= - -Es gibt 3 Schlüsselkonzepte in ``Zend_Cache``. Eines ist die eindeutige Identifizierung (ein String), die benutzt -wird, um Cache Datensätze zu identifizieren. Das zweite ist die **'lifetime'** Direktive, wie im Beispiel gezeigt; -sie definiert, wie lange eine gecachte Ressource als 'frisch' betrachtet wird. Das dritte Konzept ist die bedingte -Ausführung, so das Teile des Codes komplett übersprungen werden können, was die Leistung steigert. Die -Haupt-Frontend Funktion (eg. ``Zend\Cache\Core::get()``) ist immer so gestaltet, das ``FALSE`` zurückgegeben wird, -wenn ein Cache fehlt. Aber nur, wenn das für die Natur des Frontends Sinn macht. Das erlaubt es Endbenutzern, die -Teile des Codes, die gecached (oder übersprungen) werden sollen, in **if(){ ... }** Anweisungen zu umhüllen, -wobei die Bedingung die ``Zend_Cache`` Methode selbst ist. Am Ende der Blöcke muss das erstellte auf alle Fälle -gespeichert werden (z.B. ``Zend\Cache\Core::save()``). - -.. note:: - - Das Design der bedingten Ausführung des erzeugten Codes ist in einigen Frontends nicht notwendig (**Function**, - zum Beispiel) wenn die komplette Logik im verwendeten Frontend integriert ist. - -.. note:: - - 'Cache hit' ist ein Ausdruck für eine Bedingung, wenn ein Cache Datensatz gefunden wurde, er gültig und - 'frisch' ist (in anderen Worten, er ist noch nicht abgelaufen). 'Cache miss' ist alles andere. Wenn ein 'Cache - miss' passiert, müssen die Daten erzeugt werden (wie man es normalerweise tun würde) und anschließend cachen. - Wenn ein 'Cache hit' geschieht muß, auf der anderen Seite, das Backend automatisch den Datensatz vom Cache - transparent holen. - -.. _zend.cache.factory: - -Die Zend_Cache Factory Methode ------------------------------- - -Ein guter Weg, um eine verwendbare Instanz eines ``Zend_Cache`` Frontends zu erstellen, wird im folgenden Beispiel -gegeben: - -.. code-block:: php - :linenos: - - // Wir wählen ein Backend (zum Beispiel 'File' oder 'Sqlite'...) - $backendName = '[...]'; - - // Wir wählen ein Frontend (zum Beispiel 'Core', 'Output', 'Page'...) - $frontendName = '[...]'; - - // Wir definieren ein Array von Optionen für das gewählte Frontend - $frontendOptions = array([...]); - - // Wir definieren ein Array von Optionen für das gewählte Backend - $backendOptions = array([...]); - - // Wir erstellen eine gute Instanz - // (natürlich sind die letzten 2 Argumente optional) - $cache = Zend\Cache\Cache::factory($frontendName, - $backendName, - $frontendOptions, - $backendOptions); - -In den folgenden Beispielen wird angenommen, dass die ``$cache`` Variable ein gültiges, initiiertes Frontend wie -gezeigt enthält und dass verstanden wird, wie Parameter an das ausgewählte Backend übergeben werden. - -.. note:: - - Immer ``Zend\Cache\Cache::factory()`` benutzen, um eine Frontend Instanz zu bekommen. Das selbstständige - Instantiieren von Frontends und Backends funktioniert nicht so wie erwartet. - -.. _zend.cache.tags: - -Markierte Datensätze --------------------- - -Markierungen sind ein Weg um Cache Datensätze zu kategorisieren. Wenn der Cache mit der ``save()`` Methode -abgespeichert werden soll, kann ein Array mit Markierungen für diesen Datensatz angelegt werden. Dann besteht die -Möglichkeit, alle markierten Cache Datensätze mit einer bestimmten Markierung (oder Markierungen), zu löschen: - -.. code-block:: php - :linenos: - - $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC')); - -.. note:: - - Man beachte, dass die ``save()`` Method einen optionales, viertes Argument akzeptiert: ``$specificLifetime`` - (wenn != ``FALSE``, setzt es eine spezifische Laufzeit für diesen speziellen Cache Eintrag) - -.. _zend.cache.clean: - -Löschen des Caches ------------------- - -Um eine bestimmte Cache ID zu entfernen oder annullieren, kann die ``remove()`` Methode benutzt werden: - -.. code-block:: php - :linenos: - - $cache->remove('idToRemove'); - -Um mehrere Cache IDs mit einer Operation zu entfernen oder annulieren, kann die ``clean()`` Methode benutzt werden. -Zum Beispiel um alle Cache Datensätze zu entfernen : - -.. code-block:: php - :linenos: - - // Löschen aller Datensätze - $cache->clean(Zend\Cache\Cache::CLEANING_MODE_ALL); - - // Nur abgelaufene löschen - $cache->clean(Zend\Cache\Cache::CLEANING_MODE_OLD); - -Um Cache Einträge zu löschen, die zu den Tags 'tagA' und 'tagC' entsprechen : - -.. code-block:: php - :linenos: - - $cache->clean( - Zend\Cache\Cache::CLEANING_MODE_MATCHING_TAG, - array('tagA', 'tagC') - ); - -Um Cache Einträge zu löschen die den Tags 'tagA' oder 'tagC' nicht entsprechen: - -.. code-block:: php - :linenos: - - $cache->clean( - Zend\Cache\Cache::CLEANING_MODE_NOT_MATCHING_TAG, - array('tagA', 'tagC') - ); - -Um Cache Einträge zu löschen, die zu den Tags 'tagA' oder 'tagC' entsprechen : - -.. code-block:: php - :linenos: - - $cache->clean( - Zend\Cache\Cache::CLEANING_MODE_MATCHING_ANY_TAG, - array('tagA', 'tagC') - ); - -Mögliche Löschmodi sind: ``CLEANING_MODE_ALL``, ``CLEANING_MODE_OLD``, ``CLEANING_MODE_MATCHING_TAG``, -``CLEANING_MODE_NOT_MATCHING_TAG`` und ``CLEANING_MODE_MATCHING_ANY_TAG``. Die letzteren sind, wie deren Namen -vermuten lassen, kombiniert mit einem Array von Markierungen für die Löschoperation. - - diff --git a/docs/languages/de/modules/zend.captcha.adapters.rst b/docs/languages/de/modules/zend.captcha.adapters.rst deleted file mode 100644 index 61f01aa32..000000000 --- a/docs/languages/de/modules/zend.captcha.adapters.rst +++ /dev/null @@ -1,150 +0,0 @@ -.. EN-Revision: none -.. _zend.captcha.adapters: - -CAPTCHA Adapter -=============== - -Die folgenden Adapter werden mit dem Zend Framework standardmäßig ausgeliefert. - -.. _zend.captcha.adapters.word: - -Zend\Captcha\Word ------------------ - -``Zend\Captcha\Word`` ist ein abstrakter Adapter der als Basisklasse für die meisten anderen *CAPTCHA* Adapter -fungiert. Er bietet Mutatoren für die Spezifizierung der Wortlänge, Session *TTL*, das Session Namespaceobjekt -das verwendet werden soll, und die Session Namespaceklasse die für die Persistenz zu verwenden ist wenn man -``Zend\Session\Namespace`` nicht verwenden will. ``Zend\Captcha\Word`` kapselt die Prüflogik. - -Standardmäßig ist die Wortlänge 8 Zeichen, das Sessiontimeout 5 Minuten und für die Persistenz wird -``Zend\Session\Namespace`` verwendet (wobei der Namespace "``Zend\Form\Captcha\``" verwendet wird). - -Zusätzlich zu den Methoden wie vom ``Zend\Captcha\Adapter`` Interface benötigt werden bietet -``Zend\Captcha\Word`` die folgenden Methoden an: - -- ``setWordLen($length)`` und ``getWordLen()`` erlauben es die Länge des erzeugten "Wortes" in Zeichen zu - spezifizieren, und den aktuellen Wert zu erhalten. - -- ``setTimeout($ttl)`` und ``getTimeout()`` erlauben es die Lebenszeit des Sessiontokens zu spezifizieren, und den - aktuellen Wert er erhalten. ``$ttl`` sollte in Sekunden spezifiziert sein. - -- ``setUseNumbers($numbers)`` und ``getUseNumbers()`` erlauben es zu spezifizieren ob Nummern als mögliche Zeichen - für den Zufall funktionieren oder ob nur Zeichen verwendet werden. - -- ``setSessionClass($class)`` und ``getSessionClass()`` erlauben es eine alternative ``Zend\Session\Namespace`` - Implementation zu spezifizieren die verwendet werden soll um das *CAPTCHA* Token persistent zu machen und den - aktuellen Wert zu bekommen. - -- ``getId()`` erlaubt es den aktuellen Tokenidentifikator zu erhalten. - -- ``getWord()`` erlaubt es das erzeugte Wort das mit dem *CAPTCHA* verwendet wird zu erhalten. Es wird das Wort - erzeugen wenn es bis dahin noch nicht erstellt wurde. - -- ``setSession(Zend\Session\Namespace $session)`` erlaubt es ein Sessionobjekt zu spezifizieren das für die - Persistenz des *CAPTCHA* Tokens verwendet wird. ``getSession()`` erlaubt es das aktuelle Sessionobjekt zu - erhalten. - -Alle Wort *CAPTCHA*\ s erlauben es ein Array von Optionen an den Konstruktor zu übergeben, oder alternativ dieses -an ``setOptions()`` zu übergeben. Man kann auch ein ``Zend_Config`` Objekt an ``setConfig()`` zu übergeben. -Standardmäßig können die **wordLen**, **timeout**, und **sessionClass** Schlüssel alle verwendet werden. Jede -konkrete Implementation kann zusätzliche Schlüssel definieren oder die Optionen auf einem anderen Weg verwenden. - -.. note:: - - ``Zend\Captcha\Word`` ist eine abstrakte Klasse und kann nicht direkt instanziiert werden. - -.. _zend.captcha.adapters.dumb: - -Zend\Captcha\Dumb ------------------ - -Der ``Zend\Captcha\Dumb`` Adapter ist fast selbsterklärend. Er bietet einen zufälligen String der in umgekehrter -Reihenfolge eingegeben werden muß um validiert zu werden. Als solches ist es keine gute *CAPTCHA* Lösung, und -sollte nur für Testzwecke verwendet werden. Er erweitert ``Zend\Captcha\Word``. - -.. _zend.captcha.adapters.figlet: - -Zend\Captcha\Figlet -------------------- - -Der ``Zend\Captcha\Figlet`` Adapter verwendet :ref:`Zend\Text\Figlet ` um dem Benutzer ein Figlet -zu präsentieren. - -Optionen die an den Konstruktor übergeben werden, werden auch an das :ref:`Zend\Text\Figlet ` -Objekt übergeben. Schaue in die :ref:`Zend\Text\Figlet ` Dokumentation für Details darüber -welche Konfigurationsoptionen vorhanden sind. - -.. _zend.captcha.adapters.image: - -Zend\Captcha\Image ------------------- - -Der ``Zend\Captcha\Image`` Adapter nimmt das erzeugte Wort und stellt es als Bild dar, führt diverse -Verzerrungs-Permutationen durch und mach es so schwierig es automatisch zu entschlüsseln. Er benötigt die `GD -Erweiterung`_ kompiliert mit TrueType oder Freetype Unterstützung. Aktuell kann der ``Zend\Captcha\Image`` Adapter -nur *PNG* Bilder erzeugen. - -``Zend\Captcha\Image`` erweitert ``Zend\Captcha\Word``, und bietet zusätzlich die folgenden Methoden: - -- ``setExpiration($expiration)`` und ``getExpiration()`` erlauben es eine maximale Lebenszeit zu definieren die das - *CAPTCHA* Bild auf dem Dateisystem bleibt. Das ist typischerweise längerer als die Session Lifetime. Die Garbage - Collection läuft periodisch jedes Mal wenn das *CAPTCHA* Objekt enthalten ist, und löscht die Bilder die - abgelaufen sind. Der Wert der Löschung sollte in Sekunden angegeben werden. - -- ``setGcFreq($gcFreq)`` und ``getGcFreg()`` erlauben es zu Spezifizieren wie oft die Garbage Collection laufen - soll. Die Garbage Collection wird alle ``1/$gcFreq`` Aufrufe ausgeführt. Standard ist 100. - -- ``setFont($font)`` und ``getFont()`` erlauben es die Schrift zu Spezifizieren die man verwenden will. ``$font`` - sollte ein voll qualifizierter Pfad zu der Schriftart-Datei sein. Dieser Wert wird benötigt; das *CAPTCHA* wird - wärend der Erzeugung eine Ausnahme werfen wenn die Schriftdatei nicht spezifiziert wurde. - -- ``setFontSize($fsize)`` und ``getFontSize()`` erlauben es die Schriftgröße in Pixel zu Spezifizieren die - verwendet wird wenn das *CAPTCHA* erzeugt wird. Der Standardwert ist 24px. - -- ``setHeight($height)`` und ``getHeight()`` erlauben es die Höhe in Pixel zu Spezifizieren die das erzeugte - *CAPTCHA* Bild haben soll. Der Standardwert ist 50px. - -- ``setWidth($width)`` und ``getWidth()`` erlauben es die Breite in Pixel zu Spezifizieren die das erzeugte - *CAPTCHA* Bild haben soll. Der Standardwert ist 200px. - -- ``setImgDir($imgDir)`` und ``getImgDir()`` erlauben es das Verzeichnis für das Speicher der *CAPTCHA* Bilder zu - spezifizieren. Der Standardwert ist "``./images/captcha/``", was relativ zum Bootstrapskript zu sehen ist. - -- ``setImgUrl($imgUrl)`` und ``getImgUrl()`` erlauben es den Relativen Pfad zum *CAPTCHA* Bild für die Verwendung - im *HTML* Markup zu spezifizieren. Der Standardwert ist "``/images/captcha/``". - -- ``setSuffix($suffix)`` und ``getSuffix()`` erlauben es die Endung des Dateinamens für das *CAPTCHA* Bild zu - spezifizieren. Der Standardwert ist "``.png``". Beachte: Das Ändern dieses Wertes wird den Typ des erzeugten - Bildes nicht ändern. - -- ``setDotNoiseLevel($level)`` und ``getDotNoiseLevel()`` erlauben es zusammen mit ``setLineNoiseLevel($level)`` - und ``getLineNoiseLevel()`` zu kontrollieren wieviel "Rauschen" in der Form von zufälligen Punkten und Linien im - Bild enthalten sein sollen. Jede Einheit von ``$level`` erzeugt einen zufälligen Punkt oder eine Linie. Der - Standard ist 100 Punkte und 5 Linien. Das Rauschen wird zweimal hinzugefügt - vor und nach der Umwandlung der - Verzerrung des Bildes. - -Alle der obigen Optionen können an den Konstruktor übergeben werden indem einfach der Präfix der 'set' Methode -entfernt wird und der Anfangsbuchstabe kleingeschrieben wird: "suffix", "height", "imgUrl", usw. - -.. _zend.captcha.adapters.recaptcha: - -Zend\Captcha\ReCaptcha ----------------------- - -Der ``Zend\Captcha\ReCaptcha`` Adapter verwendet :ref:`ZendService\ReCaptcha\ReCaptcha ` um -*CAPTCHA*\ s zu erzeugen und zu prüfen. Es bietet die folgenden Methoden an: - -- ``setPrivKey($key)`` und ``getPrivKey()`` erlauben es den privaten Schlüssel zu spezifizieren der für den - ReCaptcha Service verwendet werden soll. Er muß wärend der Erstellung spezifiziert werden, auch wenn er - jederzeit überschrieben werden kann. - -- ``setPubKey($key)`` und ``getPubKey()`` erlauben es den öffentlichen Schlüssel zu spezifizieren der mit dem - ReCaptcha Service verwendet werden soll. Er muß wärend der Erstellung spezifiziert werden, auch wenn er - jederzeit überschrieben werden kann. - -- ``setService(ZendService\ReCaptcha\ReCaptcha $service)`` und ``getService()`` erlauben es das ReCaptcha Serviceobjekt zu - setzen und erhalten. - - - -.. _`GD Erweiterung`: http://php.net/gd diff --git a/docs/languages/de/modules/zend.captcha.intro.rst b/docs/languages/de/modules/zend.captcha.intro.rst deleted file mode 100644 index 804bd18d3..000000000 --- a/docs/languages/de/modules/zend.captcha.intro.rst +++ /dev/null @@ -1,19 +0,0 @@ -.. EN-Revision: none -.. _zend.captcha.introduction: - -Einführung -========== - -`CAPTCHA`_ steht für "Completely Automated Public Turing test to tell Computers and Humans Apart;" es wird als -Challenge-Response verwendet um sicherzustellen dass das Individuum das Informationen sendet ein Mensch ist und -kein automatischer Prozess. Typischerweise wird ein Captcha bei der Übertragung von Formularen verwendet in denen -keine authentifizierten Benutzer notwendig sind, aber in denen Spam Übertragungen vermieden werden sollen. - -Captchas können eine Vielzahl an Formen annehmen, inklusive der Frage nach logischen Antworten, dem Angeben von -verzerrten Schriften, der Darstellung von mehreren Bildern und der Frage wie sich diese zueinander verhalten. -``Zend_Captcha`` zielt darauf ab eine Vielzahl von Backends anzubieten die entweder alleinstehend verwendet werden -können, oder in Verbindung mit ``Zend_Form``. - - - -.. _`CAPTCHA`: http://en.wikipedia.org/wiki/Captcha diff --git a/docs/languages/de/modules/zend.captcha.operation.rst b/docs/languages/de/modules/zend.captcha.operation.rst deleted file mode 100644 index 92b02ef12..000000000 --- a/docs/languages/de/modules/zend.captcha.operation.rst +++ /dev/null @@ -1,68 +0,0 @@ -.. EN-Revision: none -.. _zend.captcha.operation: - -Captcha Anwendung -================= - -Alle *CAPTCHA* Adapter implementieren ``Zend\Captcha\Adapter``, welches wie folgt aussieht: - -.. code-block:: php - :linenos: - - interface Zend\Captcha\Adapter extends Zend\Validate\Interface - { - public function generate(); - - public function render(Zend_View $view, $element = null); - - public function setName($name); - - public function getName(); - - public function getDecorator(); - - // Zusätzlich um das Zend\Validate\Interface zu befriedigen: - public function isValid($value); - - public function getMessages(); - - public function getErrors(); - } - -Die benannten Getter- und Settermethoden werden verwenden um den *CAPTCHA* Identifikator zu spezifizieren und zu -empfangen. ``getDecorator()`` kann verwendet werden um einen ``Zend_Form`` Dekorator entweder durch seinen Namen zu -Spezifizieren oder indem ein aktuelles Dekoratorobjekt zurückgegeben wird. Der interessantesten Methoden sind aber -``generate()`` und ``render()``. ``generate()`` wird verwendet um das *CAPTCHA* Token zu erstellen. Dieser Prozess -speichert das Token typischerweise in der Session damit es in nachfolgenden Anfragen verglichen werden kann. -``render()`` wird verwendet um die Informationen die das *CAPTCHA* repräsentieren darzustellen - ob es ein Bild -ist, ein Figlet, ein logisches Problem, oder andere *CAPTCHA*. - -Ein typischer Verwendungsfall könnte wie folgt aussehen: - -.. code-block:: php - :linenos: - - // Eine Instanz von Zend_View erstellen - $view = new Zend\View\View(); - - // Originale Anfrage: - $captcha = new Zend\Captcha\Figlet(array( - 'name' => 'foo', - 'wordLen' => 6, - 'timeout' => 300, - )); - - $id = $captcha->generate(); - echo "
"; - echo $captcha->render($view); - echo "
"; - - // Eine nachfolgende Anfrage: - // Angenommen das Captcha wurde wie vorher eingestellt, dann wäre der Wert von - // $_POST['foo'] ein Schlüssel/Wert Array: - // id => captcha ID, input => captcha value - if ($captcha->isValid($_POST['foo'], $_POST)) { - // Validated! - } - - diff --git a/docs/languages/de/modules/zend.code-generator.examples.rst b/docs/languages/de/modules/zend.code-generator.examples.rst deleted file mode 100644 index 9d8618411..000000000 --- a/docs/languages/de/modules/zend.code-generator.examples.rst +++ /dev/null @@ -1,398 +0,0 @@ -.. EN-Revision: none -.. _zend.codegenerator.examples: - -Zend_CodeGenerator Beispiele -============================ - -.. _zend.codegenerator.examples.class: - -.. rubric:: Erzeugung von PHP Klassen - -Das folgende Beispiel erzeugt eine leere Klasse mit einem Klassen-level DocBlock. - -.. code-block:: php - :linenos: - - $foo = new Zend\CodeGenerator\Php\Class(); - $docblock = new Zend\CodeGenerator\Php\Docblock(array( - 'shortDescription' => 'Beispiel einer erzeugten Klasse', - 'longDescription' => 'Das ist eine mit Zend_CodeGenerator ' - . 'erzeugte Klasse.', - 'tags' => array( - array( - 'name' => 'version', - 'description' => '$Rev:$', - ), - array( - 'name' => 'license', - 'description' => 'New BSD', - ), - ), - )); - $foo->setName('Foo') - ->setDocblock($docblock); - echo $foo->generate(); - -Der obige Code führt zu dem folgenden: - -.. code-block:: php - :linenos: - - /** - * Beispiel einer erzeugten Klasse - * - * Das ist eine mit Zend_CodeGenerator erzeugte Klasse. - * - * @version $Rev:$ - * @license New BSD - * - */ - class Foo - { - - } - -.. _zend.codegenerator.examples.class-properties: - -.. rubric:: Erzeugung von PHP Klassen mit Klassen-Eigenschaften - -Aufbauend auf dem vorherigen Beispiel, fügen wir jetzt Eigenschaften in unsere erzeugte Klasse ein. - -.. code-block:: php - :linenos: - - $foo = new Zend\CodeGenerator\Php\Class(); - $docblock = new Zend\CodeGenerator\Php\Docblock(array( - 'shortDescription' => 'Beispiel einer erzeugten Klasse', - 'longDescription' => 'Das ist eine mit Zend_CodeGenerator ' - . 'erzeugte Klasse.', - 'tags' => array( - array( - 'name' => 'version', - 'description' => '$Rev:$', - ), - array( - 'name' => 'license', - 'description' => 'New BSD', - ), - ), - )); - $foo->setName('Foo') - ->setDocblock($docblock) - ->setProperties(array( - array( - 'name' => '_bar', - 'visibility' => 'protected', - 'defaultValue' => 'baz', - ), - array( - 'name' => 'baz', - 'visibility' => 'public', - 'defaultValue' => 'bat', - ), - array( - 'name' => 'bat', - 'const' => true, - 'defaultValue' => 'foobarbazbat', - ), - )); - echo $foo->generate(); - -Das obige führt zu der folgenden Klassen-Definition: - -.. code-block:: php - :linenos: - - /** - * Beispiel einer erzeugten Klasse - * - * Das ist eine mit Zend_CodeGenerator erzeugte Klasse. - * - * @version $Rev:$ - * @license New BSD - * - */ - class Foo - { - - protected $_bar = 'baz'; - - public $baz = 'bat'; - - const bat = 'foobarbazbat'; - - } - -.. _zend.codegenerator.examples.class-methods: - -.. rubric:: Erzeugung von PHP Klassen mit Klassen-Methoden - -``Zend\CodeGenerator\Php\Class`` erlaubt es Methoden mit optionalem Inhalt zur Klasse hinzuzufügen. Methoden -können entweder als Array oder als konkrete Instanzen von ``Zend\CodeGenerator\Php\Method`` hinzugefügt werden. - -.. code-block:: php - :linenos: - - $foo = new Zend\CodeGenerator\Php\Class(); - $docblock = new Zend\CodeGenerator\Php\Docblock(array( - 'shortDescription' => 'Beispiel einer erzeugten Klasse', - 'longDescription' => 'Das ist eine mit Zend_CodeGenerator ' - . 'erzeugte Klasse.', - 'tags' => array( - array( - 'name' => 'version', - 'description' => '$Rev:$', - ), - array( - 'name' => 'license', - 'description' => 'New BSD', - ), - ), - )); - $foo->setName('Foo') - ->setDocblock($docblock) - ->setProperties(array( - array( - 'name' => '_bar', - 'visibility' => 'protected', - 'defaultValue' => 'baz', - ), - array( - 'name' => 'baz', - 'visibility' => 'public', - 'defaultValue' => 'bat', - ), - array( - 'name' => 'bat', - 'const' => true, - 'defaultValue' => 'foobarbazbat', - ), - )) - ->setMethods(array( - // Methoden als Array übergeben - array( - 'name' => 'setBar', - 'parameters' => array( - array('name' => 'bar'), - ), - 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;', - 'docblock' => new Zend\CodeGenerator\Php\Docblock(array( - 'shortDescription' => 'Setzt die bar Eigenschaft', - 'tags' => array( - new Zend\CodeGenerator\Php\Docblock\Tag\Param(array( - 'paramName' => 'bar', - 'datatype' => 'string' - )), - new Zend\CodeGenerator\Php\Docblock\Tag\Return(array( - 'datatype' => 'string', - )), - ), - )), - ), - // Methoden als konkrete Instanz übergeben - new Zend\CodeGenerator\Php\Method(array( - 'name' => 'getBar', - 'body' => 'return $this->_bar;', - 'docblock' => new Zend\CodeGenerator\Php\Docblock(array( - 'shortDescription' => 'Empfängt die bar Eigenschaft', - 'tags' => array( - new Zend\CodeGenerator\Php\Docblock\Tag\Return(array( - 'datatype' => 'string|null', - )), - ), - )), - )), - )); - - echo $foo->generate(); - -Das obige erzeugt die folgende Ausgabe: - -.. code-block:: php - :linenos: - - /** - * Beispiel einer erzeugten Klasse - * - * Das ist eine mit Zend_CodeGenerator erzeugte Klasse. - * - * @version $Rev:$ - * @license New BSD - */ - class Foo - { - - protected $_bar = 'baz'; - - public $baz = 'bat'; - - const bat = 'foobarbazbat'; - - /** - * Setzt die bar Eigenschaft - * - * @param string bar - * @return string - */ - public function setBar($bar) - { - $this->_bar = $bar; - return $this; - } - - /** - * Empfängt die bar Eigenschaft - * - * @return string|null - */ - public function getBar() - { - return $this->_bar; - } - - } - -.. _zend.codegenerator.examples.file: - -.. rubric:: Erzeugung von PHP Dateien - -``Zend\CodeGenerator\Php\File`` kann verwendet werden um den Inhalt einer *PHP* Datei zu erzeugen. Man kann Klassen -inkludieren als auch eigene Inhalte. Wenn Klassen angegängt werden sollte man entweder eine konkrete Instanz von -``Zend\CodeGenerator\Php\Class`` oder ein Array das die Klasse definiert anhängen. - -Das folgende Beispiel nimmt an das wir ``$foo`` mit einer der Klassen-Definitionen der vorherigen Beispiele -definiert haben. - -.. code-block:: php - :linenos: - - $file = new Zend\CodeGenerator\Php\File(array( - 'classes' => array($foo); - 'docblock' => new Zend\CodeGenerator\Php\Docblock(array( - 'shortDescription' => 'Foo Klassen Datei', - 'tags' => array( - array( - 'name' => 'license', - 'description' => 'New BSD', - ), - ), - )), - 'body' => 'define(\'APPLICATION_ENV\', \'testing\');', - )); - -Der Aufruf von ``generate()`` erzeugt den Code -- schreibt Ihn aber nicht in die Datei. Man muß den Inhalt holen -und Ihn selbst in eine Datei schreiben. Als Beispiel: - -.. code-block:: php - :linenos: - - $code = $file->generate(); - file_put_contents('Foo.php', $code); - -Das obige erzeugt die folgende Datei: - -.. code-block:: php - :linenos: - - _bar = $bar; - return $this; - } - - /** - * Retrieve the bar property - * - * @return string|null - */ - public function getBar() - { - return $this->_bar; - } - - } - - define('APPLICATION_ENV', 'testing'); - -.. _zend.codegenerator.examples.reflection-file: - -.. rubric:: Sähen der Code Erzeugung einer PHP Datei über Reflection - -Man kann *PHP* Code zu einer existierenden *PHP* Datei hinzufügen indem der Code Generator verwendet wird. Um das -Durchzuführen muß man auf diesem zuerst Reflection ausführen. Die statische Methode ``fromReflectedFileName()`` -erlaubt es das zu tun. - -.. code-block:: php - :linenos: - - $generator = Zend\CodeGenerator\Php\File::fromReflectedFileName($path); - $body = $generator->getBody(); - $body .= "\n\$foo->bar();"; - file_put_contents($path, $generator->generate()); - -.. _zend.codegenerator.examples.reflection-class: - -.. rubric:: Sähen der Erzeugung einer PHP Klasse über Reflection - -Man kann Code zu einer bestehenden Klasse hinzufügen. Um das Durchzuführen muß die statische -``fromReflection()`` Methode verwendet werden um die Klasse in ein Generator Objekt zu mappen. Von dort, kann man -zusätzliche Eigenschaften oder Methoden hinzufügen und die Klasse neu erstellen. - -.. code-block:: php - :linenos: - - $generator = Zend\CodeGenerator\Php\Class::fromReflection( - new Zend\Reflection\Class($class) - ); - $generator->setMethod(array( - 'name' => 'setBaz', - 'parameters' => array( - array('name' => 'baz'), - ), - 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;', - 'docblock' => new Zend\CodeGenerator\Php\Docblock(array( - 'shortDescription' => 'Die baz Eigenschaft setzen', - 'tags' => array( - new Zend\CodeGenerator\Php\Docblock\Tag\Param(array( - 'paramName' => 'baz', - 'datatype' => 'string' - )), - new Zend\CodeGenerator\Php\Docblock\Tag\Return(array( - 'datatype' => 'string', - )), - ), - )), - )); - $code = $generator->generate(); - - diff --git a/docs/languages/de/modules/zend.code-generator.introduction.rst b/docs/languages/de/modules/zend.code-generator.introduction.rst deleted file mode 100644 index 2b92b17be..000000000 --- a/docs/languages/de/modules/zend.code-generator.introduction.rst +++ /dev/null @@ -1,125 +0,0 @@ -.. EN-Revision: none -.. _zend.codegenerator.introduction: - -Einführung -========== - -``Zend_CodeGenerator`` bietet die Möglichkeit jeglichen Code zu erstellen indem ein Objekt Orientiertes Interface -verwendet wird, um sowohl neuen Code zu erstellen als auch bestehenden Code upzudaten. Wärend die aktuelle -Implementation darin limitiert ist *PHP* Code zu erstellen, kann die Basisklasse einfach erweitert werden um Code -Erzeugung für andere Zwecke zu bieten: JavaScript, Konfigurationsdateien, Apache VHosts, usw. - -.. _zend.codegenerator.introduction.theory: - -Theorie der Anwendung ---------------------- - -Der typischste Fall ist die Instanzierung einer Code Erzeugungs Klasse und entweder der Übergabe der -entsprechenden Konfiguration oder der Konfiguration nach dessen Erstellung. Um Code zu erstellen, muß man einfach -das Objekt ausgeben, oder dessen ``generate()`` Methode aufrufen. - -.. code-block:: php - :linenos: - - // Konfiguration an den Construktor übergeben: - $file = new Zend\CodeGenerator\Php\File(array( - 'classes' => array( - new Zend\CodeGenerator\Php\Class(array( - 'name' => 'World', - 'methods' => array( - new Zend\CodeGenerator\Php\Method(array( - 'name' => 'hello', - 'body' => 'echo \'Hallo Welt!\';', - )), - ), - )), - ) - )); - - // Konfiguration nach der Initialisierung - $method = new Zend\CodeGenerator\Php\Method(); - $method->setName('hello') - ->setBody('echo \'Hallo Welt!\';'); - - $class = new Zend\CodeGenerator\Php\Class(); - $class->setName('World') - ->setMethod($method); - - $file = new Zend\CodeGenerator\Php\File(); - $file->setClass($class); - - // Die erzeugte Datei darstellen - echo $file; - - // oder Sie in eine Datei schreiben: - file_put_contents('World.php', $file->generate()); - -Beide der obigen Beispiele werden das gleiche Ergebnis darstellen: - -.. code-block:: php - :linenos: - - ` verwendet wird. - -Als Beispiel nehmen wir an dass das obige in der Datei "``World.php``" abgespeichert wurde, und wir diese bereits -inkludiert haben. Wir könnten dann das folgende tun: - -.. code-block:: php - :linenos: - - $class = Zend\CodeGenerator\Php\Class::fromReflection( - new Zend\Reflection\Class('World') - ); - - $method = new Zend\CodeGenerator\Php\Method(); - $method->setName('mrMcFeeley') - ->setBody('echo \'Hallo, Mr. McFeeley!\';'); - $class->setMethod($method); - - $file = new Zend\CodeGenerator\Php\File(); - $file->setClass($class); - - // Die erzeugte Datei darstellen - echo $file; - - // Oder besser, es in die originale Datei zurückschreiben: - file_put_contents('World.php', $file->generate()); - -Die resultierende Klasse würde wie folgt aussehen: - -.. code-block:: php - :linenos: - - setDefaultValue( - new Zend\CodeGenerator\Php\Parameter\DefaultValue("null") - ); - $parameter->setDefaultValue( - new Zend\CodeGenerator\Php\Parameter\DefaultValue("array('foo', 'bar')") - ); - -Intern konvertiert ``setDefaultValue()`` die Werte, welche in *PHP* nicht ausgedrückt werden können, in den -Werte-Halter. - -.. _zend.codegenerator.reference.concrete.php-property: - -Zend\CodeGenerator\Php\Property -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``Zend\CodeGenerator\Php\Property`` beschreibt die Eigenschaft einer Klasse, welche entweder eine Konstante oder -eine Variable sein kann. In jedem Fall, kann der Eigenschaft ein optionaler Standardwert assoziiert werden. -Zusätzlich kann die Sichtbarkeit von variablen Eigenschaften über die Elternklasse -``Zend\CodeGenerator\Php\Member\Abstract`` gesetzt werden. - -Die *API* der Klasse ist wie folgt: - -.. code-block:: php - :linenos: - - class Zend\CodeGenerator\Php\Property - extends Zend\CodeGenerator\Php\Member\Abstract - { - public static function fromReflection( - Zend\Reflection\Property $reflectionProperty - ) - public function setConst($const) - public function isConst() - public function setDefaultValue($defaultValue) - public function getDefaultValue() - public function generate() - } - - diff --git a/docs/languages/de/modules/zend.config.introduction.rst b/docs/languages/de/modules/zend.config.introduction.rst deleted file mode 100644 index ef055fb34..000000000 --- a/docs/languages/de/modules/zend.config.introduction.rst +++ /dev/null @@ -1,98 +0,0 @@ -.. EN-Revision: none -.. _zend.config.introduction: - -Einleitung -========== - -``Zend_Config`` wurde entworfen um den Zugriff auf und die Verwendung von Konfigurations-Daten zu vereinfachen. Es -stellt diese Konfigurations-Daten innerhalb der Applikation über eine verschachtelte Objekt-Struktur zur -Verfügung. Die Konfigurations-Daten können aus verschiedenen Datenquellen gelesen werden, die hierarchische -Datenspeicherung unterstützen. Derzeit stellt ``Zend_Config`` mit :ref:`Zend\Config\Ini -` und :ref:`Zend\Config\Xml ` Adapter für das Einlesen von -Daten aus Textfiles zur Verfügung. - -.. _zend.config.introduction.example.using: - -.. rubric:: Zend-Config verwenden - -In der Regel geht man davon aus, dass Anwender eine der Adapter-Klassen wie :ref:`Zend\Config\Ini -` oder :ref:`Zend\Config\Xml ` verwenden. Wenn die -Konfigurations-Daten aber als *PHP* Array vorliegen, können diese auch einfach an den ``Zend_Config`` Constructor -übergeben werden, um dann über die objektorientierte Schnittstelle auf sie zugreifen zu können: - -.. code-block:: php - :linenos: - - // Gegeben ist ein Array mit Konfigurations-Daten - $configArray = array( - 'webhost' => 'www.example.com', - 'database' => array( - 'adapter' => 'pdo_mysql', - 'params' => array( - 'host' => 'db.example.com', - 'username' => 'dbuser', - 'password' => 'secret', - 'dbname' => 'mydatabase' - ) - ) - ); - - // Erstelle das objektorientierte Interface zum Datenzugriff - $config = new Zend\Config\Config($configArray); - - // Gebe einen Eintrag aus (Ausgabe ist 'www.example.com') - echo $config->webhost; - - // Konfigurations-Daten benutzen, um eine Datenbank-Verbindung her zu stellen - $db = Zend\Db\Db::factory($config->database->adapter, - $config->database->params->toArray()); - - // Alternative Verwendung: einfach das Zend_Config Objekt übergeben. - // Zend_Db factory weiß wie es zu interpretieren ist. - $db = Zend\Db\Db::factory($config->database); - -Wie das Beispiel oben zeigt, kann man über ``Zend_Config`` auf die Konfigurations-Daten aus dem übergebenen Array -so zugreifen, wie auf die Eigenschaften einer verschachtelten Objekt-Struktur. - -Zusätzlich zum objektorientierten Zugriff auf die Daten Werte hat ``Zend_Config`` ``get()`` welches den -unterstützten Standardwert zurückgibt wenn das Daten Element nicht existiert. Zum Beispiel: - -.. code-block:: php - :linenos: - - $host = $config->database->get('host', 'localhost'); - -.. _zend.config.introduction.example.file.php: - -.. rubric:: Zend_Config mit einer PHP Konfigurationsdatei verwenden - -Es ist oft gewünscht eine reine *PHP* basierende Konfigurationsdatei zu verwenden. Der folgende Code zeigt wie das -ganz einfach erreicht werden kann: - -.. code-block:: php - :linenos: - - // config.php - return array( - 'webhost' => 'www.example.com', - 'database' => array( - 'adapter' => 'pdo_mysql', - 'params' => array( - 'host' => 'db.example.com', - 'username' => 'dbuser', - 'password' => 'geheim', - 'dbname' => 'mydatabase' - ) - ) - ); - -.. code-block:: php - :linenos: - - // Konfiguration konsumieren - $config = new Zend\Config\Config(require 'config.php'); - - // Einen Konfigurationswert ausgeben (führt zu 'www.example.com') - echo $config->webhost; - - diff --git a/docs/languages/de/modules/zend.config.theory-of-operation.rst b/docs/languages/de/modules/zend.config.theory-of-operation.rst deleted file mode 100644 index 7d3befde9..000000000 --- a/docs/languages/de/modules/zend.config.theory-of-operation.rst +++ /dev/null @@ -1,65 +0,0 @@ -.. EN-Revision: none -.. _zend.config.theory_of_operation: - -Theory of Operation -=================== - -Konfigurations-Daten werden dem ``Zend_Config``-Konstruktor als assoziatives Array zur Verfügung gestellt. Das -Array kann mehrdimensional sein, um die Übergabe geordneter Daten zu unterstützen. Spezifische Adapter fungieren -als Schnittstelle zwischen der Datenhaltung und dem ``Zend_Config``-Konstruktor, indem sie die Daten für diesen -als Array aufbereiten. Es können auch direkt aus dem eigenen Code Arrays an den ``Zend_Config``-Konstruktor -übergeben werden, ohne eine Adapter-Klasse zu benutzen. In manchen Situationen kann das angebracht sein. - -Jeder Konfigurationswert des Arrays wird zu einer Eigenschaft des ``Zend_Config`` Objektes. Der Schlüssel wird als -Name der Eigenschaft verwendet. Wenn ein Wert selbst ein Array ist, wird die resultierende Eigenschaft des Objektes -selbst als ein neues ``Zend_Config`` Objekt erstellt und mit den Array Daten geladen. Das findet rekursiv statt, -sodas hirarchische Konfigurationswerte mit einer beliebigen Anzahl an Level erstellt werden können. - -``Zend_Config`` implementiert die Interfaces **Countable** und **Iterator** um den einfachen Zugriff auf -Konfigurationsdaten zu gewährleisten. Dementsprechend kann man die `count()`_-Funktion und auch *PHP* Konstrukte -wie `foreach`_ auf ``Zend_Config``-Objekte anwenden. - -Standardmäßig gewährt ``Zend_Config`` nur Lesezugriff auf die Daten und der Versuch einer Wertzuweisung (wie z. -B. ``$config->database->host = 'example.com';``) löst eine Ausnahme aus. Dieses Standard-Verhalten kann mit Hilfe -des Konstruktors aber so überschrieben werden, dass die Veränderung von Daten erlaubt ist. Wenn auch Änderungen -erlaubt sind, unterstützt ``Zend_Config`` das entfernen von Werten (z.B. ``unset($config->database->host)``). Die -``readOnly()`` Methode kann verwendet werden um festzustellen ob Änderungen an einem gegebenen ``Zend_Config`` -Objekt erlaubt sind und die ``setReadOnly()`` kann verwendet werden um weitere Änderungen an einem ``Zend_Config`` -Objekt, das erstellt wurde und Änderungen erlaubt, zu verhindern. - -.. note:: - - Es muss angemerkt werden, dass hierbei nur die Daten im Speicher verändert werden. Es wird keine Änderung an - den Konfigurations-Daten auf dem Speichermedium vorgenommen. Werkzeuge zur Veränderung gespeicherter - Konfigurations-Daten liegen nicht im Bereich von ``Zend_Config``. Drittanbieter bieten bereits diverse - Open-Source-Lösungen für das Erstellen und Verändern von Konfigurations-Datensätzen in verschienen Formaten. - -Adapter-Klassen erben von der ``Zend_Config``-Klasse, da sie ihre Funktionalität nutzen. - -Die Familie der ``Zend_Config``-Klassen ermöglicht es, Daten in Sektionen einzuteilen. Beim Initialisieren eines -``Zend_Config``-Adapter-Objektes können eine einzelne spezifizierte Sektion, mehrere spezifizierte Sektionen oder -alle Sektionen (wenn keine spezifiziert ist) geladen werden. - -Die ``Zend_Config``-Adapter-Klassen unterstützen ein Modell einfacher Vererbung, welches es ermöglicht, dass -Konfigurations-Daten aus einer Sektion an eine Andere vererbt werden können. Dadurch kann die Notwendigeit -doppelter Konfigurations-Daten für verschiedene Einsatzgebiete reduziert oder beseitigt werden. Eine erbende -Sektion kann die von der Eltern-Sektion geerbten Werte auch überschreiben. Wie auch bei der Klassen-Vererbung in -*PHP* kann eine Sektion von einer Eltern-Sektion geerbt werden, die wiederum von einer Großeltern-Sektion geerbt -hat und so weiter. Mehrfaches Erben (Beispielsweise der Fall, dass Sektion C direkt von den Eltern-Sektionen A und -B erbt) wird dagegen nicht unterstützt. - -Wenn zwei ``Zend_Config`` Objekte vorhanden sind, können diese in ein einzelnes Objekt zusammengeführt werden -indem die ``merge()`` Funktion verwendet wird. Angenommen es gibt ``$config`` und ``$localConfig``, kann -``$localConfig`` in ``$config`` zusammengeführt werden indem ``$config->merge($localConfig);`` aufgerufen wird. -Die Elemente in ``$localConfig`` überschreiben gleichnamige Elemente in ``$config``. - -.. note:: - - Das ``Zend_Config`` Objekt das die Zusammenführung durchführt muß so erstellt worden sein das es Änderungen - erlaubt, indem dem Constructor ``TRUE`` als zweiter Parameter übergeben wird. Die ``setReadOnly()`` Methode - kann dann verwendet werden um weitere Änderungen zu verhindern nachdem die Zusammenführung fertiggestellt ist. - - - -.. _`count()`: http://php.net/count -.. _`foreach`: http://php.net/foreach diff --git a/docs/languages/de/modules/zend.config.writer.rst b/docs/languages/de/modules/zend.config.writer.rst deleted file mode 100644 index 99c0d6957..000000000 --- a/docs/languages/de/modules/zend.config.writer.rst +++ /dev/null @@ -1,113 +0,0 @@ -.. EN-Revision: none -.. _zend.config.writer.introduction: - -Zend\Config\Writer -================== - -``Zend\Config\Writer`` gibt einem die Möglichkeit Configdateien aus ``Zend_Config`` Objekten heraus zu schreiben. -Es arbeitet mit einem Adapter-artigen System und ist deswegen sehr einfach zu verwenden. Standardmäßig wird -``Zend\Config\Writer`` mit drei Adaptern ausgeliefert, die alle Datei basierend sind. Der Writer wird mit -speziellen Optionen instanziert, welche **filename** und **config** sein können. Dann wird die ``write()`` Methode -des Writers aufgerufen und die Configdatei wird erstellt. Man kann ``$filename`` und ``$config`` auch direkt an die -``write()`` Methode übergeben. Aktuell werden die folgenden Writer mit ``Zend\Config\Writer`` ausgeliefert: - -- ``Zend\Config\Writer\Array`` - -- ``Zend\Config\Writer\Ini`` - -- ``Zend\Config\Writer\Xml`` - -Der *INI* Writer hat zwei Modi für die Darstellung bezüglich Sektionen. Standardmäßig wird die Top-Level -Konfiguration immer in Sektionsnamen geschrieben. Durch den Aufruf von ``$writer->setRenderWithoutSections();`` -werden alle Optionen in den globalen Namespace der *INI* Datei geschrieben und es werden keine Sektionen -angehängt. - -Zusätzlich hat ``Zend\Config\Writer\Ini`` einen zusätzlichen optionalen Parameter **nestSeparator**, welche -definiert mit welchem Zeichen die einzelnen Nodes getrennt werden. Der Standard ist ein einzelner Punkt, wie er -standardmäßig von ``Zend\Config\Ini`` akzeptiert wird. - -Wenn ein ``Zend_Config`` Objekt geändert oder erstellt wird, muß man einige Dinge wissen. Um einen Wert zu -erstellen oder zu ändern muß einfach der Parameter des ``Zend_Config`` Objektes über den Zugriffsaccessor -(**->**) gesetzt werden. Um eine Sektion im Root oder im Branch zu erstellen muß einfach ein neues Aray erstellt -werden ("``$config->branch = array();``"). Um zu definieren welche Sektion eine andere erweitert, muß die -``setExtend()`` Methode am Root ``Zend_Config`` Objekt aufgerufen werden. - -.. _zend.config.writer.example.using: - -.. rubric:: Verwenden von Zend\Config\Writer - -Dieses Beispiel zeigt die grundsätzliche Verwendung von ``Zend\Config\Writer\Xml`` um eine neue -Konfigurationsdatei zu erstellen: - -.. code-block:: php - :linenos: - - // Ein neues Config Objekt erstellen - $config = new Zend\Config\Config(array(), true); - $config->production = array(); - $config->staging = array(); - - $config->setExtend('staging', 'production'); - - $config->production->db = array(); - $config->production->db->hostname = 'localhost'; - $config->production->db->username = 'production'; - - $config->staging->db = array(); - $config->staging->db->username = 'staging'; - - // Die Config Datei auf einem der folgenden Wege schreiben: - // a) - $writer = new Zend\Config\Writer\Xml(array('config' => $config, - 'filename' => 'config.xml')); - $writer->write(); - - // b) - $writer = new Zend\Config\Writer\Xml(); - $writer->setConfig($config) - ->setFilename('config.xml') - ->write(); - - // c) - $writer = new Zend\Config\Writer\Xml(); - $writer->write('config.xml', $config); - -Das erstellt eine *XML* Config Datei mit den Sektionen production und staging, wobei staging production erweitert. - -.. _zend.config.writer.modifying: - -.. rubric:: Eine bestehende Config ändern - -Dieses Beispiel zeigt wie eine bestehende Config Datei bearbeitet werden kann. - -.. code-block:: php - :linenos: - - // Lädt alle Sektionen einer bestehenden Config Datei, und überspringt - // alle Erweiterungen - $config = new Zend\Config\Ini('config.ini', - null, - array('skipExtends' => true, - 'allowModifications' => true)); - - // Ändere einen Wert - $config->production->hostname = 'foobar'; - - // Schreibe die Config Datei - $writer = new Zend\Config\Writer\Ini(array('config' => $config, - 'filename' => 'config.ini')); - $writer->write(); - -.. note:: - - **Laden einer Config Datei** - - Beim Laden einer bestehenden Config Datei für eine Änderung ist es sehr wichtig das alle Sektionen geladen - werden und die Erweiterungen übersprungen werden, sodas keine Werte zusammengefügt werden. Das wird durch die - Übergabe von **skipExtends** als Option an den Constructor durchgeführt. - -Für alle Datei-basierenden Writer (*INI*, *XML* und *PHP* Array) wird intern ``render()`` verwendet um den -Konfigurationsstring zu erstellen. Diese Methode kann auch von ausserhalb aus verwendet werden wenn man Zugriff auf -eine String-Repräsentation der Konfigurationsdaten benötigt. - - diff --git a/docs/languages/de/modules/zend.console.getopt.configuration.rst b/docs/languages/de/modules/zend.console.getopt.configuration.rst deleted file mode 100644 index cfc89fd8a..000000000 --- a/docs/languages/de/modules/zend.console.getopt.configuration.rst +++ /dev/null @@ -1,204 +0,0 @@ -.. EN-Revision: none -.. _zend.console.getopt.configuration: - -Konfigurieren von Zend\Console\Getopt -===================================== - -.. _zend.console.getopt.configuration.addrules: - -Regeln für das Hinzufügen von Optionen --------------------------------------- - -Man kann mehr Optionsregeln hinzufügen, zusätzlich zu denen die schon im ``Zend\Console\Getopt`` Constructor -definiert wurden, durch Verwendung der ``addRules()`` Methode. Das Argument für ``addRules()`` ist das gleiche wie -das erste Argument für den Constructor der Klasse. Es ist entweder eine Zeichenkette im Format der kurzen Syntax -wie für das Definieren für Optionen definiert, oder ein assoziatives Array im Format der langen Syntax wie für -das Definieren für Optionen definiert. Siehe :ref:`Definieren von GetOpt Regeln ` für -Details über die Syntax für die Definition von Optionen. - -.. _zend.console.getopt.configuration.addrules.example: - -.. rubric:: Verwenden von addRules() - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - $opts->addRules( - array( - 'verbose|v' => 'Druckt zusätzliche Ausgaben' - ) - ); - -Das obige Beispiel zeigt das hinzufügen der ``--verbose`` Option mit einem Alias von ``-v`` zu einem Set von -Optionen welche bereits im Aufruf durch den Constructor definiert wurden. Man kann kurze Format Optionen und lange -Format Optionen in der gleichen Instanz von ``Zend\Console\Getopt`` vermischen. - -.. _zend.console.getopt.configuration.addhelp: - -Hilfstexte hinzufügen ---------------------- - -Zusätzlich zum Definieren von Hilfstexten bei der Definition von Optionsregeln im langen Format, können -Hilfstexte mit Optionsregeln verknüpft werden durch Verwendung der ``setHelp()`` Methode. Das Argument für die -``setHelp()`` Methode ist ein assoziatives Array, in welchen der Schlüssel ein Flag ist, und der Wert der -betreffende Hilfetext. - -.. _zend.console.getopt.configuration.addhelp.example: - -.. rubric:: Verwenden von setHelp() - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - $opts->setHelp( - array( - 'a' => 'Apfel Option, ohne Parameter', - 'b' => 'Bananen Option, mit benötigtem Integer Parameter', - 'p' => 'Pfirsich Option, mit optionalem Zeichenketten Parameter' - ) - ); - -Wenn Optionen mit Aliasen definiert wurden, kann jeder dieser Aliase als Schlüssel für das assizoative Array -verwendet werden. - -Die ``setHelp()`` Methode ist der einzige Weg um einen Hilfetext zu definieren wenn die Optionen mit der kurzen -Syntax definiert wurden. - -.. _zend.console.getopt.configuration.addaliases: - -Aliase für Optionen hinzufügen ------------------------------- - -Aliase für Optionen können mit der ``setAliases()`` Methode definiert werden. Das Argument ist ein assoziatives -Array, dessen Schlüssel ein zuvor definiertes Flag, und dessen Wert ein neuer Alias für dieses Flag ist. Diese -Aliase werden mit jedem existierenden Alias für dieses Flag gemischt. Mit anderen Worten, die zuvor definierten -Aliase sind noch immer in Verwendung. - -Ein Alias kann nur einmal definiert werden. Wenn versucht wird einen Alias nochmals zu definieren wird eine -``Zend\Console\Getopt\Exception`` geworfen. - -.. _zend.console.getopt.configuration.addaliases.example: - -.. rubric:: Verwenden von setAliases() - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - $opts->setAliases( - array( - 'a' => 'apple', - 'a' => 'apfel', - 'p' => 'pfirsich' - ) - ); - -Im obigen Beispiel sind, nach Definition der Aliase, ``-a``, ``--apple`` und ``--apfel`` Aliase füreinander. Auch -``-p`` und ``--pfirsich`` sind füreinander Aliase. - -Die ``setAliases()`` Methode ist der einzige Weg um Aliase zu definieren wenn die Optionen mit der kurzen Syntax -definiert wurden. - -.. _zend.console.getopt.configuration.addargs: - -Argument Listen hinzufügen --------------------------- - -Standardmäßig verwendet ``Zend\Console\Getopt`` ``$_SERVER['argv']`` für die Analyse des Arrays von -Kommandozeilen Argumenten. Alternativ kann das Array mit Argumenten als zweites Argument dem Constructor angegeben -werden. Letztendlich können zusätzliche Argumente zu den bereits in Verwendung befindlichen hinzugefügt werden, -durch Verwendung der ``addArguments()`` Methode, oder es kann das aktuelle Array von Argumenten ersetzt werden mit -Hilfe der ``setArguments()`` Methode. In beiden Fällen ist der Parameter für diese Methoden ein einfaches Array -von Zeichenketten, und die letztere Methode substituiert das Array für seine aktuellen Argumente. - -.. _zend.console.getopt.configuration.addargs.example: - -.. rubric:: Verwenden von addArguments() und setArguments() - -.. code-block:: php - :linenos: - - // Normalerweise verwendet der Constructor $_SERVER['argv'] - $opts = new Zend\Console\Getopt('abp:'); - - // Ein Array zu den bestehenden Argumenten hinzufügen - $opts->addArguments(array('-a', '-p', 'p_parameter', 'non_option_arg')); - - // Ein neues Array als Ersatz für die bestehenden Argumente - $opts->setArguments(array('-a', '-p', 'p_parameter', 'non_option_arg')); - -.. _zend.console.getopt.configuration.config: - -Konfiguration hinzufügen ------------------------- - -Der dritte Parameter des ``Zend\Console\Getopt`` Constructors ist ein Array von Optionen zur Konfiguration welche -das Verhalten der zurückgegebenen Objektinstanz beeinflusst. Es können auch durch Verwendung der ``setOptions()`` -Optionen für die Konfiguration definiert werden, oder es können auch individuelle Optionen mit der -``setOption()`` Methode verwendet werden. - -.. note:: - - **Klarstellung des Ausdrucks "Option"** - - Der Ausdruck "Option" wird für die Konfiguration der ``Zend\Console\Getopt`` Klasse verwendet um der - Terminologie zu folgen die überall im Zend Framework benutzt wird. Das ist nicht das selbe wie die - Kommandozeilen Optionen die von der ``Zend\Console\Getopt`` Klasse analysiert werden. - -Die aktuell unterstützten Optionen sind durch Konstanten in der Klasse definiert. Diese Optionen, bzw deren -konstanter Bezeichner (mit wörtlichem Wert in Großschreibweise) sind anbei gelistet: - -- ``Zend\Console\Getopt::CONFIG_DASHDASH`` ("dashDash"), wenn es ``TRUE`` ist, ermöglicht dieses spezielle Flag - ``--`` das Ende von Flags zu signieren. Kommendozeilen Argumente welche dem Doppel-Bindestrich Zeichen folgen - werden nicht als Option interpretiert selbst wenn das Argument mit einem Bindestrich beginnt. Diese - Konfigurationsoption ist standardmäßig ``TRUE``. - -- ``Zend\Console\Getopt::CONFIG_IGNORECASE`` ("ignoreCase"), wenn es ``TRUE`` ist, werden Flags als Aliase - voneinander betrachtet wenn Sie sich nur in der Groß- oder Kleinschreibung unterscheiden. Das bedeutet das - ``-a`` und ``-A`` als gleiche Flags angesehen werden. Diese Konfigurationsoption ist standardmäßig ``FALSE``. - -- ``Zend\Console\Getopt::CONFIG_RULEMODE`` ("ruleMode") kann die Werte ``Zend\Console\Getopt::MODE_ZEND`` ("zend") - und ``Zend\Console\Getopt::MODE_GNU`` ("gnu") haben. Diese Option sollte nicht verwendet werden ausser die Klasse - wird erweiter um zusätzliche Syntax Formen zu unterstützen. Die zwei Modi die in der Basisklasse - ``Zend\Console\Getopt`` unterstützt werden sind eindeutig. Wenn die Angabe eine Zeichenkette ist, nimmt die - Klasse ``MODE_GNU`` an, sonst wird ``MODE_ZEND`` angenommen. Aber wenn die Klasse erweitert wird, und - zusätzliche Syntaxformen hinzugefügt werden, kann der Modus durch Verwendung dieser Option definiert werden. - -Zusätzliche Konfigurationsoptionen können in zukünftigen Versionen dieser Klasse hinzugefügt werden. - -Die zwei Argumente der ``setOption()`` Methode sind ein Name einer Konfigurationsoption und ein Wert für die -Option. - -.. _zend.console.getopt.configuration.config.example.setoption: - -.. rubric:: Verwenden von setOption() - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - $opts->setOption('ignoreCase', true); - -Das Argument für die ``setOptions()`` Methode ist ein assoziatives Array. Die Schlüssel dieses Arrays sind die -Namen der Konfigurationsoptionen, und die Werte sind die Konfigurationswerte. Das ist also das Array Format welches -auch im Constructor der Klasse verwendet wird. Die definierten Konfigurationswerte werden mit der aktuellen -Konfiguration zusammengefügt; es müssen also nicht alle Optionen angegeben werden. - -.. _zend.console.getopt.configuration.config.example.setoptions: - -.. rubric:: Verwenden von setOptions() - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - $opts->setOptions( - array( - 'ignoreCase' => true, - 'dashDash' => false - ) - ); - - diff --git a/docs/languages/de/modules/zend.console.getopt.fetching.rst b/docs/languages/de/modules/zend.console.getopt.fetching.rst deleted file mode 100644 index 3f8254754..000000000 --- a/docs/languages/de/modules/zend.console.getopt.fetching.rst +++ /dev/null @@ -1,142 +0,0 @@ -.. EN-Revision: none -.. _zend.console.getopt.fetching: - -Holen von Optionen und Argumenten -================================= - -Nach dem Erstellen der Optionen welche das ``Zend\Console\Getopt`` Objekt erkennen sollte, und der Übergabe von -Argumenten von der Kommandozeile oder einem Array, kann das Objekt abgefragt werden um herauszufinden welche -Optionen durch den Benutzer mit einem gegebenen Kommandozeilena Aufruf des Programms angegeben wurden. Die Klasse -implementiert magische Methoden damit Optionen anhand Ihres Namens abgefragt werden können. - -Das Analysieren der Daten wird verzögert, bis zur ersten Abfrage die am ``Zend\Console\Getopt`` Objekt -durchgeführt wird um herauszufinden ob eine Option angegeben wurde. Das erlaubt die Anwendung einiger -Methodenaufrufe zur Konfiguration der Optionen, Argumente, Hilfstexte und Konfigurationsoptionen bevor das -Analysieren durchgeführt wird. - -.. _zend.console.getopt.fetching.exceptions: - -Handhaben von Getopt Ausnahmen ------------------------------- - -Wenn ein Benutzer irgendeine ungültige Option auf der Kommandozeile angibt, wirft die analysierende Funktion eine -``Zend\Console\Getopt\Exception``. Diese Ausnahme kann im Code der Anwendung abgefangen werden. Die ``parse()`` -Methode kann verwendet werden um das Objekt dazu zu zwingen die Argumente zu analysieren. Das ist deswegen -nützlich weil ``parse()`` in einen **try** Block eingebettet werden kann. Wenn es erfolgreich ist, kann man sicher -sein das die Analyse keine weiteren Ausnahmen werfen wird. Die geworfene Ausnahme hat eine eigene Methode -``getUsageMessage()``, welche die formatierten Hinweise für die Verwendung aller definierten Optionen zurückgibt. - -.. _zend.console.getopt.fetching.exceptions.example: - -.. rubric:: Getopt Ausnahmen auffangen - -.. code-block:: php - :linenos: - - try { - $opts = new Zend\Console\Getopt('abp:'); - $opts->parse(); - } catch (Zend\Console\Getopt\Exception $e) { - echo $e->getUsageMessage(); - exit; - } - -Die Fälle in denen die Analyse eine Ausnahme werden sind unter anderem: - -- Die gegebene Option wird nicht erkannt. - -- Die Option benötigt einen Parameter, aber es wurde keiner angegeben. - -- Der Parameter der Option ist vom falschen Typ. Z.B. eine nicht nummerische Zeichenkette obwohl ein Integer - benötigt wird. - -.. _zend.console.getopt.fetching.byname: - -Optionen durch Ihren Namen finden ---------------------------------- - -Die ``getOption()`` Methode kann verwendet werden um den Wert einer Option abzufragen. Wenn die Option einen -Parameter hatte, wird diese Methode den Wert dieses Parameters zurückgeben. Wenn die Option keinen Parameter -hatte, aber der Benutzer ihn auf der Kommandozeile definiert hat, gibt die Methode ``TRUE`` zurück. Andernfalls -gibt die Methode ``NULL`` zurück. - -.. _zend.console.getopt.fetching.byname.example.setoption: - -.. rubric:: Verwenden von getOption() - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - $b = $opts->getOption('b'); - $p_parameter = $opts->getOption('p'); - -Alternativ kann die magische ``__get()`` Funktion verwendet werden um der Wert einer Option zu erhalten wie wenn -dieser eine Variable der Klasse wäre. Die magische ``__isset()`` Methode ist auch implementiert. - -.. _zend.console.getopt.fetching.byname.example.magic: - -.. rubric:: Verwenden der magischen \__get() und \__isset() Methoden - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - if (isset($opts->b)) { - echo "Die Option b ist da.\n"; - } - $p_parameter = $opts->p; // Null wenn nicht gesetzt - -Wenn die Optionen mit Aliasen definiert wurden, kann jeder der Aliase für eine Option in den obigen Methoden -verwendet werden. - -.. _zend.console.getopt.fetching.reporting: - -Optionen berichten ------------------- - -Es gibt einige Methoden um das komplette Set an Optionen welches ein Benutzer an der Kommandozeile angegeben hat zu -berichten. - -- Als Zeichenkette: verwenden der ``toString()`` Methode. Die Optionen werden als Leerzeichen-getrennte - Zeichenkette von ``Flag=Wert`` Paaren zurückgegeben. Der Wert einer Option welche keinen Parameter hat, ist die - wörtliche Zeichenkette "``TRUE``". - -- Als Array: verwenden der ``toArray()`` Methode. Die Optionen werden in einem einfachen Integer-Indizierten Array - von Zeichenketten zurückgegeben, die Flag-Zeichenketten gefolgt von den Parameter-Zeichenketten, wenn vorhanden. - -- Als Zeichenkette welche *JSON* Daten enthält: verwenden der ``toJson()`` Methode. - -- Als Zeichenkette welche *XML* Daten enthält: verwenden der ``toXml()`` Methode. - -In allen obigen Auflistungsmethoden, ist die Flag-Zeichenkette die erste Zeichenkette in der entsprechenden Liste -von Aliasen. Wenn zum Beispiel die Aliase der Option als ``verbose|v`` definiert sind, wird die erste Zeichenkette -``verbose`` als kanonischer Name der Option verwendet. Der Name des Optionsflags enthält nicht die vorangestellten -Bindestriche. - -.. _zend.console.getopt.fetching.remainingargs: - -Nicht-Options Argumente erhalten --------------------------------- - -Nachdem die Argumente der Option und deren Parameter von der Kommandozeile analysiert wurden, können zusätzliche -Argumente zurück bleiben. Diese Argumente können abgefragt werden durch Verwendung der ``getRemainingArgs()`` -Methode. Diese Methode gibt ein Array von Zeichenketten zurück welche nicht Teil irgendeiner Option waren. - -.. _zend.console.getopt.fetching.remainingargs.example: - -.. rubric:: Verwenden von getRemainingArgs() - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - $opts->setArguments(array('-p', 'p_parameter', 'filename')); - $args = $opts->getRemainingArgs(); // Rückgabe array('filename') - -``Zend\Console\Getopt`` unterstützt die *GNU* Konvention das ein Argument welches auf einem Doppelten Bindestrich -besteht das Ende der Optionen bezeichnet. Jedes Argument welches diesem Bezeichner folgt, muß als -Nicht-Options-Argument behandelt werden. Das ist nützlich wenn ein Nicht-Options-Argument vorhanden ist welches -mit einem Bindestrich anfängt. Zum Beispiel: "``rm -- -filename-with-dash``". - - diff --git a/docs/languages/de/modules/zend.console.getopt.introduction.rst b/docs/languages/de/modules/zend.console.getopt.introduction.rst deleted file mode 100644 index 2367f80ba..000000000 --- a/docs/languages/de/modules/zend.console.getopt.introduction.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. EN-Revision: none -.. _zend.console.getopt.introduction: - -Einführung -========== - -Die ``Zend\Console\Getopt`` Klasse hilft Kommandozeilen Anwendungen Ihre Optionen und Argumente zu Analysieren. - -Benutzer können Kommandozeilen Argumente definieren wenn die Anwendung ausgeführt wird. Diese Argumente haben -für die Anwendung die Bedeutung, das Verhalten in einem bestimmten Weg zu Ändern oder Ressourcen auszuwählen, -oder Parameter zu definieren. Viele Optionen haben eine einheitliche Bedeutung entwickelt wie zum Beispiel -``--verbose`` welches die Ausgabe von zusätzlicher Ausgabe für viele Anwendungen erlaubt. Andere Optionen haben -auch eine Bedeutung die in jeder Anwendung unterschiedlich ist. Zum Beispiel erlaubt ``-c`` unterschiedliche -Features in ``grep``, ``ls``, und ``tar``. - -Anbei sind einige Definitionen von Ausdrücken. Die übliche Verwendung der Ausdrücke variiert, aber diese -Dokumentation wird die anbei beschriebenen Definitionen verwenden. - -- "Argument": eine Zeichenkette die in der Kommandozeile dem Namen des Kommandos folgt. Argumente können Optionen - sein, oder auch ohne Option vorkommen, um eine Ressource zu benennen die das Kommando verwendet. - -- "Option": ist ein Argument das andeutet dass das Kommando sein Verhalten in einem bestimmten Weg verändern soll. - -- "Flag": Der erste Teil einer Option, identifiziert den Zweck der Option. Einem Flag werden normalerweise ein oder - zwei Bindestriche vorangestellt (``-`` oder ``--``). Ein einzelner wird einem Einzel-Zeichen Flag vorangestellt - oder einem Verbund von Einzel-Zeichen Flags. Ein doppelter Bindestrich wird einem Mehr-Zeichen Flag - vorangestellt. Lange Flags können nicht gebündelt werden. - -- "Parameter": Der zweite Teil einer Option; Ein Datenwert der ein Flag begleitet, wenn er zu einer Option passt. - Zum Beispiel kann ein Kommando eine ``--verbose`` Option akzeptieren, aber typischerweise hat diese Option keine - Parameter. Trotzdem wird eine Option wie ``--user`` immer einen nachfolgenden Parameter benötigen. - - Ein Parameter kann als separates Argument angegeben werden der einem Flag Argument folgt, oder als Teil der - gleichen Zeichenkette des Arguments, getrennt vom Flag durch ein Gleichheitszeichen (``=``). Die zweite Form wird - nur bei langen Flags unterstützt. Zum Beispiel, ``-u username``, ``--user username``, und ``--user=username`` - sind Formen welche durch ``Zend\Console\Getopt`` unterstützt werden. - -- "Verbund": Mehrere Einzel-Zeichen Flags kombiniert in einem einzelnen Argument als Zeichenkette und vorangestellt - durch einen einzelnen Bindestrich. Zum Beispiel "``ls -1str``" benutzt einen Verbund von vier kurzen Flags. - Dieses Kommando ist identisch mit "``ls -1 -s -t -r``". Nur Einzel-Zeichen Flags können kombiniert werden. Ein - Verbund von langen Flags kann nicht erstellt werden. - -Zum Beispiel ``mysql --user=root mydatabase``. ``mysql`` ist ein **Kommando**, ``--user=root`` ist eine **Option**, -``--user`` ist ein **Flag**, ``root`` ist ein **Parameter** für diese Option und ``mydatabase`` ist ein Argument -aber nicht eine Option laut unserer Definition. - -``Zend\Console\Getopt`` bietet ein Interface um zu definieren welche Flags für die Anwendung gültig sind, das -einen Fehler und Benutzungshinweise ausgibt wenn ein ungültiges Flag verwendet wird, und dem Code der Anwendung -bekanntgibt welche Flags der Benutzer definiert hat. - -.. note:: - - **Getopt ist kein Framework für eine Anwendung** - - ``Zend\Console\Getopt`` kann **nicht** die Bedeutung der Flags und Parameter interpretieren, noch implementiert - diese Klasse einen Anwendungsworkflow oder ruft Anwendungscode auf. Diese Aktionen müssen im eigenen - Anwendungscode integriert werden. Die ``Zend\Console\Getopt`` Klasse kann dazu verwendet werden um die - Kommandozeile zu analysieren und bietet Objekt-Orientierte Methoden für die Abfrage welche Optionen durch den - Benutzer angegeben wurden. Aber der Code um diese Informationen zu Verwenden und Teile der eigenen Anwendung - aufzurufen sollten in einer anderen *PHP* Klasse sein. - -Die folgende Sektion beschreibt die Verwendung von ``Zend\Console\Getopt``. - - diff --git a/docs/languages/de/modules/zend.console.getopt.rules.rst b/docs/languages/de/modules/zend.console.getopt.rules.rst deleted file mode 100644 index 4f9bc9e2d..000000000 --- a/docs/languages/de/modules/zend.console.getopt.rules.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. EN-Revision: none -.. _zend.console.getopt.rules: - -Definieren von Getopt Regeln -============================ - -Der Constructor für die ``Zend\Console\Getopt`` Klasse nimmt ein bis drei Argumente. Das erste Argument definiert -welche Optionen durch die Anwendung unterstützt werden. Diese Klasse unterstützt alternative Syntaxformen für -das definieren der Optionen. Die nächsten Sektionen geben Auskunft über das Format und die Verwendung dieser -Syntaxformen. - -Der Constructor nimmt zwei weitere Argumente, welche optional sind. Das zweite Argument kann Kommandozeilen -Argumente enthalten. Sein Standardwert ist ``$_SERVER['argv']``. - -Das dritte Argument des Constructors kann Konfigurationsoptionen enthalten um das Verhalten von -``Zend\Console\Getopt`` anzupassen. Siehe :ref:`Konfiguration hinzufügen -` für eine Referenz der möglichen Optionen. - -.. _zend.console.getopt.rules.short: - -Optionen mit der kurzen Syntax definieren ------------------------------------------ - -``Zend\Console\Getopt`` unterstützt eine kompakte Syntax wie Sie durch *GNU* Getopt verwendet wird (siehe -http://www.gnu.org/software/libc/manual/html_node/Getopt.html). Diese Syntax unterstützt nur Einzel-Zeichen -Flags. In einer einzelnen Zeichenkette, wird jeder Buchstabe angegeben der einem Flag entspricht das durch die -Anwendung unterstützt wird. Der Buchstabe, gefolgt von einem Doppelpunkt Zeichen (**:**) zeigt ein Flag das einen -Parameter benötigt. - -.. _zend.console.getopt.rules.short.example: - -.. rubric:: Verwendung der kurzen Syntax - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt('abp:'); - -Das obige Beispiel zeigt die Verwendung von ``Zend\Console\Getopt`` um die Optionen zu definieren die als ``-a``, -``-b``, oder ``-p`` angegeben werden können. Das letzte Flag benötigt einen Parameter. - -Die kurze Syntax ist limitiert auf Flags mit einzelnen Zeichen. Aliase, Parametertypen und Hilfszeichenketten -werden in der kurzen Syntax nicht unterstützt. - -.. _zend.console.getopt.rules.long: - -Optionen mit der langen Syntax definieren ------------------------------------------ - -Eine andere Syntax mit mehr Möglichkeiten ist auch vorhanden. Diese Syntax ermöglicht es Aliase für Flags, Typen -von Optionsparametern und auch Hilfszeichenkette zu definieren um die Verwendung für den Benutzer zu beschreiben. -Statt einer einzelnen Zeichenkette die in der kurzen Syntax verwendet wird um die Optionen zu definieren, verwendet -die lange Syntax ein assoziatives Array als erstes Argument für den Constructor. - -Der Schlüssel jeden Elements des assoziativen Array ist eine Zeichenkette mit einem Format dass das Flag benennt, -mit jedem Alias, getrennt durch ein Pipe Symbol ("**|**"). Dieser Serie von Flag Aliasen folgende, wenn die Option -einen Parameter benötigt, ist ein Gleichheitszeichen ("**=**") mit einem Buchstaben der für den **Typ** dieses -Parameters steht: - -- "**=s**" für einen Zeichenketten Parameter - -- "**=w**" für einen Wort Parameter (eine Zeichenkette die keine Leerzeichen enthält) - -- "**=i**" für einen Integer Parameter - -Wenn der Parameter optional ist, kann ein Bindestrich ("**-**") statt des Gleichheitszeichens verwendet werden. - -Der Wert jeden Elements in diesem assiziativen Array ist eine Hilfszeichenkette um dem Benutzer zu beschreiben wie -das Programm verwendet werden kann. - -.. _zend.console.getopt.rules.long.example: - -.. rubric:: Verwendung der langen Syntax - -.. code-block:: php - :linenos: - - $opts = new Zend\Console\Getopt( - array( - 'apfel|a' => 'Apfel Option, ohne Parameter', - 'banane|b=i' => 'Bananen Option, mit benötigtem Integer Parameter', - 'pfirsich|p-s' => 'Pfirsich Option, mit optionalem String Parameter' - ) - ); - -In der obigen Beispieldefinition, sind drei Optionen. ``--apfel`` und ``-a`` sind Aliase füreinander, und diese -Option nimmt keinen Parameter. ``--banane`` und ``-b`` sind Aliase füreinander, und diese Option nimmt einen -notwendigen Integer Parameter. Letztendlich, ``--pfirsich`` und ``-p`` sind Aliase füreinander, und diese Option -kann einen Optionalen Zeichenketten Parameter annehmen. - - - diff --git a/docs/languages/de/modules/zend.db.adapter.rst b/docs/languages/de/modules/zend.db.adapter.rst deleted file mode 100644 index 3903540c6..000000000 --- a/docs/languages/de/modules/zend.db.adapter.rst +++ /dev/null @@ -1,1559 +0,0 @@ -.. EN-Revision: none -.. _zend.db.adapter: - -Zend\Db\Adapter -=============== - -``Zend_Db`` und die zugehörigen Klassen bieten eine einfache *SQL* Schnittstelle für Zend Framework. -``Zend\Db\Adapter`` ist die Basisklasse zur Anbindung einer *PHP* Anwendung an ein *RDBMS*. Es gibt für jede -*RDBMS* Marke einen eigenen Adapter. - -Die ``Zend_Db`` Adapter bilden eine Schnittstelle zu den Hersteller spezifischen *PHP* Erweiterungen und -unterstützen dadurch die Entwicklung einer *PHP* Anwendung für verschiedene *RDBMS* mit geringem Aufwand. - -Die Schnittstellen der Adapterklasse ähneln denen der `PHP Data Objects`_ Erweiterung. ``Zend_Db`` bietet -Adapterklassen für *PDO* Treiber der folgenden *RDBMS* Marken: - -- *IBM* *DB2* und Informix Dynamic Server (*IDS*), verwenden die `pdo_ibm`_ *PHP* Erweiterung - -- MySQL, verwendet die `pdo_mysql`_ *PHP* Erweiterung - -- Microsoft *SQL* Server, verwendet die `pdo_dblib`_ *PHP* Erweiterung - -- Oracle, verwendet die `pdo_oci`_ *PHP* Erweiterung - -- PostgreSQL, verwendet die `pdo_pgsql`_ *PHP* Erweiterung - -- SQLite, verwendet die `pdo_sqlite`_ *PHP* Erweiterung - -Zusätzlich bietet ``Zend_Db`` Adapterklassen für die folgenden *RDBMS* Marken, welche eigene *PHP* Datenbank -Erweiterungen nutzen: - -- MySQL, mit der `mysqli`_ *PHP* Erweiterung - -- Oracle, mit der `oci8`_ *PHP* Erweiterung - -- *IBM* *DB2* und *DB2* I5, mit der `ibm_db2`_ *PHP* Erweiterung - -- Firebird (Interbase), mit der `php_interbase`_ *PHP* Erweiterung - -.. note:: - - Jeder ``Zend_Db`` Adapter nutzt eine *PHP* Erweiterung. Die entsprechend *PHP* Erweiterung muss in der *PHP* - Umgebung aktiviert sein um den ``Zend_Db`` Adapter zu nutzen. Zum Beispiel muss bei der Nutzung eines *PDO* - ``Zend_Db`` Adapters sowohl die *PDO* Erweiterung, als auch der *PDO* Treiber für die jeweilige *RDBMS* Marke - geladen sein. - -.. _zend.db.adapter.connecting: - -Anbindung einer Datenbank mit einem Adapter -------------------------------------------- - -Dieser Abschnitt beschreibt wie eine Instanz eines Datenbankadapters erzeugt wird. Dies entspricht der Erzeugung -einer Verbindung an ein *RDBMS* Server in einer *PHP* Anwendung. - -.. _zend.db.adapter.connecting.constructor: - -Nutzung des Zend_Db Adapter Konstruktors -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann eine Instanz eines Adapters erzeugen, indem man den Konstruktor verwendet. Ein Adapter Konstruktur -benötigt ein Argument, wobei es sich um ein Array mit Parametern für die Verbindung handelt. - -.. _zend.db.adapter.connecting.constructor.example: - -.. rubric:: Nutzung eines Adapter Konstruktors - -.. code-block:: php - :linenos: - - $db = new Zend\Db\Adapter\Pdo\Mysql(array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test' - )); - -.. _zend.db.adapter.connecting.factory: - -Nutzung der Zend_Db Factory -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Als Alternative zur direkten Nutzung des Konstruktors kann man auch eine Instanz des Adapters erzeugen indem man -die statische Methode ``Zend\Db\Db::factory()`` nutzt. Diese Methode lädt die Adapterklasse dynamisch bei Aufruf -unter Nutzung von :ref:`Zend\Loader\Loader::loadClass() `. - -Das erste Argument ist ein String der den Namen der Adapterklasse enthält. Zum Beispiel entspricht der String -'``Pdo_Mysql``' der Klasse ``Zend\Db\Adapter\Pdo\Mysql``. Das zweite Argument ist das gleiche Array von Parametern -wie bei der Verwendung des Adapter Konstruktors. - -.. _zend.db.adapter.connecting.factory.example: - -.. rubric:: Nutzung der Adapter factory() Methode - -.. code-block:: php - :linenos: - - // Wir benötigen das folgende Statement nicht da die - // Zend\Db\Adapter\Pdo\Mysql Datei für uns durch die Factory - // Methode von Zend_Db geladen wird - - // Lädt automatisch die Klasse Zend\Db\Adapter\Pdo\Mysql - // und erzeugt eine Instanz von Ihr. - $db = Zend\Db\Db::factory('Pdo_Mysql', array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test' - )); - -Wenn eine eigene Klasse geschrieben wird, die ``Zend\Db\Adapter\Abstract`` erweitert aber nicht mit dem Präfix -"``Zend\Db\Adapter``" beginnt, kann die ``factory()`` Methode verwendet werden um den Adapter zu Laden wenn der -führende Teil der Adapter Klasse mit dem 'adapterNamespace' Schlüssel im Parameter Array spezifiziert wird. - -.. _zend.db.adapter.connecting.factory.example2: - -.. rubric:: Die factory Methode für eine eigene Adapter Klasse verwenden - -.. code-block:: php - :linenos: - - // Wir müssen die Datei der Adapter Klasse nicht laden - // weil Sie für uns durch die Factory Methode von Zend_Db geladen wird - - // Die MyProject_Db_Adapter_Pdo_Mysql Klasse automatisch laden - // und eine Instanz von Ihr erstellen. - $db = Zend\Db\Db::factory('Pdo_Mysql', array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test', - 'adapterNamespace' => 'MyProject_Db_Adapter' - )); - -.. _zend.db.adapter.connecting.factory-config: - -Zend_Config mit Zend\Db\Factory verwenden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Optional kann jedes Argument der ``factory()`` Methode als Objekt des Typs :ref:`Zend_Config ` -spezifiziert werden. - -Wenn das erste Argument ein Config Objekt ist, wird erwartet das es eine Eigenschaft enthält die ``adapter`` -heißt und einen String enthält der nach dem Adapter Basis Klassen Namen benannt ist. Optional kann das Objekt -eine Eigenschaft genannt ``params`` enthalten, mit Subeigenschaften korrespondierend zu den Parameter Namen des -Adapters. Das wird nur verwendet wenn das zweite Argument für die ``factory()`` Methode nicht angegeben wird. - -.. _zend.db.adapter.connecting.factory.example1: - -.. rubric:: Verwenden der Factory Methode des Adapters mit einem Zend_Config Objekt - -Im Beispiel anbei wird ein ``Zend_Config`` Objekt von einem Array erstellt. Die Daten können auch aus einer -externen Datei geladen werden indem Klassen wie zum Beispiel :ref:`Zend\Config\Ini ` oder -:ref:`Zend\Config\Xml ` verwendet werden. - -.. code-block:: php - :linenos: - - $config = new Zend\Config\Config( - array( - 'database' => array( - 'adapter' => 'Mysqli', - 'params' => array( - 'host' => '127.0.0.1', - 'dbname' => 'test', - 'username' => 'webuser', - 'password' => 'secret', - ) - ) - ) - ); - - $db = Zend\Db\Db::factory($config->database); - -Das zweite Argument der ``factory()`` Methode kann ein assoziatives Array sein das Einträge enthält die den -Parameters des Adapters entsprechen. Dieses Argument ist optional. Wenn das erste Argument vom Typ ``Zend_Config`` -ist, wird angenommen das es alle Parameter enthält, und das zweite Argument wird ignoriert. - -.. _zend.db.adapter.connecting.parameters: - -Adapter Parameter -^^^^^^^^^^^^^^^^^ - -Die folgende Liste erklärt die gemeinsamen Parameter die von ``Zend_Db`` Adapterklassen erkannt werden. - -- **host**: Ein String der den Hostname oder die Ip-Adresse des Datenbankservers beinhaltet. Wenn die Datenbank auf - dem gleichen Host wie die *PHP* Anwendung läuft wird 'localhost' oder '127.0.0.1' verwendet. - -- **username**: Konto Kennung zur Authentisierung einer Verbindung zum *RDBMS* Server. - -- **password**: Konto Passwort zur Authentisierung einer Verbindung zum *RDBMS* Server. - -- **dbname**: Datenbank Name auf dem *RDBMS* Server. - -- **port**: Einige *RDBMS* Server können Netzwerkverbindungen an vom Administrator spezifizierten Ports - akzeptieren. Der Port-Parameter gibt die Möglichkeit die Portnummer anzugeben, an welche die *PHP* Anwendung - verbindet um der Port-Konfiguration des *RDBMS* Servers zu entsprechen. - -- **charset**: Spezifiziert das Zeichenset das für diese Verbindung verwendet werden soll. - -- **options**: Dieser Parameter ist ein assoziatives Array von Optionen die in allen ``Zend\Db\Adapter`` Klassen - enthalten sind. - -- **driver_options**: Dieser Parameter ist ein assoziatives Array von zusätzlichen Optionen die spezifisch für - die angegebene Datenbankerweiterung sind. Eine typische Anwendung dieses Parameters ist, Attribute für einen - *PDO* Treiber zu setzen. - -- **adapterNamespace**: Benennt den führenden Teil des Klassen Namens für den Adapter statt - '``Zend\Db\Adapter``'. Dies kann verwendet werden wenn man die ``factory()``\ Methode verwenden muß um eine - nicht von Zend kommende Datenbank Adapter Klasse zu laden. - -.. _zend.db.adapter.connecting.parameters.example1: - -.. rubric:: Übergeben der case-folding Option an die factory - -Diese Option kann über die Konstante ``Zend\Db\Db::CASE_FOLDING`` angegeben werden. Sie entspricht dem ``ATTR_CASE`` -Attribut in *PDO* und *IBM* *DB2* Datenbanktreibern und stellt die Schreibweise von String Schlüsseln in -Abfrageergebnissen ein. Die Option kann den Wert ``Zend\Db\Db::CASE_NATURAL`` (der Standard), ``Zend\Db\Db::CASE_UPPER`` -oder ``Zend\Db\Db::CASE_LOWER`` annehmen. - -.. code-block:: php - :linenos: - - $options = array( - Zend\Db\Db::CASE_FOLDING => Zend\Db\Db::CASE_UPPER - ); - - $params = array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test', - 'options' => $options - ); - - $db = Zend\Db\Db::factory('Db2', $params); - -.. _zend.db.adapter.connecting.parameters.example2: - -.. rubric:: Übergeben der auto-quoting Option an die factory - -Diese Option kann über die Konstante ``Zend\Db\Db::AUTO_QUOTE_IDENTIFIERS`` angegeben werden. Wenn der Wert ``TRUE`` -(der Standard) ist, werden Bezeichner wie Tabellennamen, Spaltennamen und auch Aliase in jeder *SQL* Syntax die vom -Adapter Objekt generiert wurde begrenzt. Dies macht es einfach Bezeichner zu verwenden, die *SQL* Schlüsselwörter -oder spezielle Zeichen enthalten. Wenn der Wert ``FALSE`` ist, werden Bezeichner nicht automatisch begrenzt. Wenn -Bezeichner begrenzt werden müssen, so kann dies über die ``quoteIdentifier()`` Methode von Hand getan werden. - -.. code-block:: php - :linenos: - - $options = array( - Zend\Db\Db::AUTO_QUOTE_IDENTIFIERS => false - ); - - $params = array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test', - 'options' => $options - ); - - $db = Zend\Db\Db::factory('Pdo_Mysql', $params); - -.. _zend.db.adapter.connecting.parameters.example3: - -.. rubric:: Übergeben von PDO Treiber Optionen an die factory - -.. code-block:: php - :linenos: - - $pdoParams = array( - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true - ); - - $params = array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test', - 'driver_options' => $pdoParams - ); - - $db = Zend\Db\Db::factory('Pdo_Mysql', $params); - - echo $db->getConnection() - ->getAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY); - -.. _zend.db.adapter.connecting.parameters.example4: - -.. rubric:: Übergabe einer Serialisierungs Option an die Factory - -.. code-block:: php - :linenos: - - $options = array( - Zend\Db\Db::ALLOW_SERIALIZATION => false - ); - - $params = array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test', - 'options' => $options - ); - - $db = Zend\Db\Db::factory('Pdo_Mysql', $params); - -.. _zend.db.adapter.connecting.getconnection: - -Verwalten von Lazy Connections -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Erzeugung einer Instanz der Adapterklasse stellt nicht gleichzeitig eine Verbindung zum *RDBMS* her. Der -Adapter speichert die Verbindungsparameter und stellt die tatsächliche Verbindung bei Bedarf her, wenn die erste -Anfrage ausgeführt wird. Dies stellt sicher, dass die Erzeugung eines Adapterobjekts schnell und sparsam ist. -Dadurch kann auch dann eine Instanz eines Adapters erzeugt werden, wenn nicht zwingend eine Datenbankanfrage für -die aktuell gelieferte Darstellung der Anwendung benötigt wird. - -Wenn der Adapter zwingend eine Verbindung zum *RDBMS* herstellen soll, kann die ``getConnection()`` Methode -verwendet werden. Diese liefert ein Objekt der Verbindung, welches eine Verbindung entsprechend der verwendeten -*PHP* Erweiterung repräsentiert. Wenn zum Beispiel irgendeine der *PDO* Adapterklassen verwendet wird, dann -liefert ``getConnection()`` das *PDO* Object, nachdem es als eine live Verbindung zu der entsprechenden Datenbank -initialisiert wurde. - -Es kann nützlich sein eine Verbindung zu erzwingen um jegliche Exceptions abzufangen, die als Resultat falscher -Konto Berechtigungen oder einem anderen Fehler bei der Verbindung zum *RDBMS* auftreten. Diese Exceptions treten -nicht auf, bis die tatsächliche Verbindung hergestellt ist, daher kann es den Anwendungs-Code vereinfachen, wenn -diese Exceptions an einer Stelle bearbeitet werden, und nicht erst bei der ersten Anfrage. - -Zusätzlich kann ein Adapter serialisiert werden um Ihn zu speichern, zum Beispiel in einer Session Variable. Das -kann sehr nütlich sein, nicht nur für den Adapter selbst, sondern auch für andere Objekte die Ihn verwenden, wie -ein ``Zend\Db\Select`` Objekt. Standardmäßig, ist es Adaptern erlaubt serialisiert zu werden. Wenn man das nicht -will, sollte man die ``Zend\Db\Db::ALLOW_SERIALIZATION`` Option mit ``FALSE`` übergeben, wie im Beispiel anbei -gezeigt. Um das Prinzip von Lazy Connections zu erlauben, wird der Adapter sich selbst nicht wiederverbinden wenn -er deserialisiert wird. Man muß ``getConnection()`` selbst aufrufen. Mann kann den Adapter dazu bringen sich -automatisch wieder zu verbinden indem ``Zend\Db\Db::AUTO_RECONNECT_ON_UNSERIALIZE`` als Option mit ``TRUE`` zum -Adapter übergeben wird. - -.. _zend.db.adapter.connecting.getconnection.example: - -.. rubric:: Umgang mit Verbindungs Exceptions - -.. code-block:: php - :linenos: - - try { - $db = Zend\Db\Db::factory('Pdo_Mysql', $parameters); - $db->getConnection(); - } catch (Zend\Db\Adapter\Exception $e) { - // Möglicherweise ein fehlgeschlagener login, - // oder die RDBMS läuft möglicherweise nicht - } catch (Zend_Exception $e) { - // Möglicherweise kann factory() die definierte Adapter Klasse nicht laden - } - -.. _zend.db.adapter.example-database: - -Beispiel Datenbank ------------------- - -In der Dokumentation für die ``Zend_Db`` Klassen verwenden wir einige einfache Tabellen um die Verwendung der -Klassen und Methoden zu erläutern. Diese Beispieltabellen können Informationen für das Bugtracking in einem -Softwareprojekt speichern. Die Datenbank enthält vier Tabellen: - -- **accounts** speichert Informationen über jeden Benutzer des Bugtracking Systems. - -- **products** speichert Informationen über jedes Produkt für das ein Bug erfasst werden kann. - -- **bugs** speichert informationen über Bugs, dazu gehört der derzeitige Status des Bugs, die Person die den Bug - berichtet hat, die Person die den Bug beheben soll und die Person welche die Fehlerbehebung verifizieren soll. - -- **bugs_products** speichert Beziehungen zwischen Bugs und Produkten. Dies enthält eine Viele-zu-Viele Beziehung, - da ein Bug für mehrere Produkte relevant sein kann. Und natürlich kann ein Produkt auch mehrere Bugs enthalten. - -Der folgende *SQL* Daten Definitions Sprache Pseudocode beschreibt die Tabellen in dieser Beispieldatenbank. Diese -Beispieltabellen werden intensiv bei den automatisierten Unit-Tests für ``Zend_Db`` verwendet. - -.. code-block:: sql - :linenos: - - CREATE TABLE accounts ( - account_name VARCHAR(100) NOT NULL PRIMARY KEY - ); - - CREATE TABLE products ( - product_id INTEGER NOT NULL PRIMARY KEY, - product_name VARCHAR(100) - ); - - CREATE TABLE bugs ( - bug_id INTEGER NOT NULL PRIMARY KEY, - bug_description VARCHAR(100), - bug_status VARCHAR(20), - reported_by VARCHAR(100) REFERENCES accounts(account_name), - assigned_to VARCHAR(100) REFERENCES accounts(account_name), - verified_by VARCHAR(100) REFERENCES accounts(account_name) - ); - - CREATE TABLE bugs_products ( - bug_id INTEGER NOT NULL REFERENCES bugs, - product_id INTEGER NOT NULL REFERENCES products, - PRIMARY KEY (bug_id, product_id) - ); - -Weiterhin zu beachten ist, dass die 'bugs' Tabelle mehrere Foreign-Key References zu der 'accounts' Tabelle -enthält. Jeder dieser Foreign-Keys kann auf eine andere Zeile für einen angegebenen Bug in der 'accounts' Tabelle -verweisen. - -Das unten stehende Diagramm illustriert das physische Datenmodell der Beispieldatenbank. - -.. image:: ../images/zend.db.adapter.example-database.png - :width: 387 - :align: center - -.. _zend.db.adapter.select: - -Lesen von Abfrageergebnissen ----------------------------- - -Dieser Abschnitt beschreibt Methoden der Adapterklasse mit denen *SELECT* Abfragen ausgeführt werden können um -Abfrageergebnisse abzurufen. - -.. _zend.db.adapter.select.fetchall: - -Holen des kompletten Ergebnisssatzes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann eine *SQL* *SELECT* Anfrage ausführen und alle Ergebnisse auf einmal mit der ``fetchAll()`` Methode -abrufen. - -Das erste Argument dieser Methode ist ein String der die *SELECT* Anweisung enthält. Als Alternative kann das -erste Argument auch ein Objekt der :ref:`Zend\Db\Select ` Klasse sein. Der Adapter konvertiert -dieses automatisch in einen String der die *SELECT* Anweisung repräsentiert. - -Das zweite Argument von ``fetchAll()`` ist ein Array von Werten die Parameterplatzhalter in der *SQL* Anweisung -ersetzen. - -.. _zend.db.adapter.select.fetchall.example: - -.. rubric:: Nutzung von fetchAll() - -.. code-block:: php - :linenos: - - $sql = 'SELECT * FROM bugs WHERE bug_id = ?'; - - $result = $db->fetchAll($sql, 2); - -.. _zend.db.adapter.select.fetch-mode: - -Ändern des Fetch Modus -^^^^^^^^^^^^^^^^^^^^^^ - -Standardmäßig gibt ``fetchAll()`` ein Array von Zeilen, jede als assoziatives Array, zurück. Die Schlüssel von -diesem assoziativem Array entsprechen den Spalten oder Spaltenaliasen wie sie in der SELECT Anfrage benannt sind. - -Man kann einen anderen Stil für das Holen der Ergebnisse mit der ``setFetchMode()`` Methode angeben. Die -unterstützten Modi werden mit folgenden Konstanten identifiziert: - -- **Zend\Db\Db::FETCH_ASSOC**: Gibt Daten in einem assoziativem Array zurück. Die Array Schlüssel sind Strings der - Spaltennamen. Dies ist der Standardmodus für ``Zend\Db\Adapter`` Klassen. - - Zu beachten ist, dass wenn die Select-Liste mehr als eine Spalte mit dem selben Namen enthält, zum Beispiel wenn - diese aus verschiedenen Tabellen durch einem *JOIN* bestehen, kann nur einer der Einträge im assoziativem Array - enthalten sein. Wenn der ``FETCH_ASSOC`` Modus verwandt wird, sollten Spaltenaliase in der *SELECT* Anfrage - angegeben werden um sicherzustellen dass die Namen eindeutige Arrayschlüssel ergeben. - - Standardmäßig werden die Strings so zurück gegeben wie sie von dem Datenbanktreiber geliefert werden. Dies - entspricht der typischen Schreibweise der Spaltennamen auf dem *RDBMS* Server. Die Schreibweise dieser Strings - kann mit der ``Zend\Db\Db::CASE_FOLDING`` Option angegeben werden. Dies muss bei der Instanziierung des Adapters - angegeben werden. Beschreibung unter :ref:`dieses Beispiel `. - -- **Zend\Db\Db::FETCH_NUM**: Gibt Daten in einem Array von Arrays zurück. Die Arrays werden über Integer indiziert, - entsprechend der Position der betreffenden Felder in der Select-Liste der Anfrage. - -- **Zend\Db\Db::FETCH_BOTH**: Gibt ein Array von Arrays zurück. Die Arrayschlüssel sind sowohl Strings wie beim - ``FETCH_ASSOC`` Modus, als auch Integer wie beim ``FETCH_NUM`` modus. Zu beachten ist, dass die Anzahl der - Elemente in dem Array doppelt so groß ist, als wenn ``FETCH_ASSOC`` oder ``FETCH_NUM`` verwendet worden wäre. - -- **Zend\Db\Db::FETCH_COLUMN**: Gibt Daten in einem Array von Werten zurück. Die Werte in jedem Array sind die Werte - wie sie in einer Spalte des Ergebnisses zurück gegeben wurden. Standardmäßig ist die erste Spalte mit 0 - indiziert. - -- **Zend\Db\Db::FETCH_OBJ**: Gibt Daten in einem Array von Objekten zurück. Die Standardklasse ist die in *PHP* - eingebaute Klasse stdClass. Spalten des Ergebnisses sind als öffentliche Eigenschaften des Objekts verfügbar. - -.. _zend.db.adapter.select.fetch-mode.example: - -.. rubric:: Nutzung von setFetchMode() - -.. code-block:: php - :linenos: - - $db->setFetchMode(Zend\Db\Db::FETCH_OBJ); - - $result = $db->fetchAll('SELECT * FROM bugs WHERE bug_id = ?', 2); - - // $result ist ein Array von Objekten - echo $result[0]->bug_description; - -.. _zend.db.adapter.select.fetchassoc: - -Holen eines Ergbnisssatzes als assoziatives Array -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``fetchAssoc()`` Methode gibt Daten in einem Array von assoziativen Array zurück, egal welcher Wert für den -fetch-Modus gesetzt wurde, indem die erste Spalte als Array Index verwendet wird. - -.. _zend.db.adapter.select.fetchassoc.example: - -.. rubric:: Nutzung von fetchAssoc() - -.. code-block:: php - :linenos: - - $db->setFetchMode(Zend\Db\Db::FETCH_OBJ); - - $result = $db->fetchAssoc( - 'SELECT bug_id, bug_description, bug_status FROM bugs' - ); - - // $result ist ein Array von assoziativen Arrays im Geist von fetch mode - echo $result[2]['bug_description']; // Beschreibung von Fehler #2 - echo $result[1]['bug_description']; // Beschreibung von Fehler #1 - -.. _zend.db.adapter.select.fetchcol: - -Holen einer einzelnen Spalte eines Ergebnisssatzes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``fetchCol()`` Methode gibt Daten in einem Array von Werten zurück, egal welcher Wert für den fetch-Modus -gesetzt wurde. Sie gibt nur die erste Spalte der Anfrage zurück. Alle weiteren Spalten der Anfrage werden -verworfen. Wenn eine andere Spalte als die Erste benötigt wird sollte :ref:`dieser Abschnitt -` beachtet werden. - -.. _zend.db.adapter.select.fetchcol.example: - -.. rubric:: Nutzung von fetchCol() - -.. code-block:: php - :linenos: - - $db->setFetchMode(Zend\Db\Db::FETCH_OBJ); - - $result = $db->fetchCol( - 'SELECT bug_description, bug_id FROM bugs WHERE bug_id = ?', 2); - - // Enthält bug_description; bug_id wird nicht zurückgegeben - echo $result[0]; - -.. _zend.db.adapter.select.fetchpairs: - -Holen von Schlüssel-Wert Paaren eines Ergebnisssatzes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``fetchPairs()`` Methode gibt Daten in einem Array von Schlüssel-Wert Paaren zurück, einem assoziativen Array -mit einem einzelnen Eintrag pro Zeile. Der Schlüssel dieses assoziativen Arrays wird von der ersten Spalte des -SELECT Ergebnisses genommen. Der Wert wird aus der zweiten Spalte des SELECT Ergebnisses genommen. Alle weiteren -Spalten des Ergebnisses werden verworfen. - -Die *SELECT* Anfrage sollte so gestaltet sein, dass die erste Spalte nur eindeutige Werte liefert. Wenn doppelte -Werte in der ersten Spalte vorkommen, werden entsprechende Einträge in dem assoziativen Array überschrieben. - -.. _zend.db.adapter.select.fetchpairs.example: - -.. rubric:: Nutzung von fetchPairs() - -.. code-block:: php - :linenos: - - $db->setFetchMode(Zend\Db\Db::FETCH_OBJ); - - $result = $db->fetchAssoc('SELECT bug_id, bug_status FROM bugs'); - - echo $result[2]; - -.. _zend.db.adapter.select.fetchrow: - -Holen einer einzelnen Zeile eines Ergebnisssatzes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``fetchRow()`` Methode gibt Daten entsprechend dem fetch-Modus zurück, jedoch nur die erste Zeile des -Ergebnisssatzes. - -.. _zend.db.adapter.select.fetchrow.example: - -.. rubric:: Nutzung von fetchRow() - -.. code-block:: php - :linenos: - - $db->setFetchMode(Zend\Db\Db::FETCH_OBJ); - - $result = $db->fetchRow('SELECT * FROM bugs WHERE bug_id = 2'); - - // Beachte das $result ein einzelnes Objekt ist, und kein Array von Objekten - echo $result->bug_description; - -.. _zend.db.adapter.select.fetchone: - -Holen eines einzelnen Scalars aus einem Ergebnisssatz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``fetchOne()`` Methode ist wie eine Kombination von ``fetchRow()`` mit ``fetchCol()``, gibt also nur die erste -Zeile des Ergebnisssatze zurück, und von dieser auch nur den Wert der ersten Spalte. Daher wird nur ein einziger -scalarer Wert zurückgegeben, kein Array und auch kein Objekt. - -.. _zend.db.adapter.select.fetchone.example: - -.. rubric:: Nutzung von fetchOne() - -.. code-block:: php - :linenos: - - $result = $db->fetchOne('SELECT bug_status FROM bugs WHERE bug_id = 2'); - - // this is a single string value - echo $result; - -.. _zend.db.adapter.write: - -Schreiben von Änderungen in die Datenbank ------------------------------------------ - -Die Adapterklasse kann verwendet werden um neue Daten in die Datenbank zu schreiben oder bestehende Daten in der -Datenbank zu ändern. Dieser Abschnitt beschreibt Methoden für diese Operationen. - -.. _zend.db.adapter.write.insert: - -Einfügen von Daten -^^^^^^^^^^^^^^^^^^ - -Neue Zeilen können in die Datenbank mit der ``insert()`` Methode eingefügt werden. Das erste Argument ist ein -String der die Tabelle benennt, und das zweite Argument ist ein assoziatives Array das den Spaltennamen Datenwerte -zuordnet. - -.. _zend.db.adapter.write.insert.example: - -.. rubric:: Einfügen in eine Tabelle - -.. code-block:: php - :linenos: - - $data = array( - 'created_on' => '2007-03-22', - 'bug_description' => 'Etwas falsch', - 'bug_status' => 'NEW' - ); - - $db->insert('bugs', $data); - -Spalten die nicht in dem Array definiert sind, werden nicht an die Datenbank übergeben. Daher folgen sie den -selben Regeln denen eine *SQL* *INSERT* Anweisung folgt: wenn die Spalte eine *DEFAULT* Klausel hat, so bekommt die -Spalte der neuen Zeile diesen Wert. Andernfalls behält sie den Status ``NULL``. - -Standardmäßig werden die Daten in dem Array mit Parametern eingefügt. Dies reduziert das Risiko einiger Typen -von Sicherheitsproblemen. Die Werte in dem Array müssen daher nicht escaped oder quotiert übergeben werden. - -Einige Werte in dem Array könnten als *SQL* Expressions benötigt werden, in diesem Fall dürfen sie nicht in -Anführungszeichen stehen. Standardmäßig werden alle übergebenen String-Werte als String-literale behandelt. Um -anzugeben das ein Wert eine *SQL* Expression ist, und daher nicht quotiert werden soll, muss der Wert als ein -Objekt des Typs ``Zend\Db\Expr`` übergeben werden, und nicht als einfacher String. - -.. _zend.db.adapter.write.insert.example2: - -.. rubric:: Einfügen von Expressions in eine Tabelle - -.. code-block:: php - :linenos: - - $data = array( - 'created_on' => new Zend\Db\Expr('CURDATE()'), - 'bug_description' => 'Etwas falsch', - 'bug_status' => 'NEW' - ); - - $db->insert('bugs', $data); - -.. _zend.db.adapter.write.lastinsertid: - -Abfragen von generierten Werten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Einige *RDBMS* Marken unterstützen Auto-Incrementierung von Primärschlüsseln. Eine Tabelle die so definiert ist -generiert automatisch einen Primärschlüsselwert während des *INSERT*'s einer neuen Zeile. Der Rückgabewert der -``insert()`` Methode ist **nicht** die letzte eingefügte ID, weil die Tabelle keine Auto-Increment Spalte haben -könnte. Statt dessen ist der Rückgabewert die Anzahl der betroffenen Zeilen (normalerweise 1). - -Wenn die Tabelle mit einem Auto-Increment Primärschlüssel definiert ist, kann die ``lastInsertId()`` Methode nach -dem INSERT aufgerufen werden. Diese Methode gibt den letzten generierten Wertim Rahmen der aktuellen -Datenbankverbindung zurück. - -.. _zend.db.adapter.write.lastinsertid.example-1: - -.. rubric:: Nutzung von lastInsertId() für einen Auto-Increment Schlüssel - -.. code-block:: php - :linenos: - - $db->insert('bugs', $data); - - // Gib den letzten durch eine auto-inkrement Spalte erzeugten Wert zurück - $id = $db->lastInsertId(); - -Einige *RDBMS* Marken unterstützen ein Sequenz-Objekt, welches eindeutige Werte generiert, die als -Primärschlüsselwerte dienen. Um Sequenzen zu unterstützen, akzeptiert die ``lastInsertId()`` Method zwei -optionale String Argumente. Diese Argumente benennen die Tabelle und die Spalte, in der Annahme das die Konvention -beachtet wurde, dass eine Sequenz mit der Tabelle und der Spalte benannt wurde, für die sie Werte generiert plus -dem Anhang "\_seq". Dies basiert auf der Konvention die von PostgreSQL verwendet wird, wenn Sequenzen für *SERIAL* -Spalten benannt werden. Zum Beispiel würde eine Tabelle "bugs" mit der Primärschlüsselspalte "bug_id" eine -Sequenz als "bugs_bug_id_seq" benennen. - -.. _zend.db.adapter.write.lastinsertid.example-2: - -.. rubric:: Nutzung von lastInsertId() für eine Sequenz - -.. code-block:: php - :linenos: - - $db->insert('bugs', $data); - - // Gib den letzten durch die 'bugs_bug_id_seq' Sequenz erstellten Wert zurück - $id = $db->lastInsertId('bugs', 'bug_id'); - - // Gib, alternativ, den letzten durch die 'bugs_seq' Sequenz - // erstellten Wert zurück - $id = $db->lastInsertId('bugs'); - -Wenn der Name des Squenz-Objekts nicht dieser Konvention folgt muss die ``lastSequenceId()`` Methode an Stelle -verwendet werden. Diese Methode benötigt ein String Argument, welches die Sequenz wörtlich benennt. - -.. _zend.db.adapter.write.lastinsertid.example-3: - -.. rubric:: Nutzung von lastSequenceId() - -.. code-block:: php - :linenos: - - $db->insert('bugs', $data); - - // Gib den letzten durch die 'bugs_id_gen' Sequenz erstellten Wert zurück. - $id = $db->lastSequenceId('bugs_id_gen'); - -Bei *RDBMS* Marken die keine Sequenzen unterstützen, dazu gehören MySQL, Microsoft *SQL* Server und SQLite, -werden die Argumente an die ``lastInsertId()`` Methode ignoriert, und der zurück gegebene Wert ist der zuletzt -für eirgendeine Tabelle während einer *INSERT* Operation generierte Wert innerhalb der aktuellen Verbindung. Für -diese *RDBMS* Marken gibt die ``lastSequenceId()`` Methode immer ``NULL`` zurück. - -.. note:: - - **Weshalb sollte man nicht "SELECT MAX(id) FROM table" verwenden?** - - Manchmal gibt diese Anfrage den zuletzt eingefügten Primärschlüsselwert zurück. Trotzdem ist diese Technik - in einer Umgebung in der mehrere Clients Daten in die Datenbank einfügen nicht sicher. Es ist möglich, und - daher vorherbestimmt eventuell aufzutreten, das ein anderer Client in dem Augenblick zwischen dem INSERT deiner - Client Anwendung und deiner Anfrage für den ``MAX(id)`` Wert, eine andere Zeile einfügt. Somit identifiziert - der zurück gegebene Wert nicht die von dir eingefügte Zeile, sondern die eines anderen Clients. Man kann nie - wissen wann dies passiert. - - Das Nutzen eines starken Transaktions Isolationsmodus wie "repeatable read" kann das Risiko mindern, aber einige - *RDBMS* Marken unterstützen nicht die Transaktions Isolation die hierfür benötigt wird, oder deine - Applikation könnte einen schwächeren Transaktions Isolationsmodus nutzen. - - Darüberhinaus ist das Nutzen eins Ausdrucks wie "``MAX(id)+1``" um einen neuen Wert für den Primärschlüssel - zu generiern nict sicher, weil zwei Clients diese Anfrage gleichzeitig ausführen könnten und damit beide den - gleichen Wert für ihre nächste *INSERT* Operation bekommen würden. - - Alle *RDBMS* Marken bieten einen Mechanismus um eindeutige Werte zu generieren, und um den zuletzt generierten - Wert zurück zu geben. Diese Machanismen funktionieren notwendigerweise außerhalb des Gültigkeitsbereichs - einer Transaktions Isolation, es besteht daher nicht die Möglichkeit das zwei Clients den selben Wert - generieren und es besteht nicht die Möglichkeit das der Wert, der von einem anderen Client generiert wurde, an - die Verbindung deines Clients, als letzter generierter Wert, gesendet wird. - -.. _zend.db.adapter.write.update: - -Aktualisieren von Daten -^^^^^^^^^^^^^^^^^^^^^^^ - -Zeilen in der Datenbank können mit der ``update()`` Methode eines Adapters aktualisiert werden. Diese Methode -benötigt drei Argumente: Das Erste ist der Name der Tabelle und das Zweite ist ein assoziatives Array das den zu -Ändernden Spalten neue Werte zuordnet. - -Die Werte des Datenarrays werden als String Literale behandelt. Beachte :ref:`diesen Abschnitt -` für Informationen zur Nutzung von *SQL* Expressions in dem Datenarray. - -Das dritte Argument ist ein String der aus einer *SQL* Expression besteht, die genutzt wird um Kriterien für die -Auswahl der zu ändernden Zeilen zu bestimmen. Die Werte und Bezeichner in diesem Argument werden nicht escaped -oder quotiert. An dieser Stelle muss darauf geachtet werden das sichergestellt ist, das dynamischer Inhalt sicher -in diesen String eingefügt wird. In :ref:`diesem Abschnitt ` sind Methoden beschrieben -die dabei helfen können. - -Der Rückgabewert ist die Anzahl der Betroffenen Zeilen der UPDATE Operation. - -.. _zend.db.adapter.write.update.example: - -.. rubric:: Aktualisieren von Zeilen - -.. code-block:: php - :linenos: - - $data = array( - 'updated_on' => '2007-03-23', - 'bug_status' => 'FIXED' - ); - - $n = $db->update('bugs', $data, 'bug_id = 2'); - -Wenn das dritte Argument ausgelassen wird, werden alle Zeilen der Tabelle mit den Werten des Datenarrays -aktualisiert. - -Wenn ein Array mit Strings als drittes Argument übergeben wird, werden diese Strings als eine Expression von -Ausdrücken, getrennt von ``AND`` Operatoren, zusammengefügt. - -Wenn man ein Array von Arrays als drittes Argument anbietet, werden die Werte automatisch in die Schlüssel -eingefügt. Diese werden dann zusammen zu Ausdrücken verbunden, getrennt von ``AND`` Operatoren. - -.. _zend.db.adapter.write.update.example-array: - -.. rubric:: Aktualisieren von Zeilen unter Nutzung eines Arrays von Expressions - -.. code-block:: php - :linenos: - - $data = array( - 'updated_on' => '2007-03-23', - 'bug_status' => 'FIXED' - ); - - $where[] = "reported_by = 'goofy'"; - $where[] = "bug_status = 'OPEN'"; - - $n = $db->update('bugs', $data, $where); - - // Der erstellte SQL Syntax ist: - // UPDATE "bugs" SET "update_on" = '2007-03-23', "bug_status" = 'FIXED' - // WHERE ("reported_by" = 'goofy') AND ("bug_status" = 'OPEN') - -.. _zend.db.adapter.write.update.example-arrayofarrays: - -.. rubric:: Zeilen aktualisieren durch Verwendung von einem Array von Arrays - -.. code-block:: php - :linenos: - - $data = array( - 'updated_on' => '2007-03-23', - 'bug_status' => 'FIXED' - ); - - $where['reported_by = ?'] = 'goofy'; - $where['bug_status = ?'] = 'OPEN'; - - $n = $db->update('bugs', $data, $where); - - // Das resultierende SQL ist: - // UPDATE "bugs" SET "update_on" = '2007-03-23', "bug_status" = 'FIXED' - // WHERE ("reported_by" = 'goofy') AND ("bug_status" = 'OPEN') - -.. _zend.db.adapter.write.delete: - -Löschen von Daten -^^^^^^^^^^^^^^^^^ - -Daten können aus einer Datenbanktabelle mit der ``delete()`` Methode gelöscht werden. Diese Methode benötigt -zwei Argumente: Das erste ist ein String der die Tabelle benennt. - -Das zweite Argument ist ein String der aus einer *SQL* Expression besteht, welche Kriterien für die zu löschenden -Zeilen enthält. Die Werte und Bezeichner in diesem Argument werden nicht escaped quotiert. An dieser Stelle muss -darauf geachtet werden das sichergestellt ist, das dynamischer Inhalt sicher in diesen String eingefügt wird. In -:ref:`diesem Abschnitt ` sind Methoden beschrieben die dabei helfen können. - -Der Rückgabewert ist die Anzahl der Betroffenen Zeilen der DELETE Operation. - -.. _zend.db.adapter.write.delete.example: - -.. rubric:: Löschen von Zeilen - -.. code-block:: php - :linenos: - - $n = $db->delete('bugs', 'bug_id = 3'); - -Wenn das zweite Argument ausgelassen wird, werden alle Zeilen der Tabelle gelöscht. - -Wenn ein Array mit Strings als zweites Argument übergeben wird, werden diese Strings als eine Expression von -Ausdrücken, getrennt von ``AND`` Operatoren, zusammengefügt. - -Wenn man ein Array von Arrays als zweites Argument übergibt, werden die Werte automatisch in die Schlüssel -eingefügt. Diese werden dann zusammen zu Ausdrücken verbunden, getrennt durch ``AND`` Operatoren. - -.. _zend.db.adapter.quoting: - -Quotierung von Werten und Bezeichnern -------------------------------------- - -Beim Erzeugen von *SQL* Anfragen ist es häufig nötig *PHP* Variablen in die *SQL* Expression einzufügen. Dies -ist riskant, weil der Wert eines *PHP* Strings bestimmte Zeichen enthalten kann, wie das Anführungszeichen, was zu -ungültiger *SQL* Syntax führen kann. Zum Beispiel, zu beachten ist die ungerade Anzahl der Anführungszeichen in -der folgenden Anfrage: - -.. code-block:: php - :linenos: - - $name = "O'Reilly"; - $sql = "SELECT * FROM bugs WHERE reported_by = '$name'"; - - echo $sql; - // SELECT * FROM bugs WHERE reported_by = 'O'Reilly' - -Noch schlimmer ist das Risiko, dass solche Code-Fehler von einer Person absichtlich ausgenutzt werden um die -Funktion der Webanwendung zu manipulieren. Wenn der Wert einer *PHP* Variablen über die Nutzung von *HTTP* -Parametern oder eines anderen Mechanismus gesetzt werden kann, könnte eine Person die *SQL* Anfragen nutzen um -Dinge zu tun, wozu sie nicht gedacht sind, wie Daten ausgeben, wozu die Person keine Zugangsberechtigung hat. Dies -ist eine ernst zu nehmende und weit verbreitete Technik um die Sicherheit einer Anwendung zu verletzen, bekannt -unter dem Namen "SQL Injection" (siehe http://en.wikipedia.org/wiki/SQL_Injection). - -Die ``Zend_Db`` Adapterklassen bieten bequeme Methoden, die helfen die Verletzbarkeit durch *SQL* Injection -Angriffe im *PHP* Code zu reduzieren. Die Lösung ist bestimmte Zeichen, wie Anführungszeichen, in *PHP* Werten zu -ersetzen bevor sie in *SQL* Strings eingefügt werden. Dies schützt sowohl vor versehentlicher als auch vor -absichtlicher Manipulation von *SQL* Strings durch *PHP* Variablen, die spezielle Zeichen enthalten. - -.. _zend.db.adapter.quoting.quote: - -Nutzung von quote() -^^^^^^^^^^^^^^^^^^^ - -Die ``quote()`` Methode benötigt ein Argument, einen skalaren String Wert. Sie gibt den Wert mit ersetzten -speziellen Zeichen, passend zu dem eingesetzten *RDBMS*, und umgeben von Stringwertbegrenzern zurück. Der Standard -*SQL* Stringwertbegrenzer ist das einfache Anführungszeichen ('). - -.. _zend.db.adapter.quoting.quote.example: - -.. rubric:: Nutzung von quote() - -.. code-block:: php - :linenos: - - $name = $db->quote("O'Reilly"); - echo $name; - // 'O\'Reilly' - - $sql = "SELECT * FROM bugs WHERE reported_by = $name"; - - echo $sql; - // SELECT * FROM bugs WHERE reported_by = 'O\'Reilly' - -Zu beachten ist, dass der Rückgabewert von ``quote()`` die Stringwertbegrenzer enthält. Dies ist ein Unterschied -zu anderen Methoden die spezielle Zeichen ersetzen, aber keine Stringwertbegrenzer hinzufügen, wie z.B. -`mysql_real_escape_string()`_. - -Es kann notwendig sein Werte in Anführungszeichen zu setzen oder nicht je nach dem Kontext des *SQL* Datentyps in -dem diese verwendet werden. Zum Beispiel darf, in einigen *RDBMS* Typen, ein Integer Wert nicht wie in String in -Anführungszeichen gesetzt werden, wenn dieser mit einer Integer-Typ Spalte oder einem Ausdruck verglichen wird. -Anders gesagt ist das folgende in einigen *SQL* Implementationen ein Fehler, wenn angenommen wird dass -``intColumn`` einen *SQL* Datentyp von ``INTEGER`` besitzt - -.. code-block:: php - :linenos: - - SELECT * FROM atable WHERE intColumn = '123' - -Es kann das optionale zweite Argument der ``quote()`` Methode verwendet werden um die Verwendung von -Anführungszeichen selektiv für den spezifizierten *SQL* Datentyp auszuwählen. - -.. _zend.db.adapter.quoting.quote.example-2: - -.. rubric:: Verwenden von quote() mit einem SQL Typ - -.. code-block:: php - :linenos: - - $value = '1234'; - $sql = 'SELECT * FROM atable WHERE intColumn = ' - . $db->quote($value, 'INTEGER'); - -Jede ``Zend\Db\Adapter`` Klasse hat den Namen des nummerischen *SQL* Datentyps für die respektive Marke von -*RDBMS* codiert. Man kann genauso die Konstanten ``Zend\Db\Db::INT_TYPE``, ``Zend\Db\Db::BIGINT_TYPE``, und -``Zend\Db\Db::FLOAT_TYPE`` verwenden um Code in einem mehr *RDBMS*-unabhängigen Weg zu schreiben. - -``Zend\Db\Table`` definiert *SQL* Typen zu ``quote()`` automatisch wenn *SQL* Abfragen erstellt werden die einer -Tabellen Schlüssel Spalte entsprechen. - -.. _zend.db.adapter.quoting.quote-into: - -Nutzung von quoteInto() -^^^^^^^^^^^^^^^^^^^^^^^ - -Die typischste Anwendung von Quotierung ist das Einfügen von *PHP* Variablen in eine *SQL* Expression oder -Anweisung. Die ``quoteInto()`` Methode kann verwendet werden um dies in einem Schritt zu erledigen. Die Methode -benötigt zwei Argumente: Das erste Argument ist ein String der ein Platzhaltersymbol (?) enthält, und das zweite -Argument ist ein Wert oder eine *PHP* Variable die den Platzhalter ersetzen soll. - -Das Platzhaltersymbol ist das gleiche Symbol wie es von vielen *RDBMS* Marken für Lage betreffende Parameter -verwendet wird, aber die ``quoteInto()`` Methode bildet nur Abfrageparameter nach. Die Methode fügt den Wert in -den String ein, ersetzt dabei spezielle Zeichen und fügt Stringwertbegrenzer ein. Echte Abfrageparameter sorgen -für eine Trennung von *SQL* String und Parametern wenn die Anweisung vom *RDBMS* Server verarbeitet wird. - -.. _zend.db.adapter.quoting.quote-into.example: - -.. rubric:: Nutzung von quoteInto() - -.. code-block:: php - :linenos: - - $sql = $db->quoteInto("SELECT * FROM bugs WHERE reported_by = ?", "O'Reilly"); - - echo $sql; - // SELECT * FROM bugs WHERE reported_by = 'O\'Reilly' - -Man kann den optionalen dritten Parameter von ``quoteInto()`` verwenden um den *SQL* Datentyp zu spezifizieren. -Nummerische Datentypen werden nicht in Anführungszeichen gesetzt und andere Typen werden in Anführungszeichen -gesetzt. - -.. _zend.db.adapter.quoting.quote-into.example-2: - -.. rubric:: Verwenden von quoteInto() mit einem SQL Typ - -.. code-block:: php - :linenos: - - $sql = $db - ->quoteInto("SELECT * FROM bugs WHERE bug_id = ?", '1234', 'INTEGER'); - - echo $sql; - // SELECT * FROM bugs WHERE reported_by = 1234 - -.. _zend.db.adapter.quoting.quote-identifier: - -Nutzung von quoteIdentifier() -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Werte könnten nicht der einzige Teil der *SQL* Syntax sein, der Variabel sein soll. Wenn *PHP* Variablen genutzt -werden um Tabellen, Spalten oder andere Bezeichner in den *SQL* Anweisungen zu benennen, könnte es nötig sein das -diese Strings ebenfalls quotiert werden müssen. Standardmäßig haben *SQL* Bezeichner Syntaxregeln wie *PHP* und -die meißten anderen Programmiersprachen. Zum Beispiel dürfen Bezeichner keine Leerzeichen, bestimmte Punktierung, -spezielle Zeichen oder Internationale Zeichen enthalten. Außerdem sind bestimmte Wörter für die *SQL* Syntax -reserviert und dürfen nicht als Bezeichner verwendet werden. - -Dennoch hat *SQL* ein Feature mit Namen **delimited identifiers (begrenzte Bezeichner)**, welches eine größere -Auswahl bei der Schreibweise von Bezeichnern erlaubt. Wenn ein *SQL* Bezeichner mit dem richtigen Typ von´ -Quotierung eingeschlossen ist, können Schreibweisen für die Bezeichner verwendet werden, die ohne der Quotierung -ungültig wären. Begrenzte Bezeichner können Leerzeichen, Punktierung oder internationale Zeichen enthalten. -Desweiteren dürfen auch von der *SQL* Syntax reservierte Wörter verwendet werden, wenn sie von Bezeichner -Begrenzungszeichen eingeschlossen sind. - -Die ``quoteIdentifier()`` Methode funktioniert wie ``quote()``, aber sie wendet die Bezeichner Begrenzungszeichen -entsprechend dem verwendeten Adapter an. Zum Beispiel nutzt Standard *SQL* doppelte Anführungszeichen (") zum -begrenzen von Bezeichnern und die meisten der *RDBMS* Marken nutzen ebenfalls dieses Symbol. MySQL hingegen benutzt -back-quotes (\`) als Standardzeichen. Die ``quoteIdentifier()`` Methode ersetzt außerdem spezielle Zeichen im -String Argument. - -.. _zend.db.adapter.quoting.quote-identifier.example: - -.. rubric:: Nutzung von quoteIdentifier() - -.. code-block:: php - :linenos: - - // Wir könnten einen Tabellennamen haben, der ein in SQL reserviertes Wort ist - $tableName = $db->quoteIdentifier("order"); - - $sql = "SELECT * FROM $tableName"; - - echo $sql - // SELECT * FROM "order" - -*SQL* begrenzte Bezeichner beachten die Groß- und Kleinschreibung, im Gegensatz zu nicht quotierten Bezeichnern. -Daher muss, bei Verwendung von begrenztern Bezeichnern, die Schreibung der Bezeichner genau der Schreibung der -Bezeichner im Tabellenschema entsprechen. Einschließlich der Groß- und Kleinschreibung. - -In den meisten Fällen wo *SQL* innerhalb der ``Zend_Db`` Klassen generiert wird, werden standardmäßig alle -Bezeichner automatisch begrenzt. Dieses Verhalten kann mit der Option ``Zend\Db\Db::AUTO_QUOTE_IDENTIFIERS`` geändert -werden. Dies muss beim Instanziieren des Adapters wie in :ref:`diesem Beispiel -` angegeben werden. - -.. _zend.db.adapter.transactions: - -Kontrollieren von Datenbank Transaktionen ------------------------------------------ - -Datenbanken definieren Transaktionen als logische Einheiten von Arbeit, die als einzelne Änderung übergeben oder -rückgängig gemacht werden kann, selbst wenn sie auf verschiedenen Tabellen operiert. Alle Anfragen an einen -Datenbank werden im Kontext einer Transaktion ausgeführt, selbst wenn der Datenbanktreiber sie implizit Verwaltet. -Es wird **auto-commit** Modus genannt, wenn der Datenbanktreiber eine Transaktion für jede Anweisung erzeugt, und -diese direkt nach dem Ausführen des *SQL* Statements übergibt. Standardmäßig operieren alle ``Zend_Db`` -Adapterklassen im auto-commit Modus. - -Alternativ kann der Begin und das Ergebnis einer Transaktion selbst spezifiziert werden, und damit kann -kontrolliert werden wieviele *SQL* Anfragen in einer Gruppe enthalten sind, die entweder übergeben oder -rückgängig gemacht wird, als eine einzelne Operation. Um eine Transaktion zu initiieren wird die -``beginTransaction()`` Methode verwendet. Anschließend folgende *SQL* Anweisungen werden im Kontext der selben -Transaktion ausgeführt bis sie explizit aufgelöst wird. - -Um eine Transaktion aufzulösen wird entweder die ``commit()`` oder die ``rollBack()`` Methode verwendet. Die -``commit()`` Methode markiert die Änderungen die während der Transaktionen durchgeführt wurden als übergeben, -was bedeutet das die Effekte dieser Änderungen in anderen Transaktionen angezeigt werden. - -Die ``rollBack()`` Methode tut das Gegenteil: sie verwirft die Änderungen die während der Transaktionen -durchgeführt wurden. Die Änderungen werden gewissermaßen ungeschehen gemacht, der Status der Daten ändert sich -zurück auf jenen wie sie vor Beginn der Transaktion waren. Allerdings hat das rückgängig machen keinen Einfluss -auf Änderungen die von anderen, gleichzeitig laufenden Transaktionen verursacht wurden. - -Nach dem Auflösen der Transaktion befindet sich der ``Zend\Db\Adapter`` wieder im auto-commit Modus, bis -``beginTransaction()`` wieder aufgerufen wird. - -.. _zend.db.adapter.transactions.example: - -.. rubric:: Verwalten einer Transaktion um Konsistenz sicher zu stellen - -.. code-block:: php - :linenos: - - // Eine Transaktion explizit starten - $db->beginTransaction(); - - try { - // Versuchen einen oder mehrere Abfragen auszuführen - $db->query(...); - $db->query(...); - $db->query(...); - - // Wenn alle erfolgreich waren, übertrage die Transaktion - // und alle Änderungen werden auf einmal übermittelt - $db->commit(); - - } catch (Exception $e) { - // Wenn irgendeine der Abfragen fehlgeschlagen ist, wirf eine Ausnahme, wir - // wollen die komplette Transaktion zurücknehmen, alle durch die - // Transaktion gemachten Änderungen wieder entfernen, auch die erfolgreichen - // So werden alle Änderungen auf einmal übermittelt oder keine - $db->rollBack(); - echo $e->getMessage(); - } - -.. _zend.db.adapter.list-describe: - -Auflistung und Beschreibung von Tabellen ----------------------------------------- - -Die ``listTables()`` Methode gibt ein Array von Strings zurück, mit den Namen aller Tabellen in der aktuellen -Datenbank. - -Die ``describeTable()`` Methode gibt ein assoziatives Array von MetaDaten über die Tabelle zurück. Das erste -Argument dieser Methode ist ein String der den Namen der Tabelle enthält. Das zweite Argument ist optional und -benennt das Schema in dem die Tabelle besteht. - -Die Schlüssel des assoziativen Arrays sind die Spaltennamen der Tabelle. Der zugehörige Wert jeder Spalte ist -ebenfalls ein assoziatives Array mit den folgenden Schlüsseln und Werten: - -.. _zend.db.adapter.list-describe.metadata: - -.. table:: Metadata Felder die von describeTable() zurückgegeben werden - - +----------------+---------+------------------------------------------------------------------------------------------+ - |Schlüssel |Typ |Beschreibung | - +================+=========+==========================================================================================+ - |SCHEMA_NAME |(string) |Name des Datenbankschemas in welchem diese Tabelle existiert. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |TABLE_NAME |(string) |Name der Tabelle zu welcher diese Spalte gehört. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |COLUMN_NAME |(string) |Name der Spalte. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |COLUMN_POSITION |(integer)|Ordinale Position der Spalte in der Tabelle. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |DATA_TYPE |(string) |RDBMS Name des Datentyps der Spalte. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |DEFAULT |(string) |Standardwert der Spalte, wenn angegeben. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |NULLABLE |(boolean)|TRUE wenn die Spalte SQLNULL akzeptiert, FALSE wenn die Spalte eine NOTNULL Bedingung hat.| - +----------------+---------+------------------------------------------------------------------------------------------+ - |LENGTH |(integer)|Länge oder Größe der Spalte wie vom RDBMS angegeben. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |SCALE |(integer)|Scalar vom Typ SQLNUMERIC oder DECIMAL. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |PRECISION |(integer)|Präzision des Typs SQLNUMERIC oder DECIMAL. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |UNSIGNED |(boolean)|TRUE wenn ein Integer-basierender Typ als UNSIGNED angegeben wird. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |PRIMARY |(boolean)|TRUE wenn die Spalte Teil des Primärschlüsssels der Tabelle ist. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |PRIMARY_POSITION|(integer)|Ordinale Position (1-basierend) der Spalte des Primärschlüssels. | - +----------------+---------+------------------------------------------------------------------------------------------+ - |IDENTITY |(boolean)|TRUE wenn die Spalte einen auto-increment Wert nutzt. | - +----------------+---------+------------------------------------------------------------------------------------------+ - -.. note:: - - **Wie das IDENTITY Metadata Feld zu speziellen RDBMS zuzuordnen ist** - - Das ``IDENTITY`` Metadata Feld wurd gewählt als ein 'idiomatischer' Ausdruck um eine Relation von - Ersatzschlüsseln zu repräsentieren. Dieses Feld ist üblicherweise durch die folgenden Werte bekannt: - - - ``IDENTITY``-*DB2*, *MSSQL* - - - ``AUTO_INCREMENT``- MySQL - - - ``SERIAL``- PostgreSQL - - - ``SEQUENCE``- Oracle - -Wenn keine Tabelle mit dem Tabellennamen und dem optional angegebenen Schemanamen existiert, gibt -``describeTable()`` ein leeres Array zurück. - -.. _zend.db.adapter.closing: - -Schließen einer Verbindung --------------------------- - -Normalerweise ist es nicht nötig eine Datenbankverbindung zu schließen. *PHP* räumt automatisch alle Ressourcen -am Ende einer Anfrage auf und die Datenbankerweiterungen sind so designed das sie Verbindungen beenden wenn -Referenzen zu ihren Objekten aufgeräumt werden. - -Trotzdem könnte es sinnvoll sein, wenn ein lang andauerndes *PHP* Script verwendet wird, das viele -Datenbankverbindungen hat, diese zu schließen um zu vermeiden das die Kapazität des *RDBMS* Servers -überschritten wird. Die ``closeConnection()`` Methode der Adapterklasse kann verwendet werden um die -zugrundeliegende Datenbankverbindung explizit zu schließen. - -Seit Release 1.7.2, kann man prüfen ob man mit der ``isConnected()`` prüfen ob man aktuell mit dem *RDBMS* Server -verbunden ist. Das bedeutet das eine Verbindungs Ressource initialisiert und nicht geschlossen wurde. Diese -Funktion ist aktuell nicht in der Lage zu prüfen ob zum Beispiel die Server Seite die Verbindung geschlossen hat. -Das wird intern verwendet um die Verbindung zu schließen. Das erlaubt es die Verbindung ohne Fehler mehrere Male -zu schließen. Das war bereits vor 1.7.2 der Fall für *PDO* Adapter, aber nicht für die anderen. - -.. _zend.db.adapter.closing.example: - -.. rubric:: Schließen einer Datenbankverbindung - -.. code-block:: php - :linenos: - - $db->closeConnection(); - -.. note:: - - **Unterstützt Zend_Db persistente Verbindungen?** - - Ja, Persistenz wird durch das Hinzufügen des ``persistent`` Flags in der Konfiguration (nicht - driver_configuration) und dessen Setzen auf ``TRUE`` bei einem Adapter in ``Zend_Db`` unterstützt. - - .. _zend.db.adapter.connecting.persistence.example: - - .. rubric:: Verwendung des Persistence Flags mit dem Oracle Adapter - - .. code-block:: php - :linenos: - - $db = Zend\Db\Db::factory('Oracle', array( - 'host' => '127.0.0.1', - 'username' => 'webuser', - 'password' => 'xxxxxxxx', - 'dbname' => 'test', - 'persistent' => true - )); - - Es ist zu beachten das die Verwendung von persistenten Verbindungen einen Exzess an Idle Verbindungen auf dem - *RDBMS* Server verursachen kann, was mehr Probleme macht als jeder Performance Gewinn den man durch die - Verminderung des Overheads eines Verbindungsaufbaues erhalten kann. - - Datenbankverbindungen haben einen Status. Natürlich existieren einige Objekte auf dem *RDBMS* Server im - Gültigkeitsbereich einer Session. Beispiele dafür sind locks, user variablen, temporary tables und - Informationen über die zuletzt ausgeführte Anfrage, sowie betroffene Zeilen und zuletzt generierte ID Werte. - Wenn persistente Verbindungen genutzt werden könnte die Anwendung Zugriff auf ungültige oder privilegierte - Daten erlangen, die in einem vorigen *PHP* Request erzeugt wurden. - - Aktuell unterstützen nur die Oracle, *DB2* und *PDO* Adapter (wo es von *PHP* spezifiziert ist) Persistenz in - ``Zend_Db``. - -.. _zend.db.adapter.other-statements: - -Ausführen anderer Datenbank Anweisungen ---------------------------------------- - -Es könnte Fälle geben in denen direkter Zugriff auf das Verbindungsobjekt benötigt wird, wie es von der *PHP* -Erweiterung bereitgestellt wird. Einige der Erweiterungen könnten Features anbieten, welche nicht von Methoden der -``Zend\Db\Adapter\Abstract`` Klasse auftauchen.. - -Zum Beispiel werden alle *SQL* Anweisungen von ``Zend_Db`` vorbereitet und dann ausgeführt. Trotzdem gibt es -einige Features welche nicht kompatibel mit vorbereiteten Anweisungen sind. ``DDL`` Anweisungen wie ``CREATE`` und -``ALTER`` können in MySQL nicht vorbereitet werden. Auch können *SQL* Anweisungen keinen Nutzen aus dem `MySQL -Query Cache`_ ziehen, bei einer geringeren MySQL Version als 5.1.17. - -Die meisten *PHP* Datenbankerweiterungen bieten eine Methode um *SQL* Anweisung auszuführen ohne diese -vorzubereiten. Zum Beispiel bietet *PDO* die Methode ``exec()``. Das Verbindungsobjekt der *PHP* Erweiterung kann -kann mit der Methode ``getConnection()`` direkt verwendet werden. - -.. _zend.db.adapter.other-statements.example: - -.. rubric:: Ausführen eines nicht-prepared Statements mit einem PDO Adapter - -.. code-block:: php - :linenos: - - $result = $db->getConnection()->exec('DROP TABLE bugs'); - -So ähnlich können auch andere Methoden oder Eigenschaften der speziellen *PHP* Datenbankerweiterung genutzt -werden. Zu beachten dabei ist jedoch, dass dadurch möglicherweise die Anwendung auf das angegebene Interface, -bereitgestellt von einer Erweiterung für ein bestimmtes *RDBMS*, beschränkt wird. - -In zukünftigen Versionen von ``Zend_Db`` werden Möglichkeiten gegeben sein, um Methoden Startpunkte -hinzuzufügen, für Funktionalitäten die den unterstützten *PHP* Datenbankerweiterungen gemein sind. Dies wird -die Rückwärtskompatibilität nicht beeinträchtigen. - -.. _zend.db.adapter.server-version: - -Erhalten der Server Version ---------------------------- - -Seit Release 1.7.2 kann man die Version des Servers in einem *PHP* artigen Stil erhalten damit man es mit -``version_compare()`` verwenden kann. Wenn die Information nicht vorhanden ist erhält man ``NULL`` zurück. - -.. _zend.db.adapter.server-version.example: - -.. rubric:: Prüfen der Server Version bevor eine Abfrage gestartet wird - -.. code-block:: php - :linenos: - - $version = $db->getServerVersion(); - if (!is_null($version)) { - if (version_compare($version, '5.0.0', '>=')) { - // mach was - } else { - // mach was anderes - } - } else { - // Server Version ist unmöglich zu lesen - } - -.. _zend.db.adapter.adapter-notes: - -Anmerkungen zu bestimmten Adaptern ----------------------------------- - -Dieser Abschnitt beschreibt Unterschiede zwischen den verschieden Adapterklassen auf die man achtgeben sollte. - -.. _zend.db.adapter.adapter-notes.sqlsrv: - -Microsoft SQL Server -^^^^^^^^^^^^^^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen 'Sqlsrv' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterung sqlsrv. - -- Es wird nur Microsoft *SQL* Server 2005 oder höher unterstützt. - -- Microsoft *SQL* Server unterstützt keine Sequenzen, daher ignoriert ``lastInsertId()`` das Primary Key Argument - und gibt immer den letzten Wert zurück der für den auto-increment Schlüssel generiert wurde wenn ein - Tabellenname spezifiziert wurde oder die letzte Insert Abfrage eine Id zurückgegeben hat. Die - ``lastSequenceId()`` Methode gibt ``NULL`` zurück. - -- ``Zend\Db\Adapter\Sqlsrv`` setzt ``QUOTED_IDENTIFIER`` ON unmittelbar nach der Verbindung zu einer *SQL* Server - Datenbank. Dadurch verwendet der Treiber das standardmäßige *SQL* Trennzeichen (**"**) statt den propietären - eckigen Klammern die der *SQL* Server für die Identifikatoren als Trennzeichen verwendet. - -- Man kann ``driver_options`` als Schlüssel im Options Array spezifizieren. Der Wert kann alles hieraus sein: - http://msdn.microsoft.com/en-us/library/cc296161(SQL.90).aspx. - -- Man kann ``setTransactionIsolationLevel()`` verwenden um einen Isolations Level für die aktuelle Verbindung zu - setzen. Der Wert kann wie folgt sein: ``SQLSRV_TXN_READ_UNCOMMITTED``, ``SQLSRV_TXN_READ_COMMITTED``, - ``SQLSRV_TXN_REPEATABLE_READ``, ``SQLSRV_TXN_SNAPSHOT`` oder ``SQLSRV_TXN_SERIALIZABLE``. - -- Mit *ZF* 1.9 ist das mindestens unterstützte Build der *PHP* *SQL* Server erweiterung von Microsoft 1.0.1924.0 - und die Version des *MSSQL* Server Native Clients 9.00.3042.00. - -.. _zend.db.adapter.adapter-notes.ibm-db2: - -IBM DB2 -^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen 'Db2' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterung ``IBM_DB2``. - -- *IBM* *DB2* unterstützt sowohl Sequenzen als auch auto-increment Schlüssel. Daher sind die Argumente für - ``lastInsertId()`` optional. Werden keine Argumente angegeben, gibt der Adapter den letzten Wert der für den - auto-increment Key generiert wurde zurück. Werden Argumente angegeben, gibt der Adapter den letzten Wert der - für die Sequenz mit dem Namen, entsprechend der Konvention, '**table**\ _ **column**\ _seq' generiert wurde - zurück. - -.. _zend.db.adapter.adapter-notes.mysqli: - -MySQLi -^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen 'Mysqli' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterung mysqli. - -- MySQL unterstützt keine Sequenzen, daher ignoriert ``lastInsertId()`` Argumente und gibt immer den letzten Wert - der für den auto-increment Schlüssel generiert wurde zurück. Die ``lastSequenceId()`` Methode gibt ``NULL`` - zurück. - -.. _zend.db.adapter.adapter-notes.oracle: - -Oracle -^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen 'Oracle' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterung oci8. - -- Oracle unterstützt keine auto-increment Schlüssel, daher sollte der Name einer Sequenz an ``lastInsertId()`` - oder ``lastSequenceId()`` übergeben werden. - -- Die Oracle Erweiterung unterstützt keine positionierten Parameter. Es müssen benannte Parameter verwendet - werden. - -- Aktuell wird die ``Zend\Db\Db::CASE_FOLDING`` Option vom Oracle Adapter nicht unterstützt. Um diese Option mit - Oracle zu nutzen muss der *PDO* *OCI* Adapter verwendet werden. - -- Standardmäßig werden *LOB* Felder als *OCI*-Log Objekte zurückgegeben. Man kann Sie für alle Anfragen als - String empfangen indem die Treiberoption '``lob_as_string``' verwendet wird, oder für spezielle Anfragen durch - Verwendung von ``setLobAsString(boolean)`` auf dem Adapter oder dem Statement. - -.. _zend.db.adapter.adapter-notes.pdo-ibm: - -PDO Adapter für IBM DB2 und für Informix Dynamic Server (IDS) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen '``Pdo_Ibm``' spezifiziert. - -- Dieser Adapter nutzt die *PHP* Erweiterungen *PDO* und *PDO_IBM*. - -- Es muß mindestens die *PDO_IBM* Erweiterung mit der Version 1.2.2 verwendet werden. Wenn eine ältere Version - verwendet wird, muß die *PDO_IBM* Erweiterung über *PECL* hochgerüstet werden. - -.. _zend.db.adapter.adapter-notes.pdo-mssql: - -PDO Microsoft SQL Server -^^^^^^^^^^^^^^^^^^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen '``Pdo_Mssql``' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterungen pdo und pdo_dblib. - -- Microsoft *SQL* Server unterstützt keine Sequenzen, daher ignoriert ``lastInsertId()`` Argumente und gibt immer - den letzten Wert der für den auto-increment Schlüssel generiert wurde zurück. Die ``lastSequenceId()`` Methode - gibt ``NULL`` zurück. - -- Wenn man mit Unicode Strings in einer anderen Codierung als *UCS*-2 (wie *UTF*-8) arbeitet, kann es sein das man - eine Konvertierung im eigenen Anwendungscode durchführen, oder die Daten in einer Binären Spalte speichern - muß. Referieren Sie bitte auf `Microsoft's Knowledge Base`_ für weitere Informationen. - -- ``Zend\Db\Adapter\Pdo\Mssql`` setzt ``QUOTED_IDENTIFIER`` ON direkt nach dem Verbinden zu einer *SQL* Server - Datenbank. Dadurch verwendet der Treiber das Standard *SQL* Bezeichner Begrenzungssymbol (") an Stelle der - proprietären Eckige-Klammer Syntax die der *SQL* Server standradmäßig nutzt. - -- Es kann ``pdoType`` als ein Schlüssel im Optionsarray gesetzt werden. Der Wert kann "mssql" (der Standard), - "dblib", "freetds", oder "sybase" sein. Diese Option beeinflusst den *DNS* Prefix, welchen der Adapter beim - Konstruieren des *DNS* Strings benutzt. Sowohl "freetds" als auch "sybase" implementieren einen Prefix von - "sybase:", welcher für den `FreeTDS`_ Satz von Libraries verwendet wird. Siehe auch - http://www.php.net/manual/de/ref.pdo-dblib.connection.php für weitere Informationen über die *DNS* Prefixe - die von diesem Treiber verwendet werden. - -.. _zend.db.adapter.adapter-notes.pdo-mysql: - -PDO MySQL -^^^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen '``Pdo_Mysql``' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterungen pdo und pdo_mysql. - -- MySQL unterstützt keine Sequenzen, daher ignoriert ``lastInsertId()`` Argumente und gibt immer den letzten Wert - der für den auto-increment Schlüssel generiert wurde zurück. Die ``lastSequenceId()`` Methode gibt ``NULL`` - zurück. - -.. _zend.db.adapter.adapter-notes.pdo-oci: - -PDO Oracle -^^^^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen '``Pdo_Oci``' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterungen pdo und pdo_oci. - -- Oracle unterstützt keine auto-increment Schlüssel, daher sollte der Name einer Sequenz an ``lastInsertId()`` - oder ``lastSequenceId()`` übergeben werden. - -.. _zend.db.adapter.adapter-notes.pdo-pgsql: - -PDO PostgreSQL -^^^^^^^^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen '``Pdo_Pgsql``' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterungen pdo und pdo_pgsql. - -- PostgreSQL unterstützt sowohl Sequenzen als auch auto-increment Schlüssel. Daher sind die Argumente für - ``lastInsertId()`` optional. Werden keine Argumente angegeben, gibt der Adapter den letzten Wert der für den - auto-increment Key generiert wurde zurück. Werden Argumente angegeben, gibt der Adapter den letzten Wert der - für die Sequenz mit dem Namen, entsprechend der Konvention, '**table**\ _ **column**\ _seq' generiert wurde - zurück. - -.. _zend.db.adapter.adapter-notes.pdo-sqlite: - -PDO SQLite -^^^^^^^^^^ - -- Dieser Adapter wird in der ``factory()`` Methode mit dem Namen '``Pdo_Sqlite``' angegeben. - -- Dieser Adapter nutzt die *PHP* Erweiterungen pdo und pdo_sqlite. - -- SQLite unterstützt keine Sequenzen, daher ignoriert ``lastInsertId()`` Argumente und gibt immer den letzten Wert - der für den auto-increment Schlüssel generiert wurde zurück. Die ``lastSequenceId()`` Methode gibt ``NULL`` - zurück. - -- Um mit einer SQLite2 Datenbank zu Verbinden muss ``'sqlite2' => true`` in dem Array von Parametern beim Erzeugen - einer Instanz des ``Pdo_Sqlite`` Adapters angegeben werden. - -- Um mit einer in-memory SQLite Datenbank zu verbinden muss ``'dbname' => ':memory:'`` in dem Array von Parametern - beim Erzeugen einer Instanz des ``Pdo_Sqlite`` Adapters angegeben werden. - -- Ältere Versionen des SQLite Treibers in *PHP* scheinen die *PRAGMA* Kommandos nicht zu unterstützen, die - benötigt werden um sicherzustellen, dass kurze Spaltennamen in Ergebnissätzen verwendet werden. Wenn in den - Ergebnissätzen Schlüssel der Art "tabellenname.spaltenname" bei Nutzung von JOIN Abfragen auftreten, sollte die - aktuellste *PHP* Version installiert werden. - -.. _zend.db.adapter.adapter-notes.firebird: - -Firebird (Interbase) -^^^^^^^^^^^^^^^^^^^^ - -- Dieser Adapter verwendet die *PHP* Erweiterung php_interbase. - -- Firebird (Interbase) unterstützt keine auto-increment Schlüssel, deswegen sollte der Name einer Sequenz bei - ``lastInsertId()`` oder ``lastSequenceId()`` spezifiziert werden. - -- Aktuell wird die ``Zend\Db\Db::CASE_FOLDING`` Option vom Firebird (Interbase) Adapter nicht unterstützt. Nicht - gequotete Identifizierer werden automatisch in Großschreibweise zurückgegeben. - -- Der Name des Adapters ist ``ZendX_Db_Adapter_Firebird``. - - Beachte das der Parameter adapterNamespace mit dem Wert ``ZendX_Db_Adapter`` zu verwenden ist. - - Wir empfehlen die ``gds32.dll`` (oder Ihr Linux Äquivalent) welche mit *PHP* ausgeliefert wird, auf die gleiche - Version wie am Server hochzurüsten. Für Firebird ist das Äquivalent zu ``gds32.dll`` die ``fbclient.dll``. - - Standardmäßig werden alle Identifikatoren (Tabellennamen, Felder) in Großschreibweise zurückgegeben. - - - -.. _`PHP Data Objects`: http://www.php.net/pdo -.. _`pdo_ibm`: http://www.php.net/pdo-ibm -.. _`pdo_mysql`: http://www.php.net/pdo-mysql -.. _`pdo_dblib`: http://www.php.net/pdo-dblib -.. _`pdo_oci`: http://www.php.net/pdo-oci -.. _`pdo_pgsql`: http://www.php.net/pdo-pgsql -.. _`pdo_sqlite`: http://www.php.net/pdo-sqlite -.. _`mysqli`: http://www.php.net/mysqli -.. _`oci8`: http://www.php.net/oci8 -.. _`ibm_db2`: http://www.php.net/ibm_db2 -.. _`php_interbase`: http://www.php.net/ibase -.. _`mysql_real_escape_string()`: http://www.php.net/mysqli_real_escape_string -.. _`MySQL Query Cache`: http://dev.mysql.com/doc/refman/5.1/en/query-cache-how.html -.. _`Microsoft's Knowledge Base`: http://support.microsoft.com/kb/232580 -.. _`FreeTDS`: http://www.freetds.org/ diff --git a/docs/languages/de/modules/zend.debug.rst b/docs/languages/de/modules/zend.debug.rst deleted file mode 100644 index e49a941fa..000000000 --- a/docs/languages/de/modules/zend.debug.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. EN-Revision: none -.. _zend.debug.dumping: - -Variablen ausgeben -================== - -Die statische Methode ``Zend\Debug\Debug::dump()`` druckt oder gibt Informationen über einen Ausdruck zurück. Diese -einfache Technik des Debuggens ist üblich, weil Sie in einer Ad-Hoc Weise einfach zu verwenden ist und keine -Initialisierung, spezielle Tools oder eine Debuggingumgebung benötigt. - -.. _zend.debug.dumping.example: - -.. rubric:: Beispiel der dump() Methode - -.. code-block:: php - :linenos: - - Zend\Debug\Debug::dump($var, $label = null, $echo = true); - -Das Argument ``$var`` definiert den Ausdruck oder die Variable, über welche die Methode ``Zend\Debug\Debug::dump()`` -Informationen ausgeben soll. - -Das Argument ``$label`` ist eine Zeichenkette, die der Ausgabe von ``Zend\Debug\Debug::dump()`` vorgestellt wurd. Das -kann beispielsweise hilfreich sein, um Überschriften zu erhalten, wenn Informationen über mehrere Variablen auf -einen Bildschirm ausgegeben werden. - -Das boolsche Argument ``$echo`` definiert, ob die Ausgabe von ``Zend\Debug\Debug::dump()`` mit Echo ausgegeben wird oder -nicht. Wenn der Wert ``TRUE`` ist, wird mit Echo ausgegeben, sonst nicht. Unabhängig vom Wert des ``$echo`` -Arguments enthält der Rückgabewert dieser Methode die Ausgabe. - -Es könnte hilfreich sein, zu verstehen, dass die ``Zend\Debug\Debug::dump()`` Methode die *PHP* Funktion `var_dump()`_ -verwendet. Wenn der Ausgabestream als Webdarstellung erkannt wird, wird die Ausgabe von ``var_dump()`` mit Hilfe -von `htmlspecialchars()`_ ausgeführt und mit (X)HTML ``
`` Tags umschlossen.
-
-.. tip::
-
-   **Debuggen mit Zend_Log**
-
-   Die Verwendung von ``Zend\Debug\Debug::dump()``\ eignet sich am besten für Ad-Hoc Debuggen wärend der Software
-   Entwicklung. Es kann für die Ausgabe einer Variablen Code hinzugefügt werden und dieser auch wieder sehr
-   schnell entfernt werden. wieder sehr schnell entfernt werden.
-
-   Um permanenteren Debugging-Code zu schreiben, sollte die :ref:`Zend_Log ` Komponente
-   verwendet werden. Zum Beispiel kann der ``DEBUG`` Loglevel mit dem :ref:`Stream Logger
-   ` verwendet werden, um die Zeichenkette auszugeben, die durch ``Zend\Debug\Debug::dump()``
-   zurückgegeben wird.
-
-
-
-.. _`var_dump()`: http://php.net/var_dump
-.. _`htmlspecialchars()`: http://php.net/htmlspecialchars
diff --git a/docs/languages/de/modules/zend.dom.intro.rst b/docs/languages/de/modules/zend.dom.intro.rst
deleted file mode 100644
index 10735114c..000000000
--- a/docs/languages/de/modules/zend.dom.intro.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. EN-Revision: none
-.. _zend.dom.introduction:
-
-Einführung
-==========
-
-``Zend_Dom`` bietet Werkzeuge für das Arbeiten mit *DOM* Dokumenten und Strukturen. Aktuell bieten wir
-``Zend\Dom\Query`` an, welche ein vereinheitlichtes Interface für das Abfragen von *DOM* Dokumenten anbietet und
-beide, XPath und *CSS* Selektoren verwendet.
-
-
diff --git a/docs/languages/de/modules/zend.dom.query.rst b/docs/languages/de/modules/zend.dom.query.rst
deleted file mode 100644
index cd813f619..000000000
--- a/docs/languages/de/modules/zend.dom.query.rst
+++ /dev/null
@@ -1,152 +0,0 @@
-.. EN-Revision: none
-.. _zend.dom.query:
-
-Zend\Dom\Query
-==============
-
-``Zend\Dom\Query`` bietet einen Mechanismus für die Abfrage von *XML* und (X) *HTML* Dokumenten indem entweder
-XPath oder *CSS* Selektoren verwendet werden. Sie wurde entwickelt um bei funktionalem Testen von *MVC* Anwendungen
-zu helfen, könnte aber auch für schnelle Entwicklung von Screen Scraper verwendet werden.
-
-Die *CSS* Selektor Schreibweise wird als einfacherer und für Web Entwickler bekannterer Weg angeboten um bei der
-Anfrage von Dokumenten mit *XML* Strukturen zu helfen. Diese Schreibweise sollte jedem, der Cascading Style Sheets
-entwickelt hat, bekannt sein, oder jedem, der Javascript Toolkits verwendet, die Funktionalität für das
-Auswählen von Knoten bei der Anpassung von *CSS* Selektoren anbieten (`Prototype's $$()`_ und `Dojo's dojo.query`_
-sind beides Inspirationen für diese Komponente).
-
-.. _zend.dom.query.operation:
-
-Theorie der Anwendung
----------------------
-
-Um ``Zend\Dom\Query`` zu verwenden muß ein ``Zend\Dom\Query`` Objekt instanziert werden, optional kann ein zu
-parsendes Dokument (ein String) übergeben werden. Sobald man ein Dokument hat, kann die ``query()`` oder die
-``queryXpath()`` Methode verwendet werden; jede Methode gibt ein ``Zend\Dom\Query\Result`` Objekt mit allen
-passenden Knoten zurück.
-
-Der grundsätzliche Unterschied zwischen ``Zend\Dom\Query`` und der Verwendung von DOMDocument + DOMXPath ist die
-Möglichkeit *CSS* Selektoren auszuwählen. Alle folgenden Elemente können in jeder Kombination verwendet werden:
-
-- **Element Typen**: Bietet einen Elementtypen an, der zu den folgenden passt: 'div', 'a', 'span', 'h2', usw.
-
-- **Stil Attribute**: *CSS* Stil Attribute passen zu folgenden: '``.error``', '``div.error``',
-  '``label.required``', usw. Wenn ein Element mehr als einen Stil definiert, wird er entsprechen solange der
-  benannte Stil irgendwo in der Stil Definition vorhanden ist.
-
-- **Id Attribute**: ID Attribute von Elementen passen zu folgenden: '#content', 'div#nav', usw.
-
-- **Andere Attribute**: Andere Attribute von Elementen die passen. Drei verschiedene Typen die passen werden
-  angeboten:
-
-  - **Exakte Entsprechung**: Das Attribute passt exakt zum String: 'div[bar="baz"]' würde zu einem Div Element mit
-    einem "bar" Attribut passen das exakt den Wert "baz" enthält.
-
-  - **Wort Entsprechung**: Das Attribut enthält ein Wort das dem String entspricht: 'div[bar~="baz"]' würde einem
-    Div Element mit einem "bat" Attribut entsprechen, dass das Wort "baz" enthält. '
' würde - passen, aber '
' würde nicht entsprechen. - - - **Substring Entsprechung**: Das Attribut enthält den String: 'div[bar*="baz"]' würde einem Div Element mit - einem "bar" Attribut entsprechen, das den String "baz" irgendwo darin enthält. - -- **Direkt abhängig**: Verwende '>' zwischen Selektoren um direkte Abhängigkeit auszudrücken. 'div > span' - würde nur 'span' Elemente auswählen, die direkt von 'div' abhängig sind. Kann auch mit jedem Selektor darüber - verwendet werden. - -- **Abhängigkeit**: Verknüpfung mehrerer Selektoren, um eine Hierarchie zwischen Ihnen auszudrücken nach welcher - gesucht werden soll. '``div .foo span #one``' würde ein Element mit der Id 'one' auswählen, das abhängig ist, - in einer beliebigen Tiefe unter einem 'span' Element, welches seinerseits in einer beliebigen Tiefe darunter von - einer Klasse von 'foo' abhängig ist, welche in einer beliebigen Tiefe von einem 'div' Element abhängig ist. Der - Link zum Wort 'One' im Beispiel anbei würde passen: - - .. code-block:: html - :linenos: - -
- - - - -
-
- Lorem ipsum - One - Two - Three - Four - -
-
-
- -Wenn man eine Abfrage ausgeführt hat, kann man mit dem Ergebnis Objekt arbeiten um Informationen über die Knoten -zu bekommen, sowie um Sie und/oder Ihren Inhalt direkt für die Extrahierung und Manipulation herauszuholen. -``Zend\Dom\Query\Result`` implementiert ``Countable`` und ``Iterator`` und speichert die Ergebnisse intern als -DOMNodes und DOMElements. Als Beispiel nehmen wir erstmal den folgenden Aufruf an der das obige *HTML* auswählt: - -.. code-block:: php - :linenos: - - $dom = new Zend\Dom\Query($html); - $results = $dom->query('.foo .bar a'); - - $count = count($results); // Gib die Anzahl an Gefundenen Nodes zurück: 4 - foreach ($results as $result) { - // $result ist ein DOMElement - } - -``Zend\Dom\Query`` erlaubt auch strenge XPath Abfragen durch Verwendung der ``queryXpath()`` Methode; man kann eine -gültige XPath Abfrage an diese Methode übergeben, und Sie wird ein ``Zend\Dom\Query\Result`` Objekt zurückgeben. - -.. _zend.dom.query.methods: - -Vorhandene Methoden -------------------- - -Die ``Zend\Dom\Query`` Familie an Klassen enthält die folgenden Methoden. - -.. _zend.dom.query.methods.zenddomquery: - -Zend\Dom\Query -^^^^^^^^^^^^^^ - -Die folgenden Methoden sind in ``Zend\Dom\Query`` vorhanden: - -- ``setDocumentXml($document)``: Spezifiziert einen *XML* String der abgefragt werden soll. - -- ``setDocumentXhtml($document)``: Spezifiziert einen *XHTML* String der abgefragt werden soll. - -- ``setDocumentHtml($document)``: Spezifiziert einen *HTML* String der abgefragt werden soll. - -- ``setDocument($document)``: Spezifiziert einen String der abgefragt werden soll; ``Zend\Dom\Query`` wird - anschließend versuchen den Typ des Dokument automatisch herauszufinden. - -- ``getDocument()``: Empfängt den String des Original Dokuments welches an das Objekt übergeben wurde. - -- ``getDocumentType()``: Empfängt den Typ des Dokuments das dem Objekt übergeben wurde; das wird eine der - Klassenkonstanten ``DOC_XML``, ``DOC_XHTML``, oder ``DOC_HTML`` sein. - -- ``query($query)``: Abfrage des Dokuments bei Verwendung der *CSS* Selektor Schreibweise. - -- ``queryXpath($xPathQuery)``: Abfrage des Dokuments bei Verwendung der XPath Schreibweise. - -.. _zend.dom.query.methods.zenddomqueryresult: - -Zend\Dom\Query\Result -^^^^^^^^^^^^^^^^^^^^^ - -Wie vorher erwähnt, implementiert ``Zend\Dom\Query\Result`` beide, ``Iterator`` und ``Countable``, und kann -deswegen in einer ``foreach()`` Schleife verwendet werden wie auch mit der ``count()`` Funktion. Zusätzlich bietet -es die folgenden Methoden an: - -- ``getCssQuery()``: Gibt die *CSS* Selektor Abfrage zurück, die für die Erstellung des Ergebnisses verwendet - wurde (wenn vorhanden). - -- ``getXpathQuery()``: Gibt die XPath Abfrage zurück die für die Erstellung des Ergebnisses verwendet wurde. - Intern konvertiert ``Zend\Dom\Query`` *CSS* Selektor Abfragen zu XPath, so das dieser Wert immer angeboten wird. - -- ``getDocument()``: Empfängt das DOMDocument auf das die Abfrage ausgeführt wurde. - - - -.. _`Prototype's $$()`: http://prototypejs.org/api/utility/dollar-dollar -.. _`Dojo's dojo.query`: http://api.dojotoolkit.org/jsdoc/dojo/HEAD/dojo.query diff --git a/docs/languages/de/modules/zend.exception.previous.rst b/docs/languages/de/modules/zend.exception.previous.rst deleted file mode 100644 index fbab6048f..000000000 --- a/docs/languages/de/modules/zend.exception.previous.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. EN-Revision: none -.. _zend.exception.previous: - -Vorherige Exceptions -==================== - -Seit Zend Framework 1.10 implementiert ``Zend_Exception`` die Unterstützung von *PHP* 5.3 für vorgerige -Exceptions. Einfach gesagt, wenn man in einem ``catch`` ist, kann man eine neue Exception werfen welche auf die -vorherige Exception referenziert, was wiederum hilft indem zusätzlicher Kontext angeboten wird wenn man debuggt. -Indem diese Unterstützung im Zend Framework angeboten wird, ist der eigene Code jetzt vorwärts kompatibel mit -*PHP* 5.3. - -Vorherige Exceptions werden als drittes Argument an den Contructor der Exceptions indiziert. - -.. _zend.exception.previous.example: - -.. rubric:: Vorherige Exceptions - -.. code-block:: php - :linenos: - - try { - $db->query($sql); - } catch (Zend\Db\Statement\Exception $e) { - if ($e->getPrevious()) { - echo '[' . get_class($e) - . '] hat die vorherige Exception von [' - . get_class($e->getPrevious()) - . ']' . PHP_EOL; - } else { - echo '[' . get_class($e) - . '] hat keine vorherige Exception' - . PHP_EOL; - } - - echo $e; - // zeigt alle Exceptions beginnend mit der ersten geworfenen - // Exception wenn vorhanden. - } - - diff --git a/docs/languages/de/modules/zend.exception.rst b/docs/languages/de/modules/zend.exception.rst deleted file mode 100644 index 0b6189836..000000000 --- a/docs/languages/de/modules/zend.exception.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. EN-Revision: none -.. _zend.exception.using: - -Verwenden von Ausnahmen -======================= - -``Zend_Exception`` ist einfach die Basisklasse für alle Exceptions die vom Zend Framework geworfen werden. - -.. _zend.exception.using.example: - -.. rubric:: Fangen einer Exception - -Das folgende Code Beispiel demonstriert wie eine Exception gefangen werden kann die in einer Zend Framework Klasse -geworfen wird: - -.. code-block:: php - :linenos: - - try { - // Der Aufruf von Zend\Loader\Loader::loadClass() mit einer nicht-existierenden - // Klasse wird eine Exception in Zend_Loader werfen: - Zend\Loader\Loader::loadClass('NonExistentClass'); - } catch (Zend_Exception $e) { - echo "Gefangene Exception: " . get_class($e) . "\n"; - echo "Nachricht: " . $e->getMessage() . "\n"; - // anderer Code um den Fehler zu korrigieren. - } - -``Zend_Exception`` kann als fang-sie-alle Exception Klasse in einem Catch Block verwendet werden um alle -Exceptions, die von Zend Framework Klassen geworfen werden, zu fangen. Das kann nützlich sein wenn das Programm, -durch das Fangen eines speziellen Exception Typs, nicht wiederhergestellt werden kann. - -Die Dokumentation der einzelnen Zend Framework Komponenten und Klassen enthält spezielle Informationen darüber -welche Methoden Exceptions werfen, die Gründe die dazu führen das eine Exception geworfen wird, und die -verschiedenen Exception Typen die geworfen werden können. - - diff --git a/docs/languages/de/modules/zend.feed.consuming-atom-single.rst b/docs/languages/de/modules/zend.feed.consuming-atom-single.rst deleted file mode 100644 index f1aea95ad..000000000 --- a/docs/languages/de/modules/zend.feed.consuming-atom-single.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.consuming-atom-single-entry: - -Einen einzelnen Atom Eintrag konsumieren -======================================== - -Einzelne Atom ```` Elemente sind auch für sich selber gültig. Normalerweise ist die *URL* für einen -Eintrag die *URL* des Feeds gefolgt von ``/``, wie bei ``http://atom.example.com/feed/1``, um die obige -Beispiel *URL* zu verwenden. - -Wenn Du einen einzelnen Eintrag liest, wirst du dennoch ein ``Zend\Feed\Atom`` Objekt erhalten, aber es wird -automatisch ein "anonymer" Feed erstellt, welcher den Eintrag enthält. - -.. _zend.feed.consuming-atom-single-entry.example.atom: - -.. rubric:: Lesen eines Atom Feeds mit einem Eintrag - -.. code-block:: php - :linenos: - - $feed = new Zend\Feed\Atom('http://atom.example.com/feed/1'); - echo 'Der Feed hat: ' . $feed->count() . ' Eintrag.'; - - $entry = $feed->current(); - -Alternativ kannst du das Objekt für den Eintrag auch direkt instanziieren, wenn du weist, dass du ein Dokument mit -nur einem ```` Eintrag abrufst: - -.. _zend.feed.consuming-atom-single-entry.example.entryatom: - -.. rubric:: Direkte Verwendung des Eintragsobjekts für einen Atom Feed mit nur einem Eintrag - -.. code-block:: php - :linenos: - - $entry = new Zend\Feed\Entry\Atom('http://atom.example.com/feed/1'); - echo $entry->title(); - - diff --git a/docs/languages/de/modules/zend.feed.consuming-atom.rst b/docs/languages/de/modules/zend.feed.consuming-atom.rst deleted file mode 100644 index d10f44c3f..000000000 --- a/docs/languages/de/modules/zend.feed.consuming-atom.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.consuming-atom: - -Einen Atom Feed konsumieren -=========================== - -``Zend\Feed\Atom`` wird auf die ziemlich genau selbe Weise verwendet wie ``Zend\Feed\Rss``. Es stellt die gleichen -Zugriffsmöglichkeiten auf Eigenschaften auf Feed Ebene und bei der Iteration über Einträge des Feeds bereit. Der -Hauptunterschied ist die Struktur des Atom Protokolls selber. Atom ist ein Nachfolger von *RSS*; es ist ein mehr -verallgemeinertes Protokoll und es wurde gestaltet, um einfacher mit Feeds umzugehen, die ihren kompletten Inhalt -innerhalb des Feeds bereit stellen, indem für diesen Zweck der ``description`` Tag von *RSS* in die zwei Elemente -``summary`` und ``content`` aufgeteilt wird. - -.. _zend.feed.consuming-atom.example.usage: - -.. rubric:: Grundlegende Verwendung eines Atom Feeds - -Lese einen Atom Feed und gebe ``title`` und ``summary`` jedes Eintrages aus: - -.. code-block:: php - :linenos: - - $feed = new Zend\Feed\Atom('http://atom.example.com/feed/'); - echo 'Der Feed enthält ' . $feed->count() . ' Einträge.' . "\n\n"; - foreach ($feed as $entry) { - echo 'Überschrift: ' . $entry->title() . "\n"; - echo 'Zusammenfassung: ' . $entry->summary() . "\n\n"; - } - -In einem Atom Feed kannst du die folgenden Feed-Eigenschaften erwarten: - -- ``title``- Die Überschrift des Feeds, gleichbedeutend mit der Überschrift eines *RSS* Channels - -- ``id``- Jeder Feed und Eintrag hat in Atom einen einzigartige Bezeichner - -- ``link``- Feeds können mehrere Links enthalten, welche durch ein ``type`` Attribut ausgezeichnet werden - - In einem *RSS* Channel wäre dies gleichbedeutend mit ``type="text/html"``. Wenn der Link auf eine alternative - Version des selben Inhalts verweist, der nicht im Feed enthalten ist, würde es ein ``rel="alternate"`` Attribut - enthalten. - -- ``subtitle``- Die Beschreibung des Feeds, gleichbedeutend mit der Beschreibung eines *RSS* Channels - - ``author->name()``- Der Name des Autoren des Feeds - - ``author->email()``- Die E-Mail Adresse des Autoren des Feeds - -Atom Einträge haben normalerweise folgende Eigenschaften: - -- ``id``- Der einzigartige Bezeichner des Eintrags - -- ``title``- Die Überschrift des Eintrags, gleichbedeutend mit der Überschrift eines *RSS* Eintrags - -- ``link``- Ein Link zu einem anderen Format oder einer alternativen Ansicht diesen Eintrags - -- ``summary``- Eine Zusammenfassung des Inhalts dieses Eintrags - -- ``content``- Der komplette Inhalt des Eintrags; kann übersprungen werden, wenn der Feed nur Zusammenfassungen - enthält - -- ``author``- Mit ``name`` und ``email`` Unter-Tags wie den Feeds - -- ``published``- Das Datum, an dem der Eintrag veröffentlicht wurde, im *RFC* 3339 Format - -- ``updated``- Das Datum, an dem der Eintrag das letzte Mal geändert wurde, im *RFC* 3339 Format - -Für weitere Informationen über Atom und unzähligen anderen Quellen, besuche http://www.atomenabled.org/. - - - diff --git a/docs/languages/de/modules/zend.feed.consuming-rss.rst b/docs/languages/de/modules/zend.feed.consuming-rss.rst deleted file mode 100644 index 40a0f5820..000000000 --- a/docs/languages/de/modules/zend.feed.consuming-rss.rst +++ /dev/null @@ -1,106 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.consuming-rss: - -Einen RSS Feed konsumieren -========================== - -Einen *RSS* Feed zu lesen, ist so einfach wie das Instanziieren eines ``Zend\Feed\Rss`` Objekts mit der *URL* eines -Feeds: - -.. code-block:: php - :linenos: - - $channel = new Zend\Feed\Rss('http://rss.example.com/channelName'); - -Wenn beim Abrufen des Feeds Fehler auftreten, wird eine ``Zend\Feed\Exception`` geworfen. - -Sobald du ein Feed Objekt hast, kannst du auf jeden Channel-Eigenschaften eines Standard *RSS* Feeds direkt über -das Objekt zugreifen: - -.. code-block:: php - :linenos: - - echo $channel->title(); - -Beachte die Syntax der Funktion. ``Zend_Feed`` verwendet die Konvention, die Eigenschaften als *XML* Objekt zu -behandeln, wenn sie durch die "Getter" Syntax für Variablen (``$obj->property``) angefordert werden, und als -String zu behandeln, wenn sie durch die Methodensyntax (``$obj->property()``) angefordert werden. Dies ermöglicht -den Zugriff auf den kompletten Text jedes individuellen Knotens, während weiterhin der komplette Zugriff auf alle -Kindelemente erlaubt ist. - -Wenn Channel-Eigenschaften Attribute beinhalten, sind diese durch die *PHP* Array Syntax ansprechbar: - -.. code-block:: php - :linenos: - - echo $channel->category['domain']; - -Da *XML* Attribute keine Kindelemente haben können, ist die Methodensyntax für den Zugriff auf Attributwerte -nicht notwendig. - -Meistens möchtest Du einen Feed durchlaufen und etwas mit seinen Einträgen machen. ``Zend\Feed\Abstract`` -implementiert das ``Iterator`` Interface von *PHP*, so dass die Ausgabe aller Artikelüberschriften eines Channels -nur dies erfordert: - -.. code-block:: php - :linenos: - - foreach ($channel as $item) { - echo $item->title() . "\n"; - } - -Wenn du mit *RSS* nicht vertraut bist, kommt hier eine Übersicht über die Standardelemente, die du in einem *RSS* -Channel und in einzelnen *RSS* Elementen (Einträgen) als verfügbar erwarten kannst. - -Erforderliche Elemente eines Channels: - -- ``title``- Der Name des Channels - -- ``link``- Die *URL* einer Website, die dem Channel entspricht - -- ``description``- Ein oder mehr Sätze, die den Channel beschreiben - -Allgemeine optionale Elemente eines Channels: - -- ``pubDate``- Das Erscheinungsdatum dieses Informationssatzes, im *RFC* 822 Datumsformat - -- ``language``- Die Sprache, in der dieser Channel verfasst ist - -- ``category``- Eine oder mehrere Kategorien (durch mehrfache Tags spezifiziert), zu denen der Channel gehört - -*RSS* **** Elemente haben keine strikt erforderlichen Elemente. Dennoch müssen entweder ``title`` oder -``description`` vorhanden sein. - -Allgemeine Elements eines Eintrags: - -- ``title``- Die Überschrift des Eintrags - -- ``link``- Die *URL* des Eintrags - -- ``description``- Eine Zusammenfassung des Eintrags - -- ``author``- Die E-Mail Adresse des Autoren - -- ``category``- Eine oder mehrere Kategorien, zu denen der Eintrag gehört - -- ``comments``-*URL* der Kommentare zu diesem Eintrag - -- ``pubDate``- Das Datum, an dem der Eintrag veröffentlicht wurde, im *RFC* 822 Datumsformat - -In deinem Code kannst du hiermit immer überprüfen, ob ein Element nicht leer ist: - -.. code-block:: php - :linenos: - - if ($item->propname()) { - // ... fahre fort. - } - -Wenn du stattdessen ``$item->propname`` verwendest, wirst du immer ein leeres Objekt erhalten, das mit ``TRUE`` -evaluiert, so dass deine Prüfung fehlschlagen würde. - -Für weitere Informationen ist die offizielle *RSS* 2.0 Specification hier verfügbar: -http://blogs.law.harvard.edu/tech/rss - - - diff --git a/docs/languages/de/modules/zend.feed.custom-feed.rst b/docs/languages/de/modules/zend.feed.custom-feed.rst deleted file mode 100644 index f1e6562b1..000000000 --- a/docs/languages/de/modules/zend.feed.custom-feed.rst +++ /dev/null @@ -1,89 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.custom-feed: - -Eigene Klassen für Feeds und Einträge -===================================== - -Schließlich kannst du die ``Zend_Feed`` Klasse erweitern, wenn du dein eigenes Format oder Feinheiten wie die -automatische Verarbeitung von Elementen, die in deinen eigenen Namensraum enthalten sein sollen, bereit stellen -möchtest - -Hier ist ein Beispiel einer eigenen Klasse für Atom Einträge, die ihre eigenen Elemente für den **myns:** -Namensraum verwendet. Beachte, dass sie auch den ``registerNamespace()`` Aufruf für dich durchführt, so dass sich -der Endbenutzer nicht um Namensräume kümmern muss. - -.. _zend.feed.custom-feed.example.extending: - -.. rubric:: Die Klasse für Atom Einträge mit einem eigenen Namensraum erweitern - -.. code-block:: php - :linenos: - - /** - * Die eigene Klasse für Einträge kennt automatisch die Feed URI (optional) - * und kann automatisch weitere Namensräume hinzufügen - */ - class MyEntry extends Zend\Feed\Entry\Atom - { - - public function __construct($uri = 'http://www.example.com/myfeed/', - $xml = null) - { - parent::__construct($uri, $xml); - - Zend\Feed\Feed::registerNamespace('myns', - 'http://www.example.com/myns/1.0'); - } - - public function __get($var) - { - switch ($var) { - case 'myUpdated': - // Übersetze myUpdated nach myns:updated. - return parent::__get('myns:updated'); - - default: - return parent::__get($var); - } - } - - public function __set($var, $value) - { - switch ($var) { - case 'myUpdated': - // Übersetze myUpdated nach myns:updated. - parent::__set('myns:updated', $value); - break; - - default: - parent::__set($var, $value); - } - } - - public function __call($var, $unused) - { - switch ($var) { - case 'myUpdated': - // Übersetze myUpdated zu myns:updated. - return parent::__call('myns:updated', $unused); - - default: - return parent::__call($var, $unused); - } - } - } - -Um diese Klasse zu verwenden, musst du sie nur direkt instanziieren und die ``myUpdated`` Eigenschaft setzen. - -.. code-block:: php - :linenos: - - $entry = new MyEntry(); - $entry->myUpdated = '2005-04-19T15:30'; - - // Methoden-Stil Aufruf wird von der _call Methode gehandhabt - $entry->myUpdated(); - // Eigenschaften-Stil Aufruf wurd von der __get Methode gehandhabt - $entry->myUpdated; - - diff --git a/docs/languages/de/modules/zend.feed.find-feeds.rst b/docs/languages/de/modules/zend.feed.find-feeds.rst deleted file mode 100644 index 8472a18dd..000000000 --- a/docs/languages/de/modules/zend.feed.find-feeds.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.findFeeds: - -Feeds von Websites abrufen -========================== - -Websites beinhalten oft **** Tags, die auf Feeds mit für diese Seite relevanten Informationen verweisen. -``Zend_Feed`` ermöglicht Dir, mit einem einfachen Methodenaufruf alle von einer Webseite referenzierten Feeds -abzurufen. - -.. code-block:: php - :linenos: - - $feedArray = Zend\Feed\Feed::findFeeds('http://www.example.com/news.html'); - -Hier gibt die ``findFeeds()`` Methode ein Array mit ``Zend\Feed\Abstract`` Objekten zurück, die durch die -**** Tags der ``news.html`` Webseite referenziert worden sind. Abhängig vom Typ jedes Feeds kann jeder -einzelne Eintrag in ``$feedArray`` eine ``Zend\Feed\Rss`` oder ``Zend\Feed\Atom`` Instanz enthalten. Bei Fehlern, -wie z.B. ein *HTTP* 404 Response Code oder ein nicht wohlgeformter Feed, wirft ``Zend_Feed`` eine -``Zend\Feed\Exception``. - - diff --git a/docs/languages/de/modules/zend.feed.importing.rst b/docs/languages/de/modules/zend.feed.importing.rst deleted file mode 100644 index ec0955c48..000000000 --- a/docs/languages/de/modules/zend.feed.importing.rst +++ /dev/null @@ -1,326 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.importing: - -Feeds importieren -================= - -``Zend_Feed`` ermöglicht es Entwicklern, Feeds sehr einfach abzurufen. Wenn Du die *URI* eines Feeds kennst, -verwende einfach die ``Zend\Feed\Feed::import()`` Methode: - -.. code-block:: php - :linenos: - - $feed = Zend\Feed\Feed::import('http://feeds.example.com/feedName'); - -Du kannst ``Zend_Feed`` außerdem verwenden, um Inhalte eines Feeds aus einer Datei oder die Inhalte aus einem -*PHP* String Variable zu abzurufen. - -.. code-block:: php - :linenos: - - // Feeds von einer Textdatei importieren - $feedFromFile = Zend\Feed\Feed::importFile('feed.xml'); - - // Feeds von einer PHP String Variable importieren - $feedFromPHP = Zend\Feed\Feed::importString($feedString); - -In jedem der obigen Beispiele wird bei Erfolg abhängig vom Typ des Feeds ein Objekt einer Klasse zurück gegeben, -welche ``Zend\Feed\Abstract`` erweitert. Wird ein *RSS* Feed durch eine der obigen Importiermethoden abgerufen, -wird eine ``Zend\Feed\Rss`` Objekt zurückgegeben. Auf der anderen Seite wird beim Importieren eines Atom Feeds ein -``Zend\Feed\Atom`` Objekt zurückgegeben. Bei Fehlern, wie z.B. ein unlesbarer oder nicht wohlgeformter Feed, -werfen die Importiermethoden auch ein ``Zend\Feed\Exception`` Objekt. - -.. _zend.feed.importing.custom: - -Eigene Feeds ------------- - -``Zend_Feed`` ermöglicht es Entwicklern Ihre eigenen Feeds sehr einfach zu erstellen. Man muß nur ein Array -erstellen und es in ``Zend_Feed`` importieren, Dieses Array kann mit ``Zend\Feed\Feed::importArray()`` oder mit -``Zend\Feed\Feed::importBuilder()`` importiert werden. Im letzteren Fall wird das Array on the Fly durch eine eigene -Datenquelle berechnet die ``Zend\Feed\Builder\Interface`` implementiert. - -.. _zend.feed.importing.custom.importarray: - -Importieren eines eigenen Arrays -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - :linenos: - - // Importieren eines Feeds von einem Array - $atomFeedFromArray = Zend\Feed\Feed::importArray($array); - - // Die folgende Zeile ist identisch mit der obigen; standardmäßig - // wird eine Zend\Feed\Atom Instanz zurückgegeben - $atomFeedFromArray = Zend\Feed\Feed::importArray($array, 'atom'); - - // Importieren eines RSS Feeds von einem Array - $rssFeedFromArray = Zend\Feed\Feed::importArray($array, 'rss'); - -Das Format des Arrays muß dieser Struktur entsprechen: - -.. code-block:: php - :linenos: - - array( - // benötigt - 'title' => 'Titel des Feeds', - 'link' => 'Kanonische URL zu dem Feed', - - // optional - 'lastUpdate' => 'Zeitstempel des Update Datums', - 'published' => 'Zeitstempel des Veröffentlichungs Datums', - - // benötigt - 'charset' => 'Zeichensatz der textuellen Daten', - - //optional - 'description' => 'Kurzbeschreibung des Feeds', - 'author' => 'Author, Veröffentlicher des Feeds', - 'email' => 'Email des Authors', - - // optional, ignoriert wenn Atom verwendet wird - 'webmaster' => 'Email Adresse der Person die für technische ' - . 'Belange verantwortlich ist', - - //optional - 'copyright' => 'Copyright Notiz', - 'image' => 'URL zu Bildern', - 'generator' => 'Ersteller', - 'language' => 'Sprache in welcher der Feed geschrieben ist', - - // optional, ignoriert wenn Atom verwendet wird - 'ttl' => 'Wie lange ein Feed gecached werden kann ' - . 'bevor er erneut werden muß', - 'rating' => 'Die PICS Rate dieses Kanals', - - // optional, ignoriert wenn Atom verwendet wird - // eine Wolke die über Updates benachrichtigt wird - 'cloud' => array( - // benötigt - 'domain' => 'Domain der Wolke, e.g. rpc.sys.com', - - // optional, Standard ist 80 - 'port' => 'Port zu dem verbunden wird', - - // benötigt - 'path' => 'Pfad der Wolke, e.g. /RPC2', - 'registerProcedure' => 'Prozedur die aufgerufen wird, ' - . 'z.B. myCloud.rssPleaseNotify' - 'protocol' => 'Protokoll das verwendet wird, z.B. ' - . 'soap oder xml-rpc' - ), - - // optional, ignoriert wenn Atom verwendet wird - // Eine Texteingabebox die im Feed angezeigt werden kann - 'textInput' => array( - // benötigt - 'title' => 'Die Überschrift des Senden Buttons im ' - . 'Texteingabefeld', - 'description' => 'Beschreibt das Texteingabefeld', - 'name' => 'Der Name des Text Objekts im ' - . 'Texteingabefeld', - 'link' => 'Die URL des CGI Skripts das Texteingabe ' - . 'Anfragen bearbeitet' - ), - - // optional, ignoriert wenn Atom verwendet wird - // Hinweise geben welche Stunden übersprungen werden können - 'skipHours' => array( - // bis zu 24 Zeilen dessen Werte eine Nummer zwischen 0 und 23 ist - // z.B. 13 (1pm) - 'hour in 24 format' - ), - - // optional, ignoriert wenn Atom verwendet wird - // Hinweise geben welche Tage übersprungen werden können - 'skipDays ' => array( - // bis zu 7 Zeilen dessen Werte Montag, Dienstag, Mittwoch, - // Donnerstag, Freitag, Samstag oder Sonntag sind - // z.B. Montag - 'a day to skip' - ), - - // optional, ignoriert wenn Atom verwendet wird - // Itunes Erweiterungsdaten - 'itunes' => array( - // optional, Standard ist der Wert der author Spalte - 'author' => 'Musiker Spalte', - - // optional, Standard ist der Wert der author Spalte - // Eigentümer des Podcasts - 'owner' => array( - 'name' => 'Name des Eigentümers', - 'email' => 'Email des Eigentümers' - ), - - // optional, Standard ist der image Wert - 'image' => 'Album/Podcast Bild', - - // optional, Standard ist der description Wert - 'subtitle' => 'Kurzbeschreibung', - 'summary' => 'Langbeschreibung', - - // optional - 'block' => 'Verhindern das eine Episode erscheint (ja|nein)', - - // benötigt - // 'Kategoriespalte und iTunes Music Store Browse' - 'category' => array( - // bis zu 3 Zeilen - array( - // benötigt - 'main' => 'Hauptkategorie', - - // optional - 'sub' => 'Unterkategorie' - ), - ), - - // optional - 'explicit' => 'Elterliche Anweisungsspalte (ja|nein|löschen)', - 'keywords' => 'Eine kommagetrennte Liste von maximal ' - . '12 Schlüsselwörtern', - 'new-feed-url' => 'Verwendet um iTunes über eine neue URL ' - . 'Lokation zu informieren' - ), - - 'entries' => array( - array( - // benötigt - 'title' => 'Titel des Feedeintrags', - 'link' => 'URL zum Feedeintrag', - - // benötigt, nur Text, kein HTML - 'description' => 'Kurzversion des Feedeintrags', - - //optional - 'guid' => 'Id des Artikels, wenn nicht angegeben ' - . 'wird der link Wert verwendet', - - // optional, kann HTML enthalten - 'content' => 'Langversion', - - // optional - 'lastUpdate' => 'Zeitstempel des Veröffnetlichungsdatums', - 'comments' => 'Kommentarseite des Feedeintrags', - 'commentRss' => 'Die FeedURL der zugehörenden Kommentare', - - // optional, Originale Quelle des Feedeintrags - 'source' => array( - // benötigt - 'title' => 'Titel der Originalen Quelle', - 'url' => 'URL der originalen Quelle' - ), - - // optional, Liste der zugeordneten Kategorien - 'category' => array( - array( - // benötigt - 'term' => 'Überschrift der ersten Kategorie', - - // optional - 'scheme' => 'URL die das Kategorisierungsschema ' - . 'identifiziert' - ), - - array( - //Daten der zweiten Kategorie und so weiter - ) - ), - - // optional, Liste der Anhänge des Feedeintrags - 'enclosure' => array( - array( - // benötigt - 'url' => 'URL des verlinkten Anhangs', - - // optional - 'type' => 'Mime Typ des Anhangs', - 'length' => 'Länge des verlinkten Inhalts oktal' - ), - - array( - // Daten für den zweiten Anhang und so weiter - ) - ) - ), - - array( - // Daten für den zweiten Eintrag und so weiter - ) - ) - ); - -Referenzen: - -- *RSS* 2.0 Spezifikation: `RSS 2.0`_ - -- Atom Spezifikation: `RFC 4287`_ - -- *WFW* Spezifikation: `Gut geformtes Web`_ - -- iTunes Spezifikation: `iTunes Technische Spezifikation`_ - -.. _zend.feed.importing.custom.importbuilder: - -Importieren einer eigenen Daten Quelle -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Eine ``Zend_Feed`` Instanz kann von jeder Datenquelle erstellt werden die ``Zend\Feed\Builder\Interface`` -implementiert. Die ``getHeader()`` und ``getEntries()`` Methoden müssen implementiert werden damit das Objekt mit -``Zend\Feed\Feed::importBuilder()`` verwendet werden kann. Als einfache Referenz Implementation kann -``Zend\Feed\Builder`` verwendet werden, welches ein Array im Contructor entgegen nimmt, einige einfache Prüfungen -durchführt, und anschließend in der ``importBuilder()`` Methode verwendet werden kann. Die ``getHeader()`` -Methode muß eine Instanz von ``Zend\Feed\Builder\Header`` zurückgeben, und ``getEntries()`` muß ein Array von -``Zend\Feed\Builder\Entry`` Instanzen zurückgeben. - -.. note:: - - ``Zend\Feed\Builder`` arbeitet als konkrete Implementation um die Verwendung zu demonstrieren. Benutzer sind - angehlaten Ihre eigenen Klassen zu Erstellen um ``Zend\Feed\Builder\Interface`` zu implementieren. - -Hier ist ein Beispiel der Verwendung von ``Zend\Feed\Feed::importBuilder()``: - -.. code-block:: php - :linenos: - - // Einen Feed von einer eigenen Erstellungsquelle importieren - $atomFeedFromArray = - Zend\Feed\Feed::importBuilder(new Zend\Feed\Builder($array)); - - // Die folgende Zeile ist mit der obigen äquivalent; standardmäßig - // wird eine Zend\Feed\Atom Instanz zurückgegeben - $atomFeedFromArray = - Zend\Feed\Feed::importBuilder(new Zend\Feed\Builder($array), 'atom'); - - // Einen RSS Feeed von einem Array von eigenen Erstellungsquellen importieren - $rssFeedFromArray = - Zend\Feed\Feed::importBuilder(new Zend\Feed\Builder($array), 'rss'); - -.. _zend.feed.importing.custom.dump: - -Ausgeben des Inhalts eines Feeds -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um den Inhalt einer ``Zend\Feed\Abstract`` Instanz auszugeben können die ``send()`` oder ``saveXml()`` Methoden -verwendet werden. - -.. code-block:: php - :linenos: - - assert($feed instanceof Zend\Feed\Abstract); - - // Den Feed an der Standardausgabe ausgeben - print $feed->saveXML(); - - // HTTP Header und den Feed ausgeben - $feed->send(); - - - -.. _`RSS 2.0`: http://blogs.law.harvard.edu/tech/rss -.. _`RFC 4287`: http://tools.ietf.org/html/rfc4287 -.. _`Gut geformtes Web`: http://wellformedweb.org/news/wfw_namespace_elements -.. _`iTunes Technische Spezifikation`: http://www.apple.com/itunes/store/podcaststechspecs.html diff --git a/docs/languages/de/modules/zend.feed.introduction.rst b/docs/languages/de/modules/zend.feed.introduction.rst deleted file mode 100644 index a67385efd..000000000 --- a/docs/languages/de/modules/zend.feed.introduction.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.introduction: - -Einführung -========== - -``Zend_Feed`` stellt Funktionalitäten für das Konsumieren von *RSS* und Atom Feeds. Es stellt eine natürliche -Syntax bereit, um auf Elemente und Attribute des Feeds sowie auf die Attribute der Einträge zugreifen zu können. -Mit derselben natürlichen Syntax bietet ``Zend_Feed`` auch eine umfassende Unterstützung für das Ändern von -Feed und Eintragsstruktur sowie die Rückgabe der Ergebniss nach *XML*. In Zukunft könnte diese -Modifizierungsunterstützung auch das Atom Publishing Protocol unterstützen. - -``Zend_Feed`` besteht aus der Basisklasse ``Zend_Feed``, sowie den beiden abstrakten Basisklassen -``Zend\Feed\Abstract`` und ``Zend\Feed\Entry\Abstract`` für die Darstellung von Feeds und Einträgen, aus -speziellen Implementationen von Feeds und Einträgen für *RSS* und Atom sowie einem Helfer, der hinter den -Kulissen die natürliche Syntax ermöglicht. - -Im Beispiel unten demonstrieren wir einen einfachen Anwendungsfall für die Abfrage eines *RSS* Feeds und die -Speicherung relevanter Teile der Feed Daten in einem einfachen *PHP* Array, welches dann für die Ausgabe der -Daten, das Speichern in eine Datenbank, usw. genutzt werden kann. - -.. note:: - - **Achtung** - - Viele *RSS* Feeds bieten verschiedene Eigenschaften für Kanäle und Einträge. Die *RSS* Spezifikation bietet - viele optionale Eigenschaften, also sei dir dessen beim Schreiben von Code für die Verarbeitung von *RSS* Daten - bewußt. - -.. _zend.feed.introduction.example.rss: - -.. rubric:: Zend_Feed für die Verarbeitung von RSS Feed Daten verwenden - -.. code-block:: php - :linenos: - - // hole die neuesten Slashdot Schlagzeilen - try { - $slashdotRss = - Zend\Feed\Feed::import('http://rss.slashdot.org/Slashdot/slashdot'); - } catch (Zend\Feed\Exception $e) { - // Import des Feeds ist fehlgeschlagen - echo "Exception caught importing feed: {$e->getMessage()}\n"; - exit; - } - - // Initialisiere das Array mit den Channel Daten - $channel = array( - 'title' => $slashdotRss->title(), - 'link' => $slashdotRss->link(), - 'description' => $slashdotRss->description(), - 'items' => array() - ); - - // Durchlauf jeden Eintrag und speichere die relevanten Daten - foreach ($slashdotRss as $item) { - $channel['items'][] = array( - 'title' => $item->title(), - 'link' => $item->link(), - 'description' => $item->description() - ); - } - - diff --git a/docs/languages/de/modules/zend.feed.modifying-feed.rst b/docs/languages/de/modules/zend.feed.modifying-feed.rst deleted file mode 100644 index 6961a08b3..000000000 --- a/docs/languages/de/modules/zend.feed.modifying-feed.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.modifying-feed: - -Verändern der Feed- und Eintragsstruktur -======================================== - -Die natürliche Syntax von ``Zend_Feed`` wurde für das Erstellen und Verändern von Feeds und Einträgen sowie das -Lesen dieser erweitert. Du kannst die neuen oder veränderten Objekte einfach in wohlgeformtes *XML* umsetzen, um -es als Datei zu speichern oder an einen Server zu senden. - -.. _zend.feed.modifying-feed.example.modifying: - -.. rubric:: Verändern eines bestehenden Feed Eintrags - -.. code-block:: php - :linenos: - - $feed = new Zend\Feed\Atom('http://atom.example.com/feed/1'); - $entry = $feed->current(); - - $entry->title = 'Dies ist ein neuer Titel'; - $entry->author->email = 'my_email@example.com'; - - echo $entry->saveXML(); - -Dies gibt eine vollständige (enthält den ```` Prolog) *XML* Darstellung des neuen Eintrags aus, -inklusive jedes notwendige *XML* Namensraumes. - -Beachte, dass das Obige auch funktioniert, wenn der existierende Eintrag noch keinen Autoren Tag beinhaltet. Du -kannst soviele Ebenen von ``->`` Verweisen verwenden, wie Du möchtest, um auf eine Zuordnung zugreifen zu können; -alle dieser zwischengeschalteten Stufen werden automatisch für dich erstellt wenn notwendig. - -Wenn du einen anderen Namensraum als ``atom:``, ``rss:``, oder ``osrss:`` in deinem Eintrag verwenden möchtest, -musst du den Namensraum mit ``Zend_Feed`` durch die Verwendung von ``Zend\Feed\Feed::registerNamespace()`` registrieren. -Wenn du ein bestehendes Element veränderst, wird es immer den ursprünglichen Namensraum beibehalten. Wenn du ein -neues Element hinzufügst, wird es den standardmäßigen Namensraum verwenden, wenn du nicht explizit einen anderen -Namensraum festgelegt hast. - -.. _zend.feed.modifying-feed.example.creating: - -.. rubric:: Erstellen eines Atom Eintrags mit Elementen eines eigenen Namensraumes - -.. code-block:: php - :linenos: - - $entry = new Zend\Feed\Entry\Atom(); - // Die ID wird immer vom Server in Atom zugewiesen - $entry->title = 'mein eigener Eintrag'; - $entry->author->name = 'Beispiel Autor'; - $entry->author->email = 'me@example.com'; - - // Nun erledige den eigenen Teil - Zend\Feed\Feed::registerNamespace('myns', 'http://www.example.com/myns/1.0'); - - $entry->{'myns:myelement_one'} = 'mein erster eigener Wert '; - $entry->{'myns:container_elt'}->part1 = 'Erster verschachtelter Teil'; - $entry->{'myns:container_elt'}->part2 = 'Zweiter verschachtelter Teil'; - - echo $entry->saveXML(); - - diff --git a/docs/languages/de/modules/zend.feed.pubsubhubbub.rst b/docs/languages/de/modules/zend.feed.pubsubhubbub.rst deleted file mode 100644 index 887eb5bf9..000000000 --- a/docs/languages/de/modules/zend.feed.pubsubhubbub.rst +++ /dev/null @@ -1,439 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.pubsubhubbub.introduction: - -Zend\Feed\Pubsubhubbub -====================== - -``Zend\Feed\Pubsubhubbub`` ist eine Implementation der PubSubHubbub Core 0.2 Spezifikation (Working Draft). Sie -bietet eine Implementation eines Pubsubhubbub Publizisten und Abonnenten geeignet für den Zend Framework und -andere *PHP* Anwendungen. - -.. _zend.feed.pubsubhubbub.what.is.pubsubhubbub: - -Was ist Pubsubhubbub? ---------------------- - -Pubsubhubbub ist ein offenes, einfaches Web-skalierbares Pubsub Protokoll. Der normale Anwendungsfall ist es Blogs -(Publizist) zu erlauben Aktualisierungen von deren *RSS* oder Atom Feeds (Themen) an Abonnenten zu "senden". Diese -Abonenten müssen dem *RSS* oder Atom Feed des Blogs über einen Hub abonniert haben. Das ist ein zentraler Server -der benachrichtigt wird wenn es Aktualisierungen des Publizisten gibt und diese anschließend an alle Abonnenten -verteilt. Jeder Feed kann bekanntgeben das er ein oder mehrere Hubs unterstützen indem ein Atom Namespaced -Linkelement mit dem Rel Attribut "hub" verwendet wird. - -Pubsubhubbub hat Aufmerksamkeit erlangt weil es ein Pubsub Protokoll ist das einfach zu implementieren ist und -über *HTTP* arbeitet. Seine Philosophie ist es das traditionelle Modell zu ersetzen indem Blog Feeds mit einem -regulären Interfall abgefragt werden um Aktualisierungen zu erkennen und zu empfangen. Abhängig von der Frequenz -der Abfrage kann es viel Zeit in Anspruch nehmen Aktualisierungen an interessierte Menschen bei Sammelstellen bis -zu Desktop Lesern, bekannt zu machen. Mit der Verwendung eines Pubsub Systems werden Aktualisierungen nicht einfach -von Abonnenten abgefragt sondern an die Abonnenten geschickt, was jegliche Verzögerung ausschaltet. Aus diesem -Grund fungiert Pubsubhubbub als Teil von dem was als Echt-Zeit Web bekannt ist. - -Das Protokoll existiert nicht isoliert. PubSub Systems gibt es schon seit einiger Zeit, wie auch das übliche -Jabber Publish-Subscribe Protokoll, *XEP-0060*, oder das nicht so bekannte rssCloud (beschrieben 2001). Trotzdem -haben diese keine keine breite Anwendung gefunden weil Sie entweder komplex sind, ein schlechtes Timing haben, oder -nicht für Web Anwendungen verwendbar sind. Bei rssCloud, welches zuletzt als Antwort auf das Erscheinen von -Pubsubhubbub revidiert wurde, wurde auch eine signifikante Steigerung gesehen obwohl es an einer formalen -Spezifikation fehlt und es aktuell keine Atom 1.0 Feeds unterstützt. - -Warscheinlich überraschend weil es noch relativ Jung ist, ist Pubsubhubbub trotzdem bereits in Verwendung unter -anderem bei Google Reader, Feedburner und es sind Plugins für Wordpress Blogs vorhanden. - -.. _zend.feed.pubsubhubbub.architecture: - -Architektur ------------ - -``Zend\Feed\Pubsubhubbub`` implementiert zwei Seiten der Pubsubhubbub 0.2 Spezifikation: einen Publizisten und -einen Abonnenten. Es implementiert aktuell keinen Hub Server. Dieser ist aber in Arbeit für ein zukünftiges Zend -Framework Release. - -Ein Publizist ist verantwortlich für die Mitteilung aller Aktualisierungen seines Feeds an alle unterstützten -Hubs (es können viele unterstützt werden um Redundanz zu einem System hinzuzufügen), egal ob es sich um Atom -oder *RSS* basierte handelt. Das wird getan indem die unterstützten Hub Server mit der *URL* des aktualisierten -Feeds gepingt werden. In der Pubsubhubbub Terminologie wird jede aktualisierbare Ressource welche in der Lage ist -abonniert zu werden als Thema bezeichnet. Sobald ein Ping empfangen wird, frägt der Hub den aktualisierten Feed -ab, bearbeitet die aktualisierten Elemente, und leitet alle Aktualisierungen an alle Abonnenten weiter die diesen -Feed abonniert haben. - -Ein Abonnent ist jedes Mitglied oder jede Anwendung welche einen oder mehrere Hubs abonniert um Aktuslisierungen -von einem Thema zu empfangen welches von einem Publizisten gehostet wird. Der Abonnent kommuniziert niemals direkt -mit dem Publizisten da der Hub als Zwischenglied fungiert welches Abos akzeptiert und Aktualisierungen an -Abonnenten sendet. Der Abonnent kommuniziert seinerseits nur mit dem Hub um Themen entweder zu abonnieren und Abos -zu entfernen, oder wenn er Aktualisierungen vom Hub empfängt. Dieses Design der Kommunikation ("Fat Pings") -entfernt effektiverweise die Möglichkeit eines "Thundering Herd" Problems. Dieses findet in einem Pubsub System -statt in dem der Hub Abonnenten über eine vorhandene Aktualisierung informiert, und alle Abonnenten dazu -auffordert den Feed sofort vom Publizisten zu empfangen, was zu einer Verkehrsspitze führt. In Pubsubhubbub -verteilt der Hub das aktuelle Update in einem "Fat Ping" so dass der Publizist keine Verkehrsspitze aushalten muss. - -``Zend\Feed\Pubsubhubbub`` implementiert Pubsubhubbub Publizisten und Abonnenten mit den Klassen -``Zend\Feed\Pubsubhubbub\Publisher`` und ``Zend\Feed\Pubsubhubbub\Subscriber``. Zusätzlich kann die Implementation -des Abonnenten alle Feed Aktualisierungen behandeln die von einem Hub weitergeleitet werden indem -``Zend\Feed\Pubsubhubbub\Subscriber\Callback`` verwendet wird. Diese Klassen, deren Verwendungszweck, und die -*API*\ s werden in den weiterführenden Abschnitten behandelt. - -.. _zend.feed.pubsubhubbub.zend.feed.pubsubhubbub.publisher: - -Zend\Feed\Pubsubhubbub\Publisher --------------------------------- - -In Pubsubhubbub ist der Publizist der Teilnehmer welcher einen lebenden Feed veröffentlicht und Ihn regelmäßig -mit neuem Inhalt aktualisiert. Das kann ein Blog, eine Sammlung, oder sogar ein Webservice mit einer öffentlichen -Feed basierenden *API* sein. Damit diese Aktualisierungen zu den Abonnenten geschickt werden können, muss der -Publizist alle seine unterstützten Hubs darüber informieren das eine Aktualisierung stattgefunden hat, indem eine -einfache *HTTP* *POST* Anfrage verwendet wird, welche die *URI* oder das aktualisierte Thema enthält (z.B. den -aktualisierten *RSS* oder Atom Feed). Der Hub bestätigt den Empfang der Benachrichtigung, holt den aktualisierten -Feed, und leitet alle Aktualisierungen an alle Abonnenten weiter welche sich bei diesem Hub für Aktualisierungen -für den relevanten Feed angemeldet haben. - -Vom Design her bedeutet dies dass der Publizist sehr wenig zu tun hat ausser diese Hub Pings jedesmal zu senden -wenn sich seine Feeds ändern. Als Ergebnis hiervon ist die Implementation des Publizisten extrem einfach zu -verwenden und benötigt sehr wenig Arbeit für die Einrichtung und Verwendung wenn Feeds aktualisiert werden. - -``Zend\Feed\Pubsubhubbub\Publisher`` implementiert einen kompletten Pubsubhubbub Publizisten. Sein Setup ist sehr -einfach und hauptsächlich müssen bei Ihm nur die *URI* Endpunkte für alle Hubs konfiguriert werden welche bei -Aktualisierungen benachrichtigt werden müssen, und die *URI*\ s aller Themen die in Benachrichtigungen einzubinden -sind. - -Das folgende Beispiel zeigt einen Publizisten der eine Sammlung von Hubs über Aktualisierungen zu einem Paar von -lokalen *RSS* und Atom Feeds benachrichtigt. Die Klasse enthält eine Anzahl von Fehlern welche die *URL*\ s des -Hubs enthalten, damit Benachrichtigungen stäter wieder ausgeführt oder protokolliert werden können wenn -irgendeine Benachrichtigung fehlschlägt. Jedes resultierende Fehlerarray enthält auch einen "response" Schlüssel -welche das betreffende *HTTP* Antwortobjekt enthält. In Falle irgendeines Fehlers wird empfohlen die Operation -für den fehlgeschlagenen Hub Endpunkt in Zukunft zumindest noch einmal zu versuchen. Das kann die Verwendung einer -geplanten Aufgabe für diesen Zweck oder einer Job Queue wenn solche extra Schritte optional sind. - -.. code-block:: php - :linenos: - - $publisher = new Zend\Feed\Pubsubhubbub\Publisher; - $publisher->addHubUrls(array( - 'http://pubsubhubbub.appspot.com/', - 'http://hubbub.example.com', - )); - $publisher->addUpdatedTopicUrls(array( - 'http://www.example.net/rss', - 'http://www.example.net/atom', - )); - $publisher->notifyAll(); - - if (!$publisher->isSuccess()) { - // Auf Fehler prüfen - $errors = $publisher->getErrors(); - $failedHubs = array() - foreach ($errors as $error) { - $failedHubs[] = $error['hubUrl']; - } - } - - // Benachrichtigung für fehlgeschlagene Hubs in $failedHubs nochmals planen - -Wenn man eine konkretere Kontrolle über den Publizisten bevorzugt, gibt es die Methoden ``addHubUrls()`` und -``addUpdatedTopicUrls()`` welche jeden Arraywert an die einzelnen öffentlichen Methoden ``addHubUrl()`` und -``addUpdatedTopicUrl()`` übergeben. Es gibt auch passende ``removeUpdatedTopicUrl()`` und ``removeHubUrl()`` -Methoden. - -Man kann das Setzen der Hub *URI*\ s auch überspringen und jeden in Folge benachrichtigen indem die Methode -``notifyHub()`` verwendet wird welche die *URI* eines Hub Endpunkts als sein einziges Argument akzeptiert. - -Es gibt keine anderen Aufgaben die abzudecken sind. Die Implementation des Publizisten ist sehr einfach da das -meiste der Feedbearbeitung und Verteilung von den ausgewählten Hubs durchgeführt wird. Es ist trotzdem wichtig -Fehler zu erkennen und Benachrichtigungen wieder so früh wie möglich zu planen (mit einer vernünftigen maximalen -Anzahl an Versuchen) um sicherzustellen das Benachrichtigungen alle Abonnenten erreichen. In vielen Fällen können -Hubs, als endgültige Alternative, den eigenen Feed regelmäßig abfragen um zusätzliche Toleranzen bei Fehlern -anzubieten sowohl wegen deren eigenen temporären Downtime als auch den Fehlern und der Downtime des Publizisten. - -.. _zend.feed.pubsubhubbub.zend.feed.pubsubhubbub.subscriber: - -Zend\Feed\Pubsubhubbub\Subscriber ---------------------------------- - -In Pubsubhubbub ist der Abonnent ein Teilnehmer welcher Aktualisierungen zu irgendeinem Thema (einem *RSS* oder -Atom Feed) empfangen will. Er kann dass bewerkstelligen indem er einen oder mehrere Hubs abonniert welche von -diesem Thema beworben werden, normalerweise als ein Set von ein oder mehreren Atom 1.0 Links mit dem Rel Attribut -"hub". Ab diesem Punkt sendet der Hub, wenn er eine Benachrichtigung über eine Aktualisierung des Publizisten -empfängt, einen Atom oder *RSS* Feed, welcher alle Aktualisierungen enthält, zur Callback *URL* des Abonnenten. -Über diesen Weg muss der Abonnent niemals den originalen Feed besuchen (obwohl es trotzdem empfohlen wird um -sicherzustellen das Aktualisierungen empfangen werden wenn ein Hub jemals offline geht). Alle Anfragen für Abos -müssen die *URI* des Themas enthalten welches abonniert werden soll, und eine Callback *URL* welche der Hub -verwendet um das Abo zu bestätigen und um Aktualisierungen weiterzuleiten. - -Der Abonnent hat deswegen zwei Rollen. Abos zu erstellen und zu managen, inklusive der Abonnierung von neuen Themen -mit einem Hub, dem kündigen von Abos (wenn notwendig), und periodisch Abos zu erneuern da diese eine begrenzte -Gültigkeit haben können was durch den Hub gesetzt wird. Dies wird von - -Die zweite Rolle ist es Aktualisierungen zu akzeptieren welche vom Hub zur Callback *URL* des Abonnenten gesendet -werden, wenn z.B. die *URI* des Abonnenten zugeordnet wurde um Aktualisierungen zu behandeln. Die Callback *URL* -behandelt auch Events wenn der Hub den Abonnenten kontaktiert um alle Abos zu das Löschen von Abos zu bestätigen. -Dies wird behandelt indem eine Instanz von ``Zend\Feed\Pubsubhubbub\Subscriber\Callback`` verwendet wird wenn auf -die Callback *URL* zugegriffen wird. - -.. important:: - - ``Zend\Feed\Pubsubhubbub\Subscriber`` implementiert die Pubsubhubbub Spezifikation 0.2. Da dies eine Version der - Spezifikation ist implementieren Sie aktuell nicht alle Hubs. Die neue Spezifikation erlaubt der Callback *URL* - einen Abfragestring einzubinden welcher von dieser Klasse verwendet, aber nicht von allen Hubs unterstützt - wird. Im Interesse einer maximalen Kompatibilität wird deshalb empfohlen die Komponente des Abfragestrings der - Callback *URI* des Abonnenten als Pfadelement darzustellen, z.B. als Parameter in der Route erkannt und mit der - Callback *URI* assoziiert und vom Router der Anwendung verwendet. - -.. _zend.feed.pubsubhubbub.zend.feed.pubsubhubbub.subscriber.subscribing.and.unsubscribing: - -Abonnieren und Abos löschen -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``Zend\Feed\Pubsubhubbub\Subscriber`` implementiert einen kompletten Pubsubhubbub Abonnenten der in der Lage ist -jedes Thema über jeden Hub der von diesem Thema vermittelt wird zu abonnieren und Abos zu löschen. Er arbeitet in -Verbindung mit ``Zend\Feed\Pubsubhubbub\Subscriber\Callback`` welcher Anfragen von einem Hub akzeptiert um alle -Aboanfragen und das Löschen von Abos zu bestätigen (um Missbrauch durch andere zu verhindern). - -Jedes Abo (oder Löschen eines Abos) benötigt die betreffende Information bevor es bearbeitet werden kann, z.B. -die *URI* des Themas (Atom oder *RSS* Feed) das für Aktualisierungen abonniert werden soll, und die *URI* des -Endpunkts für den Hub welcher die Anmeldung auf das Abo bearbeitet und die Aktualisierungen weiterleitet. Die -Lebenszeit eines Abos kann durch den Hub ermittelt werden, aber die meisten Hubs sollten die automatische -Auffrischung des Abos unterstützen indem der Abonnenten geprüft wird. Das wird von -``Zend\Feed\Pubsubhubbub\Subscriber\Callback`` unterstützt und benötigt keine weitere Arbeit. Es wird trotzdem -empfohlen dass man die vom Hub kommende Lebenszeit des Abos (time to live, ttl) verwendet um die Erstellung neuer -Abos zu planen (der Prozess ist identisch mit dem eines neuen Abos) um es beim Hub zu aktualisieren. Wärend das -per se nicht notwendig ist, deckt es Fälle ab in denen ein Hub die automatische Aktualisierung des Abos nicht -unterstützt und deckt damit Fehler des Hubs mit zusätzlicher Redundanz ab. - -Mit der relevanten Information an der Hand kann eine Abonnierung wie anbei gezeigt versucht werden: - -.. code-block:: php - :linenos: - - $storage = new Zend\Feed\Pubsubhubbub\Model\Subscription; - - $subscriber = new Zend\Feed\Pubsubhubbub\Subscriber; - $subscriber->setStorage($storage); - $subscriber->addHubUrl('http://hubbub.example.com'); - $subscriber->setTopicUrl('http://www.example.net/rss.xml'); - $subscriber->setCallbackUrl('http://www.mydomain.com/hubbub/callback'); - $subscriber->subscribeAll(); - -Um Abos zu speichern und Zugriff auf dessen Daten für eine generelle Verwendung zu Speichern benötigt die -Komponente eine Datenbank (ein Schema wird später in diesem Abschnitt angeboten). Standardmäßig wird angenommen -das der Name der Tabelle "subscription" ist und im Hintergrund ``Zend\Db\Table\Abstract`` anwendet, was bedeutet -das der Standardadapter verwendet wird welcher in der Anwendung gesetzt ist. Man kann auch eine eigene spezielle -Instanz von ``Zend\Db\Table\Abstract`` in das assoziierte Modell von ``Zend\Feed\Pubsubhubbub\Model\Subscription`` -übergeben. Dieser eigene Adapter kann so einfach wie gewünscht sein indem der Name der Tabelle welche zu -verwenden ist geändert wird, oder so komplex wie es notwendig ist. - -Wärend das Modell als standardmäßige bereits verwendbare Lösung angeboten wird, kann man sein eigenes Modell -verwenden indem irgendein anderes Backend oder Datenbanklayer (z.B. Doctrine) verwendet wird, solange die -resultierende Klasse das Interface ``Zend\Feed\Pubsubhubbub\Model\SubscriptionInterface`` implementiert. - -Ein Beispielschema (MySQL) für eine Abotabelle auf welche vom angebotenen Modell aus zugegriffen werden kann, -könnte wie folgt aussehen: - -.. code-block:: sql - :linenos: - - CREATE TABLE IF NOT EXISTS `subscription` ( - `id` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', - `topic_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `hub_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `created_time` datetime DEFAULT NULL, - `lease_seconds` bigint(20) DEFAULT NULL, - `verify_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `secret` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, - `expiration_time` datetime DEFAULT NULL, - `subscription_state` varchar(12) COLLATE utf8_unicode_ci DEFAULT NULL, - PRIMARY KEY (`id`) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; - -Im Hintergrund sendet der Abonnent eine Anfrage an den Endpunkt des Hubs welche die folgenden Parameter enthält -(basierend auf dem vorhergehenden Beispiel): - -.. _zend.feed.pubsubhubbub.zend.feed.pubsubhubbub.subscriber.subscribing.and.unsubscribing.table: - -.. table:: Anfrageparameter beim Abonnieren - - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Parameter |Wert |Beschreibung | - +=================+=================================================================================================+===============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |hub.callback |http://www.mydomain.com/hubbub/callback?xhub.subscription=5536df06b5dcb966edab3a4c4d56213c16a8184|Die URI welche von einem Hub verwendet wird um den Abonnenten zu kontaktieren und entweder eine Bestätigung für eine Anfrage oder das Löschen eines Abos abzufragen oder Aktualisierungen für abonnierte Feeds zu senden. Der angehängte Abfragestring enthält einen eigenen Parameter (demzufolge der Zweck von xhub). Es ist ein Parameter für einen Abfragestring welcher vom Hub aufbewahrt um mit allen Anfragen des Abonnenten wieder versendet wird. Sein Zweck ist es dem Abonnenten zu erlauben sich zu identifizieren und die Abos zu betrachten welche mit einer beliebigen Hubanfrage in einem Backend=Speichermedium assoziiert sind. Das ist kein Standardparameter welcher von dieser Komponente verwendet wird statt einen Aboschlüssel im URI Pfad zu kodieren, was in einer Zend Framework Anwendung viel komplizierter zu implementieren wäre. Trotzdem, da nicht alle Hubs Parameter für den Abfragestring unterstützen wird empfohlen den Aboschlüssel als Pfadkomponente in der Form von http://www.mydomain.com/hubbub/callback/5536df06b5dcb966edab3a4c4d56213c16a8184 hinzuzufügen. Um das zu bewerkstelligen, wird die Definition einer Route benötigt welche in der Lage ist den endgültigen Wert des Schlüssels herauszuparsen den Wert zu erhalten und Ihn an das Callback Objekt des Abonnenten zu übergeben. Der Wert würde an die Methode Zend\Pubsubhubbub\Subscriber\Callback::setSubscriptionKey() übergeben. Ein detailiertes Beispiel wird später gezeigt.| - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hub.lease_seconds|2592000 |Die Anzahl an Sekunden für welche der Abonnenten will dass ein neues Abo gültig bleibt (z.B. ein TTL). Hubs können Ihre eigene maximale Abodauer erzwingen. Alle Abos sollten erneuert werden indem einfach erneut abonniert wird bevor die Abodauer endet um die Kontinuierlichkeit der Aktualisierungen zu gewährleisten. Hubs sollten zusätzlich versuchen Abos automatisch zu aktualisieren bevor diese auslaufen indem die Abonnenten kontaktiert werden (dies wird automatisch von der Callback Klasse behandelt). | - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hub.mode |subscribe |Ein einfacher Wert welche anzeigt das dies eine Aboanfrage ist. Anfragen für das Löschen von Abos würden den Wert "unsubscribe" verwenden. | - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hub.topic |http://www.example.net/rss.xml |Die URI des Themas (z.B. Atom oder RSS Feed) welche der Abonnent zu abonnieren wünscht damit er Aktualisierungen bekommt. | - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hub.verify |sync |Zeigt dem Hub die bevorzugte Methode der Prüfung von Abos und dem Löschen von Abos. Sie wird im Normalfall zwei mal wiederholt. Technisch gesehen unterscheidet diese Komponente nicht zwischen den zwei Modi und behandelt beide gleich. | - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hub.verify |async |Zeigt dem Hub die bevorzugte Methode der Prüfung von Abos und dem Löschen von Abos. Sie wird im Normalfall zwei mal wiederholt. Technisch gesehen unterscheidet diese Komponente nicht zwischen den zwei Modi und behandelt beide gleich. | - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |hub.verify_token |3065919804abcaa7212ae89.879827871253878386 |Ein Prüftoken welcher dem Abonnenten vom Hub zurückgegeben wird wenn er ein Abos oder das Löschen eines Abos bestätigt. Bietet ein Maß an Vertrauen dass die Bestätigung der Anfrage vom aktuellen Hub kommt um Missbrauch zu vermeiden. | - +-----------------+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Man kann verschiedene dieser Parameter verändern um eine andere Vorliebe anzuzeigen. Zum Beispiel kann man eine -anderen Wert der Gültigkeit in Sekunden setzen indem man ``Zend\Pubsubhubbub\Subscriber::setLeaseSeconds()`` -verwendet, oder eine Vorliebe für eine asynchrone Prüfung zeigen indem -``setPreferredVerificationMode(Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_ASYNC)`` verwendet wird. Trotzdem bleiben -die Hubs in der Lage Ihre eigenen Vorlieben zu erzwingen, und aus diesem Grund wurde die Komponente so designt dass -Sie mit fast jedem Set an Optionen arbeitet und eine minimale Konfiguration des End-Benutzers erfordert. -Konventionen sind toll wenn Sie funktionieren! - -.. note:: - - Wärend Hubs die Verwendung eines spezifischen Prüfmodus benötigen können (beide werden von - ``Zend_Pubsubhubbub`` unterstützt), kann eine spezifische die zu bevorzugen ist durch Verwendung der Method - ``Zend_Pubsubhubbub`` angezeigt werden. Im Modus "sync" (synchron) versucht der Hub eine Aboanfrage sofort zu - bestätigen sobald diese empfangen, und noch bevor auf die Aboanfrage geantwortet wird. Im Modus "async" - (asynchron) gibt der Hub sofort eine Antwort auf die Aboanfrage zurück, und die Prüfanfrage kann später - stattfinden. Da ``Zend_Pubsubhubbub`` die Rolle der Aboprüfung als eigene Callback Klasse implementiert, und - die Verwendung eines Backend Speichermediums, unterstützt Sie beide transparent im Sinne der Geschwindigkeit - des Endbenutzers. Die acynchrone Prüfung ist stark zu bevorzugen um die Nachteile eines schlecht performenden - Hubs zu eliminieren, und die Server Ressourcen des End-Benutzers und die Verbindungen nicht zu lange zu binden. - -Das Löschen eines Abos folgt exakt dem gleichen Pattern wie im vorherigen Beispiel, mit der Ausnahme das -stattdessen ``unsubscribeAll()`` aufgerufen wird. Die enthaltenen Parameter sind identisch mit einer Aboanfrage mit -der Ausnahme das "``hub.mode``" auf "unsubscribe" gesetzt wird. - -Standardmäßig versucht eine neue Instanz von ``Zend\Pubsubhubbub\Subscriber`` ein Datenbank Backend -Speichermedium zu verwenden mit Standardwerten um den standardmäßigen ``Zend_Db`` Adapter mit dem Tabellennamen -"subscription" zu verwenden. Es wird empfohlen eine eigene Speicherlösung zu setzen welche diese Standardwerte -nicht verwendet, entweder duch übergabe eines neuen Modells welches das benötigte Interface unterstützt, oder -durch Übergabe einer neuen Instanz von ``Zend\Db\Table\Abstract`` an dem Constructor des standardmäßigen Modells -um den verwendeten Tabellennamen zu verändern. - -.. _zend.feed.pubsubhubbub.zend.feed.pubsubhubbub.subscriber.handling.hub.callbacks: - -Callbacks von Abonnenten behandeln -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wann auch immer eine Aboanfrage oder eine Anfrage auf Löschen eines Abos gemacht wird muss der Hub die Anfrage -prüfen indem er eine neue Prüfanfrage an die Callback *URL* weiterleitet welche in den Abo or Abo löschen -Parametern gesetzt ist. Um diese Hub Anfragen zu behandeln, welche alle zukünftigen Kommunikationen enthalten -können wie z.B. Themenaktualisierungen (Feed), sollte die Callback *URL* die Ausführung einer Instanz von -``Zend\Pubsubhubbub\Subscriber\Callback`` auslösen um die Anfrage zu behandeln. - -Die Callback Klasse sollte konfiguriert werden dass Sie das selbe Speichermedium wie die Subscriber Klasse -verwendet. Ihre Verwendung ist sehr einfach da die meiste Arbeit intern erledigt wird. - -.. code-block:: php - :linenos: - - $storage = new Zend\Feed\Pubsubhubbub\Model\Subscription; - $callback = new Zend\Feed\Pubsubhubbub\Subscriber\Callback; - $callback->setStorage($storage); - $callback->handle(); - $callback->sendResponse(); - - /** - * Prüfe ob der resultierende Callback das Ergebnis eines Feed Updates ist. - * Andernfalls war es entweder eine (De-)Abo-Prüfanfrage oder ungültig. - * Typischerweise müssen wir nicht mehr tun als die Behandlung der - * Aktualisierungen vom Feed hinzuzufügen - der Rest wird intern von der - * Klasse behandelt. - */ - if ($callback->hasFeedUpdate()) { - $feedString = $callback->getFeedUpdate(); - /** - * Die Aktualisierung des Feeds asynchron bearbeiten um ein Timeout - * des Hubs zu vermeiden. - */ - } - -.. note:: - - Es sollte beachtet werden dass ``Zend\Feed\Pubsubhubbub\Subscriber\Callback`` jeden hereinkommenden - Anfragestring und andere Parameter unabhängig parsen kann. Dies ist notwendig da *PHP* die Struktur und - Schlüssel eines Abfragestrings ändert wenn diese in die Superglobals ``$_GET`` oder ``$_POST`` geparst wird. - Zum Beispiel werden alle doppelten Schlüssel ignoriert und Punkte werden in Unterstriche konvertiert. - Pubsubhubbub unterstützt beide in den Abfragestring die es erzeugt. - -.. important:: - - Es ist wichtig das Entwickler erkennen das Hubs nur mit dem Senden von Anfragen und dem Empfangen einer Antwort - beschäftigt sind welche den Empfang prüft. Wenn eine Feedaktualisierung empfangen wird sollte Sie niemals - nachfolgend bearbeitet werden da Sie den Hub auf eine Antwort warten lässt. Stattdessen sollte jede Bearbeitung - auf einen anderen Prozess ausgelagert werden oder verzögert bis eine Antwort zum Hub zurückgesendet wird. Ein - Symptom des Fehlers Hubanfragen sofort zu komplettieren besteht darin das ein Hub weitere Versuche durchführen - kann die Aktualisierungs- oder Prüfanfrage zuzustellen was zu doppelten Aktualisierungsversuchen führen kann - die vom Abonnenten bearbeitet werden. Das scheint problematisch zu sein -- aber in Wirklichkeit kann ein Hub ein - Timeout von ein paar Sekunden anwenden, und wenn keine Antwort in dieser Zeit empfangen wird kann er trennen (in - der annahme eines Zustellfehlers) und es später nochmal versuchen. Es ist zu beachten das von Hubs erwartet - wird das Wie große Mengen an Aktualisierungen verteilen und Ihre Ressources deswegen gestreckt sind - bitte - bearbeiten Sie Feeds asynchron (z.B. in einem separaten Prozess oder einer Job Queue oder sogar in einem - geplanten Cron Task) soweit das möglich ist. - -.. _zend.feed.pubsubhubbub.zend.feed.pubsubhubbub.subscriber.setting.up.and.using.a.callback.url.route: - -Eine Callback URL Route einstellen und verwenden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wie vorher erwähnt empfängt die Klasse ``Zend\Feed\Pubsubhubbub\Subscriber\Callback`` den kombinierten Schlüssel -welche mit jedem Abo assoziiert ist vom Hub über eine oder zwei Methoden. Die technisch bevorzugte Methode ist das -Hinzufügen dieses Schlüssels zur Callback *URL* welcher für den Hub in allen zukünftigen Anfragen tätig ist -indem ein Stringparameter in der Abfrage mit dem Schlüssel "xhub.subscription" verwendet wird. Trotzdem, aus -historischen Gründen, weil es in Pubsubhubbub 0.1 nicht unterstützt wurde (es wurde kürzlich nur in 0.2 -hinzugefügt) ist es stärkstens empfohlen das kompatibelste zu verwenden und den Schlüssel der Callback *URL* -hinzuzugefügen indem er den *URL* Pfaden angehängt wird. - -Deshalb würde die *URL* http://www.example.com/callback?xhub.subscription=key zu -http://www.example.com/callback/key werden. - -Da die Abfragestring Methode der Standard in der Vermeidung eines größeren Levels der zukünftigen Unterstützung -der kompletten 0.2 Spezifikation ist, benötigt es etwas zusätzliche Arbeit um Sie zu implementieren. - -Der erste Schritt besteht darin der Klasse ``Zend\Feed\Pubsubhubbub\Subscriber\Callback`` dem Pfad bewusst zu -machen welcher den Aboschlüssel enthält. Er wird hierfür manuell injiziert, da man für diesen Zweck auch eine -Route manuell definieren muss. Das wird erzielt indem einfach die Methode -``Zend\Feed\Pubsubhubbub\Subscriber\Callback::setSubscriptionKey()`` mit dem Parameter aufgerufen wird welcher der -Schlüsselwert ist der vom Router kommt. Das folgende Beispiel zeigt dies durch Verwendung eines Zend Framework -Controllers. - -.. code-block:: php - :linenos: - - class CallbackController extends Zend\Controller\Action - { - - public function indexAction() - { - $storage = new Zend\Feed\Pubsubhubbub\Model\Subscription; - $callback = new Zend\Feed\Pubsubhubbub\Subscriber\Callback; - $callback->setStorage($storage); - /** - * Injiziert den Aboschlüssel welcher er vom URL Pfad geparst wird - * indem ein Parameter vom Router verwendet wird - */ - $subscriptionKey = $this->_getParam('subkey'); - $callback->setSubscriptionKey($subscriptionKey); - $callback->handle(); - $callback->sendResponse(); - - /** - * Prüfen ob der Callback als Ergebnis den Empfang eines Feed Updates - * enthält. Anderfalls war es entweder eine De-Aboprüfungsanfrage oder - * eine ungültige Anfrage. Typischerweise muss nichts anderes getan - * werden als das Handling der Feedaktualisierungen hinzuzufügen - der - * Rest wird intern von der Klasse behandelt. - */ - if ($callback->hasFeedUpdate()) { - $feedString = $callback->getFeedUpdate(); - /** - * Die Aktualisierung des Feeds asynchron behandeln um Hub - * Timeouts zu vermeiden. - */ - } - } - - } - -Aktuell kann das Hinzufügen der Route zu einem Parameter welcher den Schlüssel der an den Pfad angehängt wird -mappen würde durchgeführt werden indem eine Routenkonfiguration wie im kommenden *INI* formatierten Beispiel für -die Verwendung mit dem Bootstrapping von ``Zend_Application`` verwendet wird. - -.. code-block:: ini - :linenos: - - ; Callback Route fürs Hinzufügen einer PuSH Aboschlüssel Abfrage zu aktivieren - resources.router.routes.callback.route = "callback/:subkey" - resources.router.routes.callback.defaults.module = "default" - resources.router.routes.callback.defaults.controller = "callback" - resources.router.routes.callback.defaults.action = "index" - - diff --git a/docs/languages/de/modules/zend.feed.reader.rst b/docs/languages/de/modules/zend.feed.reader.rst deleted file mode 100644 index 1af347aae..000000000 --- a/docs/languages/de/modules/zend.feed.reader.rst +++ /dev/null @@ -1,848 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.reader: - -Zend\Feed\Reader -================ - -.. _zend.feed.reader.introduction: - -Einführung ----------- - -``Zend\Feed\Reader`` ist eine Komponente die verwendet wird um *RSS* und Atom Feeds jeder Version zu konsumieren, -inklusive *RDF*/*RSS* 1.0, *RSS* 2.0, Atom 0.3 und Atom 1.0. Die *API* für das Empfangen von Feed Daten ist -relativ einfach da ``Zend\Feed\Reader`` in der Lage ist jeden Feed eines jeden Typs mit Hilfe der *API* nach den -angefragten Informationen zu durchsuchen. Wenn die typischen Elemente die diese Informationen enthalten nicht -vorhanden sind, werden diese adaptiert und statt dessen auf eine Vielzahl von alternativen Elementen zurück -gegriffen. Diese Fähigkeit, von Alternativen auszuwählen, verhindert das Benutzer Ihren eigenen astrakten Layer -über die Komponente legen müssen damit Sie nützlich ist, oder beliebig tiefes Wissen des zugrundeliegenden -Standard, aktueller alternativen und namespaces Erweiterungen haben müssen. - -Intern arbeitet ``Zend\Feed\Reader`` fast komplett auf Basis der Erstellung von XPath Abfragen gegen das Dokument -Objekt Modell des Feed *XML*'s. Das *DOM* wird nicht durch eine gekettete Eigenschaften *API* wie bei ``Zend_Feed`` -bekannt gegeben und durch die darunterliegenden DOMDocument, DOMElement und DOMXPath Objekte für eine externe -Manipulation bekannt gegeben. Dieser Singular Weg des Parsens ist konsistent und die Komponente bietet ein Plugin -System um dem Feed hinzuzufügen und eine Eintrags Level *API* durch das Schreiben von Erweiterungen auf einer -ähnlichen Basis. - -Geschwindigkeit wird auf drei Wegen bereitgestellt. Erstens unterstützt ``Zend\Feed\Reader`` das Cachen durch -Verwendung von ``Zend_Cache`` um eine Kopie des Originalen Feed *XML* zu halten. Das erlaubt es Netzwerk Anfragen -für eine Feed *URI* zu überspringen wenn der Cache gültig ist. Zweitens wird die Feed und Eintrag- Level *API* -durch einen internen Cache gesichert (nicht persistent) damit wiederholte *API* Aufrufe für den gleichen Feed eine -zusätzliche Verwendung von *DOM* oder XPath verhindert. Drittens erlaubt das Importieren von Feeds von einer *URI* -den Vorteil von konditionellen *HTTP* ``GET`` Anfragen welche es Servern erlauben eine leere 304 Anfrage -auszulösen wenn der angefragte Feed seit der Zeit zu der er das letzte Mal angefragt wurde, nicht verändert -wurde. Im letzten Fall hält eine Instanz von ``Zend_Cache`` den zuletzt empfangenen Feed zusammen mit dem ETag und -dem Last-Modified Header Werten die in der *HTTP* Antwort gesendet wurde. - -Relativ zu ``Zend_Feed`` wurde ``Zend\Feed\Reader`` als frei stehender Ersatz für ``Zend_Feed`` formuliert der -aber nicht mit ``Zend_Feed`` rückwärts kompatibel ist. Aber es ist eine Alternative die einer anderen Ideologie -folgt die darin fokusiert ist einfach verwendbar zu sein, flexibel, konsistent und durch das Plugin System -erweiterbar. ``Zend\Feed\Reader`` ist auch nicht dazu fähig Feeds zu erstellen, delegiert diese Aufgabe aber an -``Zend\Feed\Writer``, seinen Bruder. - -.. _zend.feed.reader.import: - -Feeds importieren ------------------ - -Das importieren eines Feeds mit ``Zend\Feed\Reader`` ist zu ``Zend_Feed`` nicht sehr unterschiedlich. Feeds können -von einem String, einer Datei, *URI* oder einer Instanz des Typs ``Zend\Feed\Abstract`` importiert werden. Das -importieren von einer *URI* kann zusätzlich eine konditionelle *HTTP* ``GET`` Anfrage benützen. Wenn das -importieren fehlschlägt, wird eine Exception geworfen. Das Endergebnis wird ein Objekt des Typs -``Zend\Feed\Reader\FeedInterface`` sein, die Core Implementation von ``Zend\Feed\Reader\Feed\Rss`` und -``Zend\Feed\Reader\Feed\Atom`` (``Zend_Feed`` hat alle kurzen Namen genommen!). Beide Objekte unterstützen mehrere -(alle existierenden) Versionen dieser breiten Feed Typen. - -Im folgenden Beispiel importieren wir einen *RDF*/*RSS* 1.0 Feed und extrahieren einige grundsätzliche Information -die dann in einer Datenbank oder wo anders gespeichert werden können. - -.. code-block:: php - :linenos: - - $feed = Zend\Feed\Reader::import('http://www.planet-php.net/rdf/'); - $data = array( - 'title' => $feed->getTitle(), - 'link' => $feed->getLink(), - 'dateModified' => $feed->getDateModified(), - 'description' => $feed->getDescription(), - 'language' => $feed->getLanguage(), - 'entries' => array(), - ); - - foreach ($feed as $entry) { - $edata = array( - 'title' => $entry->getTitle(), - 'description' => $entry->getDescription(), - 'dateModified' => $entry->getDateModified(), - 'authors' => $entry->getAuthors(), - 'link' => $entry->getLink(), - 'content' => $entry->getContent() - ); - $data['entries'][] = $edata; - } - -Das obige Beispiel demonstriert die *API* von ``Zend\Feed\Reader`` und es demonstriert auch einige seiner internen -Operationen. In Wirklichkeit hat der ausgewählte *RDF* Feed keine nativen Daten oder Author Elemente, trotzdem -verwendet er das Dublin Core 1.1 Modul welches Namespaced Ersteller und Datums Elemente anbietet. -``Zend\Feed\Reader`` fällt auf diese und ähnliche Operationen zurück wenn keine relativ nativen Elemente -existieren. Wenn es absolut keine alternative finden kann wird es ``NULL`` zurückgeben, was anzeigt das die -Informationen nicht im Feed gefunden werden können. Man sollte beachten das Klassen die -``Zend\Feed\Reader\FeedInterface`` implementieren auch die *SPL* Interfaces ``Iterator`` und ``Countable`` -implementieren. - -Feeds können auch von Strings, Dateien und sogar Objekten des Typs ``Zend\Feed\Abstract`` importiert werden. - -.. code-block:: php - :linenos: - - // von einer URI - $feed = Zend\Feed\Reader::import('http://www.planet-php.net/rdf/'); - - // von einem String - $feed = Zend\Feed\Reader::importString($feedXmlString); - - // von einer Datei - $feed = Zend\Feed\Reader::importFile('./feed.xml'); - - // von einem abstrakten Zend\Feed\Abstract Objekt - $zfeed = Zend\Feed\Feed::import('http://www.planet-php.net/atom/'); - $feed = Zend\Feed\Reader::importFeed($zfeed); - -.. _zend.feed.reader.sources: - -Empfangen darunterliegender Quellen von Feeds und Einträgen ------------------------------------------------------------ - -``Zend\Feed\Reader`` macht sein bestes um Ihnen die Details abzunehmen. Wenn man an einem Feed ausserhalb von -``Zend\Feed\Reader`` arbeiten muß, kann man das grundsätzliche DOMDocument oder DOMElement von jeder Klasse -extrahieren, oder sogar einen *XML* String der sie enthält. Es werden auch Methoden angeboten um das aktuelle -DOMXPath Objekt (mit allen registrierten Kern und Erweiterungs Namespaces) zu extrahieren, und den richtigen -Präfix der in allen XPath Anfragen für den aktuellen Feed oder Eintrag verwendet wird. Die grundsätzlich zu -verwenden Methoden (für jedes Objekt) sind ``saveXml()``, ``getDomDocument()``, ``getElement()``, ``getXpath()`` -und ``getXpathPrefix()``. Diese erlauben es sich von ``Zend\Feed\Reader`` zu lösen und das zu tun was man selbst -machen will. - -- ``saveXml()`` gibt einen *XML* String zurück der nur das Element enthält welches das aktuelle Objekt - repräsentiert. - -- ``getDomDocument()`` gibt das DOMDocument Objekt zurück das den kompletten Feed repräsentiert (sogar wenn es - von einem Entry Objekt aus aufgerufen wird). - -- ``getElement()`` gibt das DOMElement des aktuellen Objekts zurück (z.B. den Feed oder aktuellen Eintrag). - -- ``getXpath()`` gibt das aktuelle DOMXPath Objekt für den aktuellen Feed zurück (sogar wenn es von einem Entry - Objekt aus aufgerufen wird) mit den Namespaces des aktuellen Feed Typs und allen vor-registrierten geladenen - Erweiterungen. - -- ``getXpathPrefix()`` gibt den Präfix der Abfrage für das aktuelle Objekt zurück (z.B. den Feed oder den - aktuellen Eintrag) welcher den richtigen XPath Query Pfad für den spezifizierten Feed oder Eintrag enthält. - -Hier ist ein Beispiel bei dem ein Feed eine *RSS* Erweiterung enthalten können die von ``Zend\Feed\Reader`` nicht -out of the Box unterstützt wird. Beachtenswert ist, das man eine Erweiterungen schreiben und registrieren könnte -(wird später behandelt) um das zu bewerkstelligen, aber das ist nicht immer eine Garantie für einen schnellen -Check. Man muß jeden neuen Namespace beim DOMXPath Objekt registrieren bevor es verwendet wird ausser Sie werden -vorab von ``Zend\Feed\Reader`` oder einer Erweiterung registriert. - -.. code-block:: php - :linenos: - - $feed = Zend\Feed\Reader::import('http://www.planet-php.net/rdf/'); - $xpathPrefix = $feed->getXpathPrefix(); - $xpath = $feed->getXpath(); - $xpath->registerNamespace('admin', 'http://webns.net/mvcb/'); - $reportErrorsTo = $xpath->evaluate('string(' - . $xpathPrefix - . '/admin:errorReportsTo)'); - -.. warning:: - - Wenn man einen bereits registrierten Namespace mit einem anderen Präfix Namen registriert als jenen der von - ``Zend\Feed\Reader`` intern verwendet wird, zerstört das die Interne Arbeitsweise dieser Komponente. - -.. _zend.feed.reader.cache-request: - -Unterstützung für Caches und intelligente Anfragen --------------------------------------------------- - -.. _zend.feed.reader.cache-request.cache: - -Unterstützung für Caches in Zend\Feed\Reader hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``Zend\Feed\Reader`` unterstützt die Verwendung einer Instanz von ``Zend_Cache`` um Feeds zu cachen (als *XML*) um -unnötige Anfragen im Netzwerk zu vermeiden. Das Hinzufügen eines Caches ist hier so einfach wie bei anderen Zend -Framework Komponenten. Den Cache erstellen und konfigurieren und dann ``Zend\Feed\Reader`` mitteilen das er -verwendet werden soll! Der verwendete Cache Schlüssel ist "``Zend\Feed\Reader\``" gefolgt von dem *MD5* Hash der -*URI* des Feeds. - -.. code-block:: php - :linenos: - - $frontendOptions = array( - 'lifetime' => 7200, - 'automatic_serialization' => true - ); - $backendOptions = array('cache_dir' => './tmp/'); - $cache = Zend\Cache\Cache::factory( - 'Core', 'File', $frontendOptions, $backendOptions - ); - - Zend\Feed\Reader::setCache($cache); - -.. note:: - - Auch wenn es etwas abseits ist, sollte man daran denken zu ``Zend\Loader\PluginLoader`` einen Cache - hinzuzufügen der von ``Zend\Feed\Reader`` verwendet wird um Erweiterungen zu laden. - -.. _zend.feed.reader.cache-request.http-conditional-get: - -Unterstützung für HTTP Conditional GET -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die große Frage wenn man ofters einen Feed importiert, ist ob er sich geändert hat. Wenn ein Cache aktiviert ist, -kann man die Unterstützung für *HTTP* Conditional ``GET`` hinzufügen um diese Frage zu beantworten. - -Durch Verwendung dieser Methode kann man Feeds von *URI* anfragen und deren letzte bekannte Werte der ETag und -Last-Modified Antwort Header mit der Anfrage inkludieren (wobei die If-None-Match und If-Modified-Since Header -verwendet werden). Wenn der Feed auf dem Server unverändert ist, sollte man eine 304 Antwort empfangen die -``Zend\Feed\Reader`` mitteilt das die gecachte Version zu verwenden ist. Wenn ein kompletter Feed in einer Antwort -mit einem Status Code von 200 geschickt wird, bedeutet dieses, das der Feed verändert wurde und -``Zend\Feed\Reader`` wird die neue Version parsen und Sie im Cache abspeichern. Es werden auch die neuen Werte der -ETag und Last-Modified Header für eine zukünftige Verwendung gespeichert. - -Bei diesen "konditionalen" Abfragen ist nicht garantiert das Sie, vom Server von dem man eine *URI* abfragt, -unterstützt werden, können aber trotzdem angefragt werden. Die meisten Feed Quellen wie Blogs sollten hierfür -eine Unterstützung haben. Um konditionale Anfragen zu erlauben, muss man einen Cache bei ``Zend\Feed\Reader`` -angeben. - -.. code-block:: php - :linenos: - - $frontendOptions = array( - 'lifetime' => 86400, - 'automatic_serialization' => true - ); - $backendOptions = array('cache_dir' => './tmp/'); - $cache = Zend\Cache\Cache::factory( - 'Core', 'File', $frontendOptions, $backendOptions - ); - - Zend\Feed\Reader::setCache($cache); - Zend\Feed\Reader::useHttpConditionalGet(); - - $feed = Zend\Feed\Reader::import('http://www.planet-php.net/rdf/'); - -Im obige Beispiel werden, bei aktivierten *HTTP* Conditional ``GET`` Anfragen, die Werte der Antwort Header für -ETag und Last-Modified mit dem Feed gecacht. Für die nächsten 24 Stunden (die Lebenszeit des Caches) werden Feed -am Cache nur dann aktualisiert wenn eine nicht-304 Antwort empfangen wird, die ein gültiges *RSS* oder Atom *XML* -Dokument enthält. - -Wenn man darauf anzielt die Antwort Header ausserhalb von ``Zend\Feed\Reader`` zu managen, kann man die relevanten -If-None-Matches und If-Modified-Since Antwort Header über die *URI* Import Methode setzen. - -.. code-block:: php - :linenos: - - $lastEtagReceived = '5e6cefe7df5a7e95c8b1ba1a2ccaff3d'; - $lastModifiedDateReceived = 'Wed, 08 Jul 2009 13:37:22 GMT'; - $feed = Zend\Feed\Reader::import( - $uri, $lastEtagReceived, $lastModifiedDateReceived - ); - -.. _zend.feed.reader.locate: - -Feed URIs von Webseiten erkennen --------------------------------- - -Dieser Tage ist vielen Webseiten bekannt das der Ort Ihrer *XML* Feeds nicht immer eindeutig ist. Eine kleine -*RDF*, *RSS* oder Atom Grafik hilft wenn der Benutzer die Seite liest, aber was wenn eine Maschine kommt und -versucht herauszufinden So die Feed sind? Um hierbei zu helfen, zeigen viele Webseiten zu Ihren Feeds indem -Tags in der Sektion Ihres *HTML*\ s verwendet werden. Um diesen Vorteil zu nutzen, kann man -``Zend\Feed\Reader`` verwenden diese Feeds zu erkennen, indem die statische ``findFeedLinks()`` Methode verwendet -wird. - -Diese Methode ruft irgendeine *URI* auf und sucht nach dem Ort der *RSS*, *RDF* und Atom Feeds mit der Annahme dass -das *HTML* der Webseite nur die relevanten Links enthält. Sie gibt dann ein Wert Objekt zurück indem man die -Existenz einer *RSS*, *RDF* oder Atom Feed *URI* prüfen kann. - -Das zurückgegebene Objekt ist eine Unterklasse von ``ArrayObject`` welche ``Zend\Feed\Reader\Collection\FeedLink`` -heisst, damit es in ein Array gecastet werden kann, oder damit man es iterieren kann um auf alle erkannten Links -zuzugreifen. Trotzdem kann man, als einfache Abkürzung, den ersten *RSS*, *RDF* oder Atom Link holen indem dessen -öffentliche Eigenschaft wie im beiliegenden Beispiel verwendet wird. Andernfalls ist jedes Element von -``ArrayObject`` ein einfaches Array mit den Schlüsseln "type" und "uri" wobei der Typ "rdf", "rss" oder "atom" -sein kann. - -.. code-block:: php - :linenos: - - $links = Zend\Feed\Reader::findFeedLinks('http://www.planet-php.net'); - - if (isset($links->rdf)) { - echo $links->rdf, "\n"; // http://www.planet-php.org/rdf/ - } - if (isset($links->rss)) { - echo $links->rss, "\n"; // http://www.planet-php.org/rss/ - } - if (isset($links->atom)) { - echo $links->atom, "\n"; // http://www.planet-php.org/atom/ - } - -Basierend auf diesen Links kann man dann, von welchen Quellen man auch immer will, importieren indem die übliche -Vorgehensweise verwendet wird. - -Diese schnelle Methode gibt nur einen Link für jeden Feed Typ zurück, aber Webseiten können viele Links von -jedem Typ enthalten. Möglicherweise ist es eine News Site mit einem *RSS* Feed für jede News Kategorie. Man kann -durch alle Links iterieren indem der ArrayObject Iterator verwendet wird. - -.. code-block:: php - :linenos: - - $links = Zend\Feed\Reader::findFeedLinks('http://www.planet-php.net'); - - foreach ($links as $link) { - echo $link['uri'], "\n"; - } - -.. _zend.feed.reader.attribute-collections: - -Attribut Sammlungen -------------------- - -In einem Versuch die Rückgabetypen zu vereinfachen, können Rückgabetypen für die verschiedenen Feed und Entry -Level Methoden ab Zend Framework 1.10 ein Objekt vom Typ ``Zend\Feed\Reader\Collection\CollectionAbstract`` -enthalten. Abgesehen vom speziellen Klassennamen der anbei erklärt wird, ist es nur eine einfache Subklasse von -*SPL*'s ``ArrayObject``. - -Der Hauptzweck hierbei besteht darin, die Präsentation von so vielen Daten wie möglich von den angefragten -Elementen zu erlauben, wärend trotzdem der Zugriff auf die meisten relevanten Daten über ein einfaches Array -erlaubt wird. Das erzwingt auch einen Standardweg um solche Daten zurückzugeben, was vorher zwischen Arrays und -Objekten gewandert ist. - -Der neue Klassentyp arbeitet identisch zu ``ArrayObject``, mit der gleichen kleinen Änderung dass eine neue -Methode ``getValues()`` existiert welche ein einfaches flaches Array zurückgibt dass die meisten relevanten -Informationen enthält. - -Ein einfaches Beispiel hiervon ist ``Zend\Feed\Reader\FeedInterface::getCategories()``. Wenn es in irgendeinem -*RSS* oder Atom Feed verwendet wird, gibt diese Methode Daten der Kategorie als Container Objekt zurück welches -``Zend\Feed\Reader\Collection\Category`` genannt wird. Das Container Objekt wird, für jede Kategorie, drei Felder -an Daten enthalten: term, schema und label. "term" ist der grundsätzliche Name der Kategorie, oft Maschinen lesbar -(normalerweise ein *URI* Identifikator) und in *RSS* 2.0 auch bekannt als "domain". "label" ist ein menschlich -lesbarer Kategorie Name welcher *HTML* Entities unterstützt. In *RSS* 2.0 gibt es kein Label Attribut deshalb wird -es der Bequemlichkeit halber immer auf den selben Wert gesetzt wie der Ausdruck. - -Um auf die Label der Kategorie selbst als einfache Array Werte zuzugreifen könnte man das folgende verwenden: - -.. code-block:: php - :linenos: - - $feed = Zend\Feed\Reader::import('http://www.example.com/atom.xml'); - $categories = $feed->getCategories(); - $labels = array(); - foreach ($categories as $cat) { - $labels[] = $cat['label'] - } - -Es ist ein erfundenes Beispiel, aber der Punkt ist, dass Label zusammen mit anderen Informationen gebunden sind. - -Trotzdem erlaubt die Container Klasse den Zugriff auf die "relevantesten" Daten als einfaches Array indem die -Methode ``getValues()`` verwendet wird. Das Konzept der "relevantesten" Daten ist offensichtlich ein beurteilter -Aufruf. Für Kategorien bedeutet es die Label der Kategorien (nicht die Typen oder Schemata) wärend es für -Autoren der Name des Autors wäre (nicht deren Email Adressen oder die *URI*\ s). Das einfache Array ist flach (nur -Werte) und durchläuft ``array_unique`` um doppelte Werte zu entfernen. - -.. code-block:: php - :linenos: - - $feed = Zend\Feed\Reader::import('http://www.example.com/atom.xml'); - $categories = $feed->getCategories(); - $labels = $categories->getValues(); - -Das obige Beispiel zeigt wie nur die Label und sonst nichts extrahiert wird. Das gibt einen einfachen Zugriff auf -die Label der Kategorie ohne zusätzliche Arbeit die Daten selbst zu extrahieren. - -.. _zend.feed.reader.retrieve-info: - -Empfangen von Feed Informationen --------------------------------- - -Das Empfangen von Informationen von einem Feed (wir reden über Einträge und Elemente in der nächsten Sektion da -Sie identischen Prinzipien folgen) verwendet eine klar definierte *API* welche exakt die gleiche ist, unabhängig -davon ob der angefragte Feed *RSS*, *RDF* oder Atom ist. Das selbe gilt für Sub-Versionen dieser Standards da wir -jede einzelne *RSS* und Atom Version getestet haben. Wärend sich der darunterliegende *XML* Feed substantiell -unterscheiden kann, im Sinne von Tags und Elementen die vorhanden sind, versuchen trotzdem alle ähnliche -Informationen zu geben und um das alles zu reflektieren werden unterschiede und das Hanteln durch alternative Tags -intern von ``Zend\Feed\Reader`` behandelt welche einem ein identisches Interface für jeden anzeigt. Idealerweise -sollte man sich nicht darum kümmern ob ein Feed *RSS* oder Atom ist, solange man die Informationen extrahieren -kann die man benötigt. - -.. note:: - - Wärend die Erkennung von Gemeinsamkeiten zwischen den Feed Typen selbst sehr komplex ist, sollte erwähnt - werden das *RSS* selbst eine konstant strittige "Spezifikation". Das hat seine Wurzeln im originalen *RSS* 2.0 - Dokument welches Doppeldeutigkeiten enthält und die richtige Behandlung alle Elemente nicht im Detail erklärt. - Als Ergebnis verwendet diese Komponente riguros die *RSS* 2.0.11 Spezifikation welche vom *RSS* Advisory Board - veröffentlicht wurde und dessen beigefügtes *RSS* Best Practices Profil. Keine andere Interpretation von *RSS* - 2.0 wird unterstützt wobei Ausnahmen erlaubt sein können wo es die anwendung der zwei vorher erwähnten - Dokumente nicht direkt verhindert. - -Natürlich leben wir nicht in einer idealen Welt sodas es Zeiten gibt in denen die *API* einfach nicht das bietet -wonach man sucht. Um hierbei zu helfen bietet ``Zend\Feed\Reader`` ein Plugin System an das es erlaubt -Erweiterungen zu schreiben und die Kern *API* zu erweitern sowie alle zusätzliche Daten abzudecken die man von -Feeds extrahieren will. Wenn das schreiben einer weiteren Erweiterung zu problematisch ist, kann man einfach das -darunterliegende *DOM* oder die XPath Objekte holen und das von Hand in der Anwendung machen. Natürlich sollte -wirklich eine Erweiterung geschrieben werden, einfach um es portabler und wiederverwendbarer zu machen. Und -nützliche Erweiterungen können für den Framework vorgeschlagen werden um Sie formal hinzuzufügen. - -Hier ist eine Zusammenfassung der Kern *API* für Feeds. Man sollte beachten das es nicht nur die grundsätzlichen -*RSS* und Atom Standard abdeckt, sondern das es auch eine Anzahl von mitgelieferten Erweiterungen gibt die mit -``Zend\Feed\Reader`` gebündelt sind. Die Benennung dieser Methoden von Erweiterungen ist recht generisch - alle -erweiterten Methoden arbeiten auf dem gleichen Level wie die Kern *API* da wir es erlauben alle spefizischen -Erweiterungs Objekte separat zu empfangen wenn das notwendig ist. - -.. table:: API Methoden auf dem Level des Feeds - - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getId() |Gibt eine eindeutige ID zurück die mit dem Feed assoziiert ist | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getTitle() |Gibt den Titel des Feeds zurück | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDescription() |Gibt die textuelle Beschreibung des Feeds zurück | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getLink() |Gibt eine URI zu der HTML Webseite zurück welche die gleiche oder ähnliche Informationen wie dieser Feed enthält (z.B. wenn der Feed von einem Blog ist, sollte die URI des Blogs enthalten sein indem die HTML Version des Eintrags gelesen werden kann) | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getFeedLink() |Gibt die URI dieses Feeds zurück, welche die gleiche sein kann wie die URI welche verwendet wurde um den Feed zu importieren. Es gibt wichtige Fälle in denen sich der Feed Link unterscheiden kann weil die Quell URI aktualisiert wird und geplant ist Sie in Zukunft zu entfernen. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getAuthors() |Gibt ein Objekt vom Typ Zend\Feed\Reader\Collection\Author zurück welches ein ArrayObject ist dessen Elemente einfach Arrays sind die eine Kombination der Schlüssel "name", "email" und uri" enthalten. Wo es wegen der Quelldaten irrelevant ist können einige dieser Schlüssel unterdrückt werden. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getAuthor(integer $index = 0)|Gibt entweder den ersten bekannten Author zurück, oder mit dem optionalen Parameter $index jeden spezifischen Index des Arrays von Authoren wie vorher beschrieben (gibt NULL bei einem ungültigen Index zurück). | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDateCreated() |Gibt das Datum zurück zu dem dieser Feed erstellt wurde. Generell nur anwendbar bei Atom da es das Datum repräsentiert zu der das Atom 1.0 Dokument erstellt wurde das die Ressource beschreibt. Das zurückgegebene Datum ist ein Zend_Date Objekt. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDateModified() |Gibt das Datum zurück zu dem der Feed das letzte mal geändert wurde. Das zurückgegebene Datum ist ein Zend_Date Objekt. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getLastBuildDate() |Gibt das Datum zurück an dem der Feed das letzte Mal erstellt wurde. Das zurückgegebene Datum ist ein Zend_Date Objekt. Das wird nur von RSS unterstützt - Atom Feeds geben immer NULL zurück. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getLanguage() |Gibt die Sprache des Feeds zurüc (wenn definiert) oder einfach die Sprache die im XML Dokument notiert wurde | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getGenerator() |Gibt den Erzeuger des Feeds zurück, z.B. die Software die Ihn erzeugt hat. Das kann sich zwischen RSS und Atom unterscheiden, da Atom eine andere Schreibweise definiert. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getCopyright() |Gibt alle Copyright Notizen zurück die mit dem Feed assoziiert sind | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getHubs() |Gibt ein Array der URI Endpunkte aller Hub Server zurück welche vom Feed für die Berwendung mit dem Pubsubhubbub Protokoll bekanntgegeben werden, und erlaubt damit das Einschreiben für Feeds für Real-Time Updates. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getCategories() |Gibt ein Zend\Feed\Reader\Collection\Category Objekt zurück welches die Details aller Kategorien enthält die im kompletten Feed enthalten sind. Die unterstützten Felder enthalten "term" (den Maschinen lesbaren Namen der Kategorie), "scheme" (dem Schema der Kategorisierung für diese Kategorie), und "label" (ein HTML dekodierter menschlich lesbarer Kategoriename). Wenn irgendeines der drei Felder abwesend ist, werden Sie entweder auf die näheste vorhandene Alternative gesetzt, oder im Fall von "scheme", auf NULL gesetzt.| - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getImage() |Gibt ein Array zurück welches Daten enthält die jedem Feed Bild oder Logo angehören oder NULL wenn kein Bild gefunden wurde. Das resultierende Array kann die folgenden Schlüssel enthalten: uri, link, title, description, height, und width. Nur Atom Logos enthalten eine URI so dass die anderen Metadaten nur von RSS Feeds angehören. | - +-----------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Angehend von der Vielzahl von Feeds in der Wildnis, werden einige dieser Methoden erwartungsgemäßg ``NULL`` -zurückgeben, was anzeigt das die relevanten Informationen nicht gefunden wurden. Wo es möglich ist wird -``Zend\Feed\Reader`` wärend der Suche auf alternative Elemente zurück greifen. Zum Beispiel ist das Durchsuchen -eines *RSS* Feeds nach einem Modifikations Datum komplizierter als es aussieht. *RSS* Feeds sollten ein -```` Tag und (oder) ein ```` Element enthalten. Aber was wenn Sie es nicht tun, weil es -z.B. ein *RSS* 1.0 Feed ist? Vielleicht ist stattdessen ein ```` Element mit identischen -Informationen vorhanden (Atom kann verwendet werden um die *RSS* Syntax anzubieten)? Bei einem Fehlschlag können -wir einfach auf die Einträge sehen, den aktuellsten herausholen, und sein ```` Element verwenden. In der -Annahme das es existiert... viele Feeds verwenden auch Dublin Core 1.0 oder 1.1 ```` Elemente für Feeds -und Einträge. Oder wir können wieder ein Atom finden das herumliegt. - -Der Punkt ist, das ``Zend\Feed\Reader`` entwickelt wurde um das zu wissen. Wenn man nach dem Änderungsdatum fragt -(oder irgendwas anderes), wird er starten und alle diese Alternativen suchen bis er entweder aufgibt und ``NULL`` -zurückgibt, oder eine Alternative findet welche die richtige Antwort hat. - -Zusätzlich zu den obigen Methoden, implementieren alle Feed Objekte Methoden für das empfangen der *DOM* und -XPath Objekte für die aktuellen Feeds wie vorher beschrieben. Feed Objekte implementieren auch die Interfaces für -*SPL* Iterator und Countable. Die erweiterte *API* wird anbei zusammengefasst. - -.. table:: Erweiterte API Methoden auf Level des Feeds - - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDomDocument() |Gibt das elterliche DOMDocument Objekt für das komplette XML Quelldokument zurück | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getElement() |Gibt das aktuelle DOMElement Objekt des Feed Levels zurück | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |saveXml() |Gibt einen String zurück der ein XML Dokument zurück welches das komplette Feed Element enthält (das ist nicht das originale Dokument sondern eine nachgebaute Version) | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getXpath() |Gibt das intern verwendete DOMXPath Objekt zurück mit dem Abfragen auf das DOMDocument Objekt durchgeführt werden (das enthält die Kern und Erweiterungs Namespaces die vor-registriert sind) | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getXpathPrefix() |Gibt den gültigen DOM Pfad Präfix zurück der bei allen XPath Abfragen passt die dem Feed entsprechen der abgefragt wird. | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getEncoding() |Gibt die Kodierung des XML Quelldokuments zurück (Beachte: Das kann nicht verwendet werden für Fehler wie einen Server der Dokumente in einer anderen Kodierung verschickt). Wo diese nicht definiert ist, wird die Standardkodierung UTF-8 von Unicode angewendet. | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |count() |Gibt eine Zahl von Einträgen oder Elementen zurück welche dieser Feed enthält (implementiert das SPL Interface Countable) | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |current() |Gibt nur den aktuellen Eintrag zurück (verwendet den aktuellen Index von key()) | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |key() |Gibt den aktuellen Index für Einträge zurück | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |next() |Addiert den Wert des Index für Einträge um Eins | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |rewind() |Setzt den Index für Einträge auf 0 zurück | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |valid() |Prüft ob der aktuelle Index für Einträge gültig ist, z.B. ob er nicht unter 0 fällt und die Anzahl der existierenden Einträge nicht übersteigt. | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getExtensions() |Gibt ein Array aller Erweiterungs Objekte zurück die für den aktuellen Feed geladen sind (Beachte: sowohl Feel-Level als auch Element-Level Erweiterungen exstieren, aber nur Feed-Level Erweiterungen werden hier zurückgegeben). Die Array Schlüssel sind in der Form (ErweiterungsName)_Feed.| - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getExtension(string $name)|Gibt ein Erweiterungs Objekt für den Feed zurück der unter dem angegebenen Namen registriert ist. Das erlaubt einen feiner gestaffelten Zugriff auf Erweiterungen welche andernfalls in der Implementation der standardmäßigen API Methoden versteckt wären. | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getType() |Gibt eine statische Klassenkonstante zurück (z.B. Zend\Feed\Reader::TYPE_ATOM_03, z.B. Atom 0.3) welche exakt anzeigt welche Art von Feed gerade konsumiert wird. | - +--------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.feed.reader.entry: - -Empfangen von Informationen aus Einträgen/Elementen ---------------------------------------------------- - -Das Empfangen von Informationen für spezifische Einträge oder Elemente (abhängig davon ob man Atom oder *RSS* -spricht) ist identisch wie bei den Daten auf Feed Level. Der Zugriff auf Einträge ist einfach ein Fall von -Iteration über ein Feed Objekt oder durch Verwendung des *SPL* Interfaces ``Iterator`` welches Feed Objekte -implementieren und durch Aufruf der betreffenden Methoden auf Ihnen. - -.. table:: API Methoden auf Level des Eintrags - - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getId() |Gibt eine eindeutige ID für den aktuellen Eintrag zurück. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getTitle() |Gibt den Titel des aktuellen Eintrags zurück. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDescription() |Gibt eine Beschreibung des aktuellen Eintrags zurück. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getLink() |Gibt eine URI zur HTML Version des aktuellen Eintrags zurück. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getPermaLink() |Gibt einen permanenten Link zum aktuellen Eintrag zurück. In den meisten Fällen ist dies das selbe wie die Verwendung von getLink(). | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getAuthors() |Gibt ein Objekt vom Typ Zend\Feed\Reader\Collection\Author zurück welches ein ArrayObject ist, dessen Elemente alle einfache Array sind welche beliebige Kombinationen der Schlüssel "name", "email" und "uri" enthalten können. Wo es für die Quelldaten irrelevant ist können einige dieser Schlüssel unterdrückt sein. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getAuthor(integer $index = 0) |Gibt entweder den ersten bekannten Autor zurück, oder mit dem optionalen Parameter $index jeden spezifischen Index aus dem Array der Authoren wie vorher beschrieben (gibt NULL zurück wenn der Index ungültig ist). | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDateCreated() |Gibt das Datum zurück an dem der aktuelle Eintrag erstellt wurde. Generell kann das nur auf Atom angewendet werden wo es das Datum der Ressource beschreibt zu welche das Atom 1.0 Dokument erstellt wurde. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDateModified() |Gibt das Datum zurück an welchem der aktuelle Eintrag zuletzt geändert wurde. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getContent() |Gibt den Inhalt des aktuellen Eintrags zurück (das retourniert alle Entities wenn das möglich ist, mit der Annahme das der Content Type HTML ist). Die Beschreibung wird zurückgegeben wenn ein kein seperates Content Element existiert. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getEnclosure() |Gibt ein Array zurück welches die Werte aller Attribute eines Multimedia Elements enthält, inklusive der Array Schlüssel: url, length, type. Basierend auf dem RSS Best Practices Profile des RSS Advisory Boards, wird keine Unterstützung für mehrere Enclosures angeboten da so eine Unterstützung kein Teil der RSS Spezifikation ist. | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getCommentCount() |Gibt die Anzahl der Kommentare zurück die auf diesen Eintrag gemacht wurden seit der Zeit an welcher der Feed erstellt wurde | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getCommentLink() |Gibt eine URI zurück welche auf die HTML Seite zeigt, auf der Kommentare zu diesem Eintrag gemacht werden können | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getCommentFeedLink([string $type = 'atom'\|'rss'])|Gibt eine URI zurück die auf einen Feed zeigt welcher vom angegebenen Typ ist, und alle Kommentare für diesen Eintrag enthält (Der Typ ist standardmäßig Atom/RSS abhängig vom aktuellen Feed Typ). | - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getCategories() |Gibt ein Zend\Feed\Reader\Collection\Category Objekt zurück welches die Details jeder Kategorie enthält welche mit dem Eintrag assoziiert ist. Die unterstützten Felder sind "term" (der Maschinen lesbare Name der Kategorie), "scheme" (der Name des Schemas der Kategorisierung für diese Kategorie), und "label" (ein HTML dekodierter menschlich lesbarer Name der Kategorie). Wenn eines der drei Felder nicht vorhanden ist, werden Sie entweder auf den näheste vorhandene Alternative, oder im Fall von "scheme", auf NULL gesetzt.| - +--------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Die erweiterte *API* für Einträge ist identisch zu der für die Feed mit der Aufnahme der Iterator Methoden die -hier nicht benötigt werden. - -.. caution:: - - Es gibt oft Missverständnisse über die Konzepte vom Zeitpunkt der Änderung und des Erstellungsdatums. In - Atom, sind diese zwei klar definierte Konzepte aber in *RSS* sind Sie vage. *RSS* 2.0 definiert ein einzelnes - **** Element das typischerweise auf das Datum referiert an dem dieser Eintrag veröffentlicht wurde, - z.B. etwas in der Art eines Erstellungsdatums. Das ist nicht immer das gleiche, und kann sich durch Updates - ändern oder auch nicht. Als Resultat sollte man sich, wenn man wirklich prüfen will ob der Eintrag geändert - wurde oder nicht, nicht auf das Ergebnis von ``getDateModified()`` verlassen. Stattdessen sollte man Erwägen - den *MD5* Hash von drei anderen verknpüften Elementen zu beobachten, z.B. durch Verwendung von ``getTitle()``, - ``getDescription()`` und ``getContent()``. Wenn der Eintrag wirklich geändert wurde, gibt diese Hash Berechnung - ein anderes Ergebnis als die vorher gespeicherten Hashs für den gleichen Eintrag. Das ist natürlich - Inhalts-Orientiert und hilft nicht bei der Erkennung von anderen relevanten Elementen. Atom Feeds sollten solche - Schritte nicht benötigen. - - Weitere Schritte in diesen Wassern zeigen das die Daten von Feeds unterschiedlichen Standards folgen. Atom und - Dublin Core Daten sollten *ISO* 86001 folgen und *RSS* Daten sollten *RFC* 822 oder *RFC* 2822 folgen welche - auch üblicherweise verwendet werden. Datumsmethoden werfen eine Exception wenn ``Zend_Date``, oder die *PHP* - basierenden Möglichkeiten für *RSS* Daten, das Datum durch Verwendung der obigen Standards nicht laden kann. - -.. warning:: - - Die Werte die von diesen Methoden zurückgegeben werden, sind nicht geprüft. Das bedeutet das der Benutzer - Prüfungen auf allen empfangenen Daten durchführen muss inklusive filtern von jeglichem *HTML* wie von - ``getContent()`` bevor es von der eigenen Anwendung ausgegeben wird. Es ist zu beachten das die meisten Feeds - von externen Quellen kommen, und deshalb die normale Annahme sein sollte das man Ihnen nicht trauen kann. - -.. table:: Erweiterte API Methoden auf Level des Eintrags - - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getDomDocument() |Gibt das elterliche DOMDocument Objekt für den kompletten Feed zurück (nicht nur den aktuellen Eintrag) | - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getElement() |Gibt das DOMDocument Objekt für den aktuellen Level des Eintrags zurück | - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getXpath() |Gibt das DOMXPath Objekt zurück welches intern verwendet wird um Abfragen auf dem DOMDocument Objekt durchzuführen (es enthält auch die vorregistrierten Kern und Erweiterungs Namespaces) | - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getXpathPrefix() |Gibt einen gültigen DOM Pfad Präfix zurück der allen XPath Abfrage vorangestellt wird, welche dem Eintrag entsprechen der abgefragt wird. | - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getEncoding() |Gibt die Kodierung des XML Quelldokuments zurück (Achtung: Das kann nicht für Fehler genommen werden bei denen der Server eine andere Kodierung sendet als die Dokumente). Die Standard Kodierung welche bei Abwesenheit jeglicher anderen Kodierung angewendet wird, ist die UTF-8 Kodierung von Unicode. | - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getExtensions() |Gibt ein Array aller Erweiterungsobjekte zurück die für den aktuellen Eintrag geladen wurden (Achtung: Sowohl Erweiterung auf Level von Feeds als auch auf Level von Einträgen existieren, und nur Erweiterungen auf Level von Einträgen werden hier zurückgegeben). Die Arrayschlüssel sind im Format {ErweiterungsName}_Entry.| - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getExtension(string $name)|Gibt das Erweiterungsobjekt zurück für das der Eintrag mit dem angegebenen Namen registriert wurde. Das erlaubt einen feineren Zugriff auf Erweiterungen welche andernfalls innerhalb der Implementierung der standardmäßigen API Methoden versteckt wären. | - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |getType() |Gibt eine statische Klassenkonstante zurück (z.B. Zend\Feed\Reader::TYPE_ATOM_03, z.B. Atom 0.3) die exakt anzeigt von welcher Art der Feed ist der gerade konsumiert wird. | - +--------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.feed.reader.extending: - -Erweitern der APIs für Feeds und Einträge ------------------------------------------ - -Die Erweiterung von ``Zend\Feed\Reader`` erlaubt es Methoden sowohl auf Level von Feeds als auch auf Level von -Einträgen hinzuzufügen, welche das Empfangen von Informationen abdecken die nicht bereits von -``Zend\Feed\Reader`` unterstützt werden. Bei der Anzahl an *RSS* und Atom Erweiterungen die existieren, ist das -ein guter Weg da ``Zend\Feed\Reader`` einfach nicht alles hinzufügen kann. - -Es gibt zwei Typen von Erweiterungen, jene welche Informationen von Elementen empfangen die unmittelbare Kunder des -Root Elements sind (z.B. ```` für *RSS* oder ```` für Atom), und jene die Informationen von -Kind-Elementen eines Eintrags empfangen (z.B. ```` für *RSS* oder ```` für Atom). Auf dem Filesystem -sind Sie als Klassen in einem Namespace gruppiert, basierend auf dem Standardnamen der Erweiterung. Zum Beispiel -haben wir intern ``Zend\Feed\Reader\Extension\DublinCore\Feed`` und ``Zend\Feed\Reader\Extension\DublinCore\Entry`` -Klassen welche zwei Klassen sind welche die Unterstützung für Dublin Core 1.0/1.1 implementieren. - -Erweiterungen werden in ``Zend\Feed\Reader`` durch Verwendung von ``Zend\Loader\PluginLoader`` geladen, sodas -dessen Operationen ähnlich denen anderer Zend Framework Komponenten ist. ``Zend\Feed\Reader`` kommt bereits mit -einer Anzahl dieser Erweiterungen. Trotzdem müssen jene, die nicht intern verwendet und standardmäßig -registriert werden (sogenannte Core Erweiterungen), bei ``Zend\Feed\Reader`` registriert werden bevor Sie verwendet -werden. Die gebündelten Erweiterungen sind: - -.. table:: Core Extensions (pre-registered) - - +-----------------------------+----------------------------------------------------------------------------------------+ - |DublinCore (Feed und Eintrag)|Implementiert die Unterstützung für das Dublin Core Metadata Element Set 1.0 und 1.1 | - +-----------------------------+----------------------------------------------------------------------------------------+ - |Content (nur Eintrag) |Implementiert Unterstützung für Content 1.0 | - +-----------------------------+----------------------------------------------------------------------------------------+ - |Atom (Feed und Eintrag) |Implementiert Unterstützung für Atom 0.3 und Atom 1.0 | - +-----------------------------+----------------------------------------------------------------------------------------+ - |Slash |Implementiert Unterstützung für das Slash RSS 1.0 Modul | - +-----------------------------+----------------------------------------------------------------------------------------+ - |WellFormedWeb |Implementiert Unterstützung für das Well Formed Web CommentAPI 1.0 | - +-----------------------------+----------------------------------------------------------------------------------------+ - |Thread |Implementiert Unterstützung für Atom Threading Erweiterungen wie in RFC 4685 beschrieben| - +-----------------------------+----------------------------------------------------------------------------------------+ - |Podcast |Implementiert Unterstützung für das Podcast 1.0 DTD von Apple | - +-----------------------------+----------------------------------------------------------------------------------------+ - -Die Core Erweiterungen sind irgendwie speziell da Sie extrem allgemein sind und viele Facetten haben. Zum Beispiel -haben wir eine Core Erweiterung für Atom. Atom ist als Erweiterung (und nicht nur als Basis Klasse) implementiert -weil es ein gültiges *RSS* Modul dupliziert - so kann man Atom Elemente in *RSS* Feeds einfügen. Wir haben sogar -*RDF* Feeds gesehen die viel von Atom verwenden statt den üblicheren Erweiterungen wie Dublin Core. - -.. table:: Nicht-Core Erweiterungen (müssen per Hand registriert werden) - - +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ - |Syndication |Implementiert Unterstützung für Syndication 1.0 RSS Feeds | - +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ - |CreativeCommons|Ein RSS Modul das ein Element auf oder Level hinzufügt welches spezifiziert welche Creative Commons Lizenz anzuwenden ist.| - +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+ - -Die zusätzlichen nicht-Core Erweiterungen werden angeboten aber standardmäßig bei ``Zend\Feed\Reader`` nicht -registriert. Wenn man Sie verwenden will, muß man ``Zend\Feed\Reader`` sagen dass Sie diese zusätzlich zum -Importieren eines Feeds laden soll. Zusätzliche nicht-Core Erweiterungen werden in zukünftigen Releases dieser -Komponente enthalten sein. - -Das Registrieren einer Erweiterung bei ``Zend\Feed\Reader``, so dass diese geladen wird und dessen *API* für Feed -und Entry Objekte zur Verfügung steht, ist eine einfache Sache wenn der ``Zend\Loader\PluginLoader`` verwendet -wird. Hier registrieren wir die optionale Slash Erweiterung und finden heraus das Sie direkt von der Entry Level -*API* heraus aufgerufen werden kann, ohne große Dinge notwendig sind. Es ist zu beachten das die Namen der -Erweiterungen von der Schreibweise abhängig sind und Camel Casing für mehrere Ausdrücke verwenden. - -.. code-block:: php - :linenos: - - Zend\Feed\Reader::registerExtension('Syndication'); - $feed = Zend\Feed\Reader::import('http://rss.slashdot.org/Slashdot/slashdot'); - $updatePeriod = $feed->current()->getUpdatePeriod(); - -Im obigen Beispiel haben wir geprüft wie oft ein Feed aktualisiert wurde indem wir die ``getUpdatePeriod()`` -Methode verwendet haben. Da das nicht Teil der Kern *API* von ``Zend\Feed\Reader`` ist, kann es nur eine Methode -sein die von der neu registrieren Syndication Erweiterung unterstützt wird. - -Wie man auch sieht, kann man auf die neuen Methoden vlon Erweiterungen aus der Haupt *API* heraus zugreifen indem -*PHP*'s magische Methoden verwendet werden. Als Alternative kann man, für ein ähnliches Ergebnis, auf jedes -Erweiterungs Objekt auch direkt zugreifen, wie anbei gezeigt. - -.. code-block:: php - :linenos: - - Zend\Feed\Reader::registerExtension('Syndication'); - $feed = Zend\Feed\Reader::import('http://rss.slashdot.org/Slashdot/slashdot'); - $syndication = $feed->getExtension('Syndication'); - $updatePeriod = $syndication->getUpdatePeriod(); - -.. _zend.feed.reader.extending.feed: - -Erweiterungen für Zend\Feed\Reader schreiben -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Unweigerlich gibt es Zeiten in denen die *API* von ``Zend\Feed\Reader`` einfach nicht in der Lage ist etwas das man -von einem Feed oder Eintrag benötigt zu erhalten. Man kann die darunterliegenden Quell Objekte, wie ein -DOMDocument, verwenden um Sie von Hand zu erhalten. Trotzdem sind weitere wiederverwendbare Methoden vorhanden -indem man Erweiterungen schreibt die diese neuen Abfragen unterstützen. - -Als Beispiel nehmen wir den Fall eine komplett fiktiven Firma an die Jungle Books heißt. Jungle Books hat eine -Vielzahl an Reviews für Bücher veröffentlicht die Sie verkaufen (von externen Quellen und Kunden), welche als -*RSS* 2.0 Feed verteilt werden. Die Marketing Abteilung realisiert das Web Anwendungen welche diesen Feed -verwenden, aktuell nicht herausfinden können welches Buch exakt betrachtet wird. Um jedem das Leben leichter zu -machen entscheiden Sie dass die Streber Abteilung *RSS* 2.0 erweitern muß um ein neues Element pro Eintrag -hinzuzufügen das die *ISBN*-10 oder *ISBN*-13 Zahl der Veröffentlichung die der Eintrag betrifft unterstützt. -Sie definieren das neue ```` Element recht einfach mit dem standardmäßigen Namen und Namespace *URI*: - -.. code-block:: php - :linenos: - - JungleBooks 1.0: - http://example.com/junglebooks/rss/module/1.0/ - -Ein Teil des *RSS* das diese Erweiterung in der Praxis enthält könnte in etwa so aussehen: - -.. code-block:: php - :linenos: - - - - - Jungle Books Customer Reviews - http://example.com/junglebooks - Many book reviews! - Fri, 26 Jun 2009 19:15:10 GMT - - http://example.com/junglebooks/book/938 - - - Review Of Flatland: A Romance of Many Dimensions - http://example.com/junglebooks/review/987 - Confused Physics Student - - A romantic square?! - - Thu, 25 Jun 2009 20:03:28 -0700 - 048627263X - - - - -Die Implementierung dieses neuen *ISBN* Elements als eine einfache Eintrags Level Erweiterung wird die folgende -Klasse benötigen (und die Verwendung des eigenen Klassen Namespaces ausserhalb von Zend). - -.. code-block:: php - :linenos: - - class My_FeedReader_Extension_JungleBooks_Entry - extends Zend\Feed\Reader\Extension\EntryAbstract - { - public function getIsbn() - { - if (isset($this->_data['isbn'])) { - return $this->_data['isbn']; - } - $isbn = $this->_xpath->evaluate( - 'string(' . $this->getXpathPrefix() . '/jungle:isbn)' - ); - if (!$isbn) { - $isbn = null; - } - $this->_data['isbn'] = $isbn; - return $this->_data['isbn']; - } - - protected function _registerNamespaces() - { - $this->_xpath->registerNamespace( - 'jungle', 'http://example.com/junglebooks/rss/module/1.0/' - ); - } - } - -Diese Erweiterung ist einfach genug um Ihr zu folgen. Sie erstellt eine neue Methode ``getIsbn()``, welche eine -XPath Abfrage auf dem aktuellen Eintrag durchführt, um die *ISBN* Nummer welche vom ```` Element -umhüllt ist, zu extrahieren. Das kann optional auch im internen nicht-persistenten Cache gespeichert werden (keine -Notwendigkeit den *DOM* abzufragen wenn es auf dem gleichen Eintrag nochmals aufgerufen wird). Der Wert wird dem -Anrufer zurückgegeben. Am Ende haben wir eine geschützte Methode (Sie ist abstrakt, muss also existieren) welche -den Jungle Books Namespace für Ihre eigenen *RSS* Module registriert. Wärend wir das ein *RSS* Modul nennen, gibt -es nichts das verhindert dass das gleiche Element in Atom Feeds verwendet wird - und alle Erweiterungen welche den -Prefix verwenden der von ``getXpathPrefix()`` angeboten wird, sind aktuell neutral und arbeiten auf *RSS* oder Atom -Feeds ohne zusätzlichen Code. - -Da die Erweiterung ausserhalb vom Zend Framework gespeichert ist, muss man den Pfad Prefix für die eigenen -Erweiterungen registrieren damit ``Zend\Loader\PluginLoader`` diese finden kann. Danach ist es einfach ein Problem -der Registrierung der Erweiterung, wenn diese nicht bereits geladen wurde, und deren Verwendung in der Praxis. - -.. code-block:: php - :linenos: - - if(!Zend\Feed\Reader::isRegistered('JungleBooks')) { - Zend\Feed\Reader::addPrefixPath( - 'My_FeedReader_Extension', '/path/to/My/FeedReader/Extension' - ); - Zend\Feed\Reader::registerExtension('JungleBooks'); - } - $feed = Zend\Feed\Reader::import('http://example.com/junglebooks/rss'); - - // ISBN für irgendein Buch dem der erste Eintrag im Feed gewidmet war - $firstIsbn = $feed->current()->getIsbn(); - -Das Schreiben einer Feed Level Erweiterung unterscheidet sich nicht sehr. Der Beispiel Feed von vorher enthält ein -nicht erwähntes ```` Element das Jungle Books bei Ihrem Standard hinzugefügt haben um einen -Link zum beliebtesten Buch des Tages hinzuzufügen (im Sinne von Verkehr der Besucher). Hier ist eine Erweiterung -welche eine ``getDaysPopularBookLink()`` Methode bei der Feed Level *API* hinzufügt. - -.. code-block:: php - :linenos: - - class My_FeedReader_Extension_JungleBooks_Feed - extends Zend\Feed\Reader\Extension\FeedAbstract - { - public function getDaysPopularBookLink() - { - if (isset($this->_data['dayPopular'])) { - return $this->_data['dayPopular']; - } - $dayPopular = $this->_xpath->evaluate( - 'string(' . $this->getXpathPrefix() . '/jungle:dayPopular)' - ); - if (!$dayPopular) { - $dayPopular = null; - } - $this->_data['dayPopular'] = $dayPopular; - return $this->_data['dayPopular']; - } - - protected function _registerNamespaces() - { - $this->_xpath->registerNamespace( - 'jungle', 'http://example.com/junglebooks/rss/module/1.0/' - ); - } - } - -Wiederholen wir das letzte Beispiel der Verwendung einer eigenen Erweiterung um zu zeigen wie die Methode verwendet -wird. - -.. code-block:: php - :linenos: - - if (!Zend\Feed\Reader::isRegistered('JungleBooks')) { - Zend\Feed\Reader::addPrefixPath( - 'My_FeedReader_Extension', '/path/to/My/FeedReader/Extension' - ); - Zend\Feed\Reader::registerExtension('JungleBooks'); - } - $feed = Zend\Feed\Reader::import('http://example.com/junglebooks/rss'); - - // URI zur Informations-Seite des populärsten Buchs des Tages mit Besuchern - $daysPopularBookLink = $feed->getDaysPopularBookLink(); - - // ISBN für irgendein Buch dem der erste Eintrag im Feed gewidmet war - $firstIsbn = $feed->current()->getIsbn(); - -Beim Betrachten dieser Beispiele, konnte man sehen das wir Feed und Eintrags Erweiterungen nicht separat -registriert haben. Erweiterungen im selben Standard können sowohl eine Feed und Entry Klasse enthalten oder auch -nicht, sodas ``Zend\Feed\Reader`` nur die Registrierung des darüberliegenden Eltern Namens benötigt, z.B. -JungleBooks, DublinCore, Slash. Intern kann sie prüfen für welchen Level Erweiterungen existieren und und diese -Laden wenn Sie gefunden werden. In unserem Fall haben wir jetzt ein komplettes Set von Erweiterungen: -``JungleBooks_Feed`` und ``JungleBooks_Entry``. - - diff --git a/docs/languages/de/modules/zend.feed.writer.rst b/docs/languages/de/modules/zend.feed.writer.rst deleted file mode 100644 index de757ca89..000000000 --- a/docs/languages/de/modules/zend.feed.writer.rst +++ /dev/null @@ -1,326 +0,0 @@ -.. EN-Revision: none -.. _zend.feed.writer: - -Zend\Feed\Writer -================ - -.. _zend.feed.writer.introduction: - -Einführung ----------- - -``Zend\Feed\Writer`` ist die Bruderkomponente zu ``Zend\Feed\Reader`` und verantwortlich für die Erzeugung von -Feeds für die Ausgabe. Sie unterstützt die Atom 1.0 Spezifikation (*RFC* 4287) und *RSS* 2.0 wie vom *RSS* -Advisory Board (*RSS* 2.0.11) spezifiziert. Es weicht nicht von diesen Standards ab. Trotzdem bietet es ein -einfaches System der Erweiterung, welches es erlaubt jede Erweiterung und jedes Modul für jede der zwei -Spezifikationen zu implementieren, wenn diese nicht von Haus aus angeboten werden. - -In vieler Hinsicht ist ``Zend\Feed\Writer`` das Gegenteil von ``Zend\Feed\Reader``. Während ``Zend\Feed\Reader`` -darauf abzielt, eine einfach zu verwendende Architektur zur Verfügung zu stellen, die sich durch Getter-Methoden -auszeichnet, stellt ``Zend\Feed\Writer`` ähnlich benannte Setter oder Mutatoren bereit. Das stellt sicher, dass -die *API* keine weitere Lernkurve aufwirft, wenn sich jemand bereits mit ``Zend\Feed\Reader`` auskennt. - -Als Ergebnis dieses Designs ist der Rest nämlich einleuchtend. Hinter den Kulissen wird jedes Datenset eines -``Zend\Feed\Writer``-Daten-Containers während der Darstellungszeit in ein DOMDocument-Objekt übersetzt, indem die -notwendigen Feed-Elemente verwendet werden. Für jeden unterstützten Feed-Typen gibt es beide, sowohl einen Atom -1.0 als auch einen *RSS* 2.0 Renderer. Die Verwendung der DOMDocument-Klasse statt einer Templatelösung hat viele -Vorteile. Der offensichtlichste ist die Möglichkeit das DOMDocument zu exportieren, um es weiter zu bearbeiten und -sich auf *PHP* *DOM* für die korrekte und richtige Darstellung zu verlassen. - -Wie bei ``Zend\Feed\Reader`` ist ``Zend\Feed\Writer`` ein alleinstehender Ersatz für ``Zend_Feed``\ s -Builder-Architektur und nicht kompatibel mit diesen Klassen. - -.. _zend.feed.writer.architecture: - -Architektur ------------ - -Die Architektur von ``Zend\Feed\Writer`` ist sehr einfach. Es hat zwei Kernsets von Klassen: Daten-Container und -Renderer. - -Der Container enthält die Klassen ``Zend\Feed\Writer\Feed`` und ``Zend\Feed\Writer\Entry``. Die Einstiegsklassen -können bei jeder Feed-Klasse angehängt werden. Der einzige Zweck dieses Containers ist es, Daten über den zu -erstellenden Feed zu sammeln, indem ein einfaches Interface von Setter-Methoden verwendet wird. Diese Methoden -führen einige Test zur Datenprüfung durch. Zum Beispiel prüft er übergebene *URI*\ s, Datum, usw. Diese -Prüfungen sind nicht an einen der Feed-Standarddefinitionen gebunden. Das Container-Objekt enthält auch Methoden, -welche die schnelle Darstellung und den Export des endgültigen Feeds erlauben und sie können auf Wunsch -wiederverwendet werden. - -Zusätzlich zu den hauptsächlichen Datencontainerklassen gibt es zwei Atom 2.0 spezifische Klassen. -``Zend\Feed\Writer\Source`` und ``Zend\Feed\Writer\Deleted``. Die erstere implementiert Atom 2.0 Quell-Elemente, -welche Feed-Metadaten der Quelle für spezielle Einträge im verwendeten Feed enthalten (z.B. wenn der aktuelle -Feed nicht die originale Quelle des Eintrags enthält). Die letztere implementiert Atom Tombstones *RFC* und -erlaubt es Feeds, Referenzen zu Einträgen zu haben, welche bereits gelöscht wurden. - -Während es zwei hauptsächliche Datencontainer-Typen gibt, gibt es vier Renderer - zwei passende -Container-Renderer pro unterstütztem Feedtyp. Jeder Renderer akzeptiert einen Container, und basierend auf seinem -Container versucht er ein gültiges Feed-Markup zu erstellen. Wenn der Renderer nicht in der Lage ist, ein -gültiges Feed-Markup zu erstellen, möglicherweise weil dem Container ein obligatorischer Datenpunkt fehlt, dann -wird er dies melden, indem eine ``Exception`` geworfen wird. Während es möglich ist ``Exception``\ s zu -ignorieren, würde dies die standardmäßige Schutzvorrichtung entfernen, welche sicherstellt, dass gültige Daten -gesetzt wurden, um einen komplett gültigen Feed darzustellen. - -Um dies etwas genauer zu erklären, kann man ein Set von Datencontainern für einen Feed erstellen, wobei es einen -Feed-Container gibt, in dem einige Entry-Container hinzugefügt wurden und ein Deleted (gelöschter) Container. -Dies formt eine Datenhierarchie, die einen normalen Feed nachstellt. Wenn die Darstellung durchgeführt wird, dann -übergibt diese Hierarchie ihre Teile den betreffenden Darstellern und die partiellen Feeds (alle DOMDocuments) -werden dann zusammen geworfen, um einen kompletten Feed zu erstellen. Im Falle von Source oder Deleted (Tomestone) -Containern werden diese nur für Atom 2.0 dargestellt und für *RSS* ignoriert. - -Da das System in Datencontainer und Renderer aufgeteilt ist, sind Erweiterungen interessant. Eine typische -Erweiterung, welche Namespaced Feeds und Entry Level Elemente bietet, muss selbst exakt die gleiche Architektur -reflektieren, z.B. anbieten von Feed und Entry Level Daten Containern und passenden Renderern. Das ist -glücklicherweise keine komplexe Integrationsarbeit, da alle Erweiterungsklassen einfach registriert und -automatisch von den Kernklassen verwendet werden. Wir kommen später in diesem Kapitel im Detail zu den -Erweiterungen. - -.. _zend.feed.writer.getting.started: - -Beginnen --------- - -Die Verwendung von ``Zend\Feed\Reader`` ist so einfach wie das Setzen von Daten und dem Ausführen des Renderers. -Hier ist ein Beispiel um einen minimalen Atom 1.0 Feed zu erstellen. Dies demonstriert dass jeder Feed oder Eintrag -einen eigenen Container verwendet. - -.. code-block:: php - :linenos: - - /** - * Den Eltern Feed erstellen - */ - $feed = new Zend\Feed\Writer\Feed; - $feed->setTitle('Paddy\'s Blog'); - $feed->setLink('http://www.example.com'); - $feed->setFeedLink('http://www.example.com/atom', 'atom'); - $feed->addAuthor(array( - 'name' => 'Paddy', - 'email' => 'paddy@example.com', - 'uri' => 'http://www.example.com', - )); - $feed->setDateModified(time()); - $feed->addHub('http://pubsubhubbub.appspot.com/'); - - /** - * Einen oder mehrere Einträge hinzufügen. Beachten das Einträge - * manuell hinzugefügt werden müssen sobald Sie erstellt wurden - */ - $entry = $feed->createEntry(); - $entry->setTitle('All Your Base Are Belong To Us'); - $entry->setLink('http://www.example.com/all-your-base-are-belong-to-us'); - $entry->addAuthor(array( - 'name' => 'Paddy', - 'email' => 'paddy@example.com', - 'uri' => 'http://www.example.com', - )); - $entry->setDateModified(time()); - $entry->setDateCreated(time()); - $entry->setDescription( - 'Die Schwierigkeiten erklären Spiele ins englische zu portieren.' - ); - $entry->setContent( - 'Ich schreibe diesen Artikel nicht. Das Beispiel ist lang genug ;).'); - $feed->addEntry($entry); - - /** - * Den ergebenden Feed in Atom 1.0 darstellen und $out zuordnen. Man kann - * "atom" mit "rss" ersetzen um einen RSS 2.0 feed zu erstellen - */ - $out = $feed->export('atom'); - -Die dargestellt Ausgabe sollte folgende sein: - -.. code-block:: xml - :linenos: - - - - Paddy's Blog - Writing about PC Games since 176 BC. - 2009-12-14T20:28:18+00:00 - - Zend\Feed\Writer - - - - http://www.example.com - - Paddy - paddy@example.com - http://www.example.com - - - - <![CDATA[All Your Base Are Belong To - Us]]> - - - - 2009-12-14T20:28:18+00:00 - 2009-12-14T20:28:18+00:00 - - http://www.example.com/all-your-base-are-belong-to-us - - Paddy - paddy@example.com - http://www.example.com - - - - - - - -Das ist ein vollkommen gültiges Beispiel für Atom 1.0. Es sollte erwähnt werden, dass das Weglassen von -obligatorischen Teilen der Daten, wie dem Titel, zu einer ``Exception`` führt, wenn diese als Atom 1.0 dargestellt -werden. Anders ist das bei *RSS* 2.0, wo ein Titel weggelassen werden kann, solange eine Beschreibung vorhanden -ist. Dadurch werden Exceptions geworfen, die sich zwischen beiden Standards abhängig vom Renderer unterscheiden, -der verwendet wird. Vom Design her wird ``Zend\Feed\Writer`` keinen ungültigen Feed für einen Standard -übersetzen, außer der End-Benutzer entscheidet sich bewusst, alle Exceptions zu ignorieren. Diese eingebaute -Sicherheit wurde hinzugefügt, um sicherzustellen, dass sich Benutzer ohne tiefe Kenntnisse der betreffenden -Spezifikationen keine Sorgen machen müssen. - -.. _zend.feed.writer.setting.feed.data.points: - -Die Datenpunkte eines Feeds setzen ----------------------------------- - -Bevor ein Feed dargestellt werden kann, müssen zuerst die dafür notwendigen Daten gesetzt werden. Hierbei wird -eine einfache Setter-artige *API* verwendet, welche auch als initiale Methode für die Prüfung von Daten herhält, -wenn diese gesetzt werden. Vom Design her entspricht die *API* stark der von ``Zend\Feed\Reader``, um Unklarheiten -und Unsicherheiten zu vermeiden. - -.. note:: - - Benutzer haben angemerkt, dass das Nichtvorhandensein einer einfachen Array-Schreibweise für Eingabedaten zu - langen Codeabschnitten führt. Das wird in zukünftigen Versionen behoben. - -``Zend\Feed\Writer`` bietet diese *API* über seine Datencontainerklassen ``Zend\Feed\Writer\Feed`` und -``Zend\Feed\Writer\Entry`` an (nicht zu erwähnen die Atom 2.0 spezifischen Erweiterungsklassen). Diese Klassen -speichern nahezu alle Feed-Daten in einer vom Typ unabhängigen Art, was bedeutet, dass man jeden Datencontainer -mit jedem Renderer wiederverwenden kann, ohne dass zusätzliche Arbeit notwendig ist. Beide Klassen sind auch offen -für Erweiterungen, was bedeutet, dass eine Erweiterung ihre eigenen Containerklassen definieren kann, welche bei -den Basis-Containerklassen als Erweiterung registriert sind und geprüft werden, sobald irgendein Methodenaufruf -die ``__call()`` Methode des Basiscontainers auslöst. - -Hier ist eine Zusammenfassung der Kern-*API* für Feeds. Man sollte beachten, dass sie nicht nur die Standards für -*RSS* und Atom umfasst, sondern auch eine Anzahl von Erweiterungen, welche in ``Zend\Feed\Writer`` enthalten sind. -Die Benennung dieser Erweiterungsmethoden ist recht generisch - alle Erweiterungsmethoden arbeiten auf dem gleichen -Level wie die Kern-*API*, da wir es erlauben, jedes Erweiterungsobjekt separat zu empfangen wenn das notwendig ist. - -Die *API* für Daten auf Level des Feeds ist in ``Zend\Feed\Writer\Feed`` enthalten. Zusätzlich zu der anbei -beschriebenen *API*, implementiert die Klasse auch die Interfaces ``Countable`` und ``Iterator``. - -.. table:: API Methoden auf Feed Level - - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setId() |Setzt eine eindeutige ID, die mit diesem Feed assoziiert ist. Für Atom 1.0 ist das ein atom:id Element, und für RSS 2.0 wird es als guid Element hinzugefügt. Diese sind optional, solange ein Link hinzugefügt wird, wenn z.B. der Link als ID gesetzt ist. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setTitle() |Setzt den Titel des Feeds. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setDescription() |Setzt die textuelle Beschreibung des Feeds. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setLink() |Setzt eine URI zur HTML-Website, welche die gleichen oder ähnliche Informationen wie dieser Feed enthält (z.B. wenn der Feed von einem Blog ist, sollte er die URI des Blogs anbieten, unter der die HTML-Version der Einträge gelesen werden können). | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setFeedLinks() |Fügt einen Link zu einem XML-Feed hinzu, entweder der erzeugte Feed oder eine alternative URI zeigen auf den gleichen Feed, aber in einem anderen Format. Es ist mindestens notwendig einen Link zum erstellten Feed zu inkludieren, damit dieser eine identifizierbare endgültige URI hat, welche es dem Client erlaubt, Änderungen des Orts mitzubekommen, ohne dass dauernde Umleitungen notwendig sind. Dieser Parameter ist ein Array von Arrays, wobei jedes Unter-Array die Schlüssel "type" und "uri" enthält. Der Typ sollte "atom", "rss" oder "rdf" sein. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addAuthors() |Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays, wobei jedes Unter-Array die Schlüssel "name", "email" und "uri" enthalten kann. Der Wert "uri" ist nur für Atom Feeds anwendbar, da RSS keine Möglichkeit enthält diese anzuzeigen. Für RSS 2.0 werden bei der Darstellung zwei Elemente erzeugt - ein Autorelement, welches die Referenz zur Email und dem Namen in Klammern enthält und ein Dublin Core Creator Element, welches nur den Namen enthält. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addAuthor() |Setzt die Daten für einen einzelnen Autor und folgt demselben Array-Format wie vorher für ein einzelnes Unter-Array beschrieben. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setDateCreated() |Setzt das Datum, an dem dieser Feed erstellt wurde. Generell nur für Atom anwendbar, wo es das Datum beschreibt, zu der die Ressource, die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der erwartete Parameter muss ein UNIX-Timestamp oder ein Zend_Date-Objekt sein. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setDateModified() |Setzt das Datum, an dem dieser Feed das letzte Mal geändert wurde. Der erwartete Parameter muss ein UNIX-Timestamp oder ein Zend_Date-Objekt sein. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setLastBuildDate()|Setzt das Datum an dem der Feed das letzte mal erstellt wurde. Der erwartete Parameter kann ein UNIX Timestamp oder ein Zend_Date Objekt sein. Das wird nur für RSS 2.0 Feeds dargestellt und wird automatisch als aktuelles Datum dargestellt wenn er nicht explizit gesetzt wird. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setLanguage() |Setzt die Sprache des Feeds. Diese wird unterdrückt, solange sie nicht gesetzt ist. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setGenerator() |Erlaubt es einen Generator zu setzen. Der Parameter sollte ein Array sein, welches die Schlüssel "name", "version" und "uri" enthält. Wenn er unterdrückt wird, wird ein standardmäßiger Generator hinzugefügt, welcher auf Zend\Feed\Writer, die aktuelle Version des Zend Framework und die URI des Frameworks verweist. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setCopyright() |Setzt eine Copyright-Notiz, die mit dem Feed assoziiert ist. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addHubs() |Akzeptiert ein Array von Pubsubhubbub Hub Endpunkten, die im Feed als Atom-Links dargestellt werden, damit PuSH-Abonnenten den eigenen Feed abbonieren können. Es ist zu beachten, dass man einen Pubsubhubbub Herausgeber implementieren muss, damit Real-Time-Updates ermöglicht werden. Ein Herausgeber kann implementiert werden, indem Zend\Feed\Pubsubhubbub\Publisher verwendet wird. Die Methode addHub() erlaubt es gleichzeitig nur einen Hub hinzuzufügen. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addCategories() |Akzeptiert ein Array an Kategorien für die Darstellung, wobei jedes Element selbst ein Array ist, dessen mögliche Schlüssel "term", "label" und "scheme" enthalten. "term" ist typischerweise der Name einer Kategorie, welche für die Aufnahme in einer URI passen. "label" kann ein menschenlesbarer Name einer Kategorie sein, der spezielle Zeichen unterstützt (er wird während der Darstellung kodiert) und ist ein benötigter Schlüssel. "scheme" (im RSS auch die Domain genannt) ist optional, muss aber eine gültige URI sein. Die Methode addCategory() erlaubt es gleichzeitig nur eine Kategorie hinzuzufügen.| - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setImage() |Akzeptiert ein Array an Metadaten für Bilder für ein RSS Bild oder ein Atom Logo. Atom 1.0 benötigt nur eine URI. RSS 2.0 benötigt eine URI, einen HTML Link, und einen Bildtitel. RSS 2.0 kann optional eine Breite, eine Höhe und eine Beschreibung des Bildes senden. Die Array Parameter können Sie enthalten indem die folgenden Schlüssel verwendet werden: uri, link, title, description, height und width. Der RSS 2.0 HTML Link sollte auf die HTML Quellseite des Feeds zeigen. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |createEntry() |Gibt eine neue Instanz von Zend\Feed\Writer\Entry zurück. Das ist der Daten Container auf der Ebene des Eintrags. Neue Einträge müssen addEntry() explizit aufrufen, um Einträge für die Darstellung hinzuzufügen. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addEntry() |Fügt eine Instanz von Zend\Feed\Writer\Entry zum aktuellen Feed Container für die Darstellung hinzu. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |createTombstone() |Gibt eine neue Instanz von Zend\Feed\Writer\Deleted zurück. Das ist der Daten Container auf Level des Atom 2.0 Tombstone. Neue Einträge werden dem aktuellen Feed nicht automatisch zugeordnet. Man muss also addTombstone() explizit aufrufen um den gelöschten Eintrag für die Darstellung hinzuzufügen. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addTombstone() |Fügt dem aktuellen Feed Container eine Instanz von Zend\Feed\Writer\Deleted für die Darstellung hinzu. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |removeEntry() |Akzeptiert einen Parameter, der den Array-Index eines Eintrags bestimmt, welcher vom Feed zu entfernen ist. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |export() |Exportiert die komplette Datenhierarchie in einen XML Feed. Die Methode has zwei Parameter. Der erste ist der Feedtyp, entweder "atom" oder "rss". Der zweite in ein optionaler Boolean-Wert, der zeigt ob Exceptions geworfen werden oder nicht. Er ist standardmäßig TRUE. | - +------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - - Zusätzlich zu diesen Settern gibt es passende Getter, um Daten von den Eintrags-Daten-Containern zu erhalten. - Zum Beispiel gibt es zu ``setImage()`` eine passende - -.. _zend.feed.writer.setting.entry.data.points: - -Setzen der Datenpunkte für Einträge ------------------------------------ - -Hier ist eine Zusammenfassung der Kern-*API* für Einträge und Elemente. Man sollte beachten, dass dies nicht nur -die Standards für *RSS* und Atom umfasst, sondern auch eine Anzahl von Erweiterungen, welche in -``Zend\Feed\Writer`` enthalten sind. Die Benennung dieser Erweiterungsmethoden ist recht generisch - alle -Erweiterungsmethoden arbeiten auf der gleichen Ebene wie die Kern-*API*, da wir es zulassen, jedes -Erweiterungsobjekt separat zu empfangen, wenn das notwendig ist. - -Die *API* auf Level des Eintrags ist in ``Zend\Feed\Writer\Entry`` enthalten. - -.. table:: API-Methoden auf Eintragsebene - - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setId() |Setzt eine eindeutige ID, die mit diesem Eintrag assoziiert ist. Für Atom 1.0 ist das ein atom:id Element und für RSS 2.0 wird es als guid-Element hinzugefügt. Diese sind optional, solange ein Link hinzugefügt wird, wenn z.B. der Link als ID gesetzt ist. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setTitle() |Setzt den Titel des Eintrags. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setDescription() |Setzt die textuelle Beschreibung des Eintrags. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setContent() |Setzt den Inhalt des Eintrags. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setLink() |Setzt eine URI zur HTML-Website, welche die gleichen oder ähnliche Informationen wie dieser Eintrag enthält (z.B. wenn der Feed von einem Blog ist, sollte er die URI des Blog Artikels anbieten, unter welcher die HTML-Version des Eintrags gelesen werden kann). | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setFeedLinks() |Fügt einen Link zu einem XML-Feed hinzu, entweder der erzeugte Feed oder eine alternative URI, dieauf den gleichen Feed zeigt, aber in einem anderen Format. Es wird empfohlen, mindestens einen Link zum erstellten Feed zu aufzunehmen, damit dieser eine erkennbare endgültige URI hat, welche es dem Client erlaubt, Ortswechsel mitzubekommen, ohne dass dauernde Umleitungen notwendig sind. Dieser Parameter ist ein Array von Arrays, wobei jedes Unter-Array die Schlüssel "type" und "uri" enthält. Der Typ sollte "atom", "rss" oder "rdf" sein. Wenn der Typ weggelassen wird, ist er standardmäßig mit dem Typ identisch, mit dem der Feed dargestellt wird.| - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addAuthors() |Setzt die Daten für Autoren. Der Parameter ist ein Array von Arrays wobei jedes Unter-Array die Schlüssel "name", "email" und "uri" enthalten kann. Der Wert "uri" ist nur für Atom-Feeds anwendbar, da RSS keine Möglichkeit enthält, diese anzuzeigen. Für RSS 2.0 werden bei der Darstellung zwei Elemente erzeugt - ein Autorelement, welches die Referenz zur Email und den Namen in Klammern enthält und ein Dublin Core Creator Element, welches nur den Namen enthält. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addAuthor() |Setzt die Daten für einen einzelnen Autor und folgt demselben Format wie vorher für ein einzelnes Unter-Array beschrieben. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setDateCreated() |Setzt das Datum, an dem dieser Feed erstellt wurde. Generell nur für Atom anwendbar, wo es das Datum beschreibt an dem die Ressource, die von dem Atom 1.0 Dokument beschrieben wird, erstellt wurde. Der erwartete Parameter muss ein UNIX-Timestamp oder ein Zend_Date-Objekt sein. Wenn es nicht angegeben wird, dann wird das verwendete Datum das aktuelle Datum und die aktuelle Zeit sein. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setDateModified() |Setzt das Datum, an dem dieser Feed das letzte Mal geändert wurde. Der erwartete Parameter muss ein UNIX-Timestamp oder ein Zend_Date-Objekt sein. Wenn es nicht angegeben wird, dann wird das verwendete Datum das aktuelle Datum und die aktuelle Zeit sein. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setCopyright() |Setzt eine Copyright-Notiz, welche mit dem Feed assoziiert wird. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setCategories() |Akzeptiert ein Array von Kategorien für die Darstellung, wobei jedes Element selbst ein Array ist, dessen möglich Schlüssel "term", "label" und "scheme" enthalten. "term" ist typischerweise der Name einer Kategorie, welche für die Aufnahme in einer URI passen. "label" kann ein menschenlesbarer Name einer Kategorie sein, der spezielle Zeichen unterstützt (er wird während der Darstellung kodiert) und ist ein benötigter Schlüssel. "scheme" (im RSS auch die Domain genannt) ist optional, muss aber eine gültige URI sein. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setCommentCount() |Setzt die Anzahl an Kommentaren, welche mit diesem Eintrag verbunden sind. Die Darstellung unterscheidet sich zwischen RSS und Atom 2.0 abhängig vom benötigten Element oder Attribut. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setCommentLink() |Setzt einen Link zu einer HTML Seite, welche Kommentare enthält, die mit diesem Eintrag assoziiert sind. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setCommentFeedLink() |Setzt einen Link zu einem XML-Feed, der Kommentare enthält, welche mit diesem Eintrag assoziiert sind. Der Parameter ist ein Array, welches die Schlüssel "uri" und "type" enthält, wobei der Typ entweder "rdf", "rss" oder "atom" ist. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setCommentFeedLinks()|Das gleiche wie setCommentFeedLink(), außer dass sie ein Array von Arrays akzeptiert, wobei jedes Unterarray die von setCommentFeedLink() erwarteten Parameter enthält. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setEncoding() |Setzt die Kodierung des Textes des Eintrags. Diese ist standardmäßig UTF-8, welche auch die bevorzugte Kodierung ist. | - +---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - - Zusätzlich zu diesen Settern gibt es passende Getter, um Daten von den Eintrags-Daten-Containern zu erhalten. - - diff --git a/docs/languages/de/modules/zend.file.transfer.filters.rst b/docs/languages/de/modules/zend.file.transfer.filters.rst deleted file mode 100644 index c43f4d966..000000000 --- a/docs/languages/de/modules/zend.file.transfer.filters.rst +++ /dev/null @@ -1,338 +0,0 @@ -.. EN-Revision: none -.. _zend.file.transfer.filters: - -Filter für Zend\File\Transfer -============================= - -``Zend\File\Transfer`` wird mit verschiedenen Datei bezogenen Filtern ausgeliefert die verwendet werden können um -verschiedene Arbeiten die oft auf Dateien angewendet werden zu automatisieren. Es ist zu beachten das Dateifilter -nach der Validierung angewendet werden. Dateifilter verhalten sich auch etwas anders als andere Filter. Sie geben -immer den Dateinamen zurück, und nicht den geänderten Inhalt (was eine schlechte Idee wäre wenn auf 1GB Dateien -gearbeitet wird). Alle Dateifilter welche mit ``Zend\File\Transfer`` angeboten werden können in der -``Zend_Filter`` Komponente gefunden werden und heißen ``Zend\Filter\File\*``. Die folgenden Filter sind aktuell -vorhanden: - -- ``Decrypt``: Dieser Filter kann verschlüsselte Dateien entschlüsseln. - -- ``Encrypt``: Dieser Filter kann Dateien verschlüsseln. - -- ``LowerCase``: Dieser Filter kann den Inhalt einer Textdatei auf Kleinschreibung ändern. - -- ``Rename``: Dieser Filter kann Dateien umbenennen, den Ort ändern und sogar das Überschreiben von existierenden - Dateien erzwingen. - -- ``UpperCase``: Dieser Filter kann den Inhalt einer Textdatei auf Großschreibung ändern. - -.. _zend.file.transfer.filters.usage: - -Verwenden von Filtern mit Zend\File\Transfer --------------------------------------------- - -Die Verwendung von Filtern ist sehr einfach. Es gibt verschiedene Methoden für das Hinzufügen und Manipulieren -von Filtern. - -- ``addFilter($filter, $options = null, $files = null)``: Fügt den angegebenen Filter zu den Filterstapel hinzu - (optional nur zu den Datei(en) die spezifiziert wurden). ``$filter`` kann entweder eine aktuelle Filterinstanz - sein, oder ein Kurzname der den Filtertyp spezifiziert (z.B. 'Rename'). - -- ``addFilters(array $filters, $files = null)``: Fügt die angegebenen Filter zum Filterstapel hinzu. Jeder Eintrag - kann entweder ein Filtertyp/-options Paar sein, oder ein Array mit dem Schlüssel 'filter' das den Filter - spezifiziert (alle anderen Optionen werden als Optionen für die Instanzierung der Filter angenommen). - -- ``setFilters(array $filters, $files = null)``: Überschreibt alle bestehenden Filter mit den spezifizierten - Filtern. Die Filter sollten der Syntax folgen die für ``addFilters()`` definiert ist. - -- ``hasFilter($name)``: Zeigt ob ein Filter registriert wurde. - -- ``getFilter($name)``: Gibt einen vorher registrierten Filter zurück. - -- ``getFilters($files = null)``: Gibt registrierte Filter zurück; wenn ``$files`` übergeben wurde, werden die - Filter für die betreffende Datei oder das Set an Dateien zurückgegeben. - -- ``removeFilter($name)``: Entfernt einen vorher registrierten Filter. - -- ``clearFilters()``: Löscht alle registrierten Filter. - -.. _zend.file.transfer.filters.usage.example: - -.. rubric:: Filter zu einem Dateitransfer hinzufügen - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Setzt einen neuen Zielpfad - $upload->addFilter('Rename', 'C:\picture\uploads'); - - // Setzt einen neuen Zielpfad und überschreibt bestehende Dateien - $upload->addFilter('Rename', - array('target' => 'C:\picture\uploads', - 'overwrite' => true)); - -.. _zend.file.transfer.filters.usage.exampletwo: - -.. rubric:: Filter auf eine einzelne Datei begrenzen - -``addFilter()``, ``addFilters()``, und ``setFilters()`` akzeptieren ein endenes ``$files`` Argument. Dieses -Argument kann verwendet werden um eine Datei oder ein Array von Dateien zu spezifizieren auf dem der angegebene -Filter gesetzt werden soll. - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Setzt einen neuen Zielpfad und begrenzt Ihn auf 'file2' - $upload->addFilter('Rename', 'C:\picture\uploads', 'file2'); - -Generell sollte einfach die ``addFilters()`` Methode verwendet werden, welche mehrmals aufgerufen werden kann. - -.. _zend.file.transfer.filters.usage.examplemultiple: - -.. rubric:: Mehrere Filter hinzufügen - -Oft ist es einfacher ``addFilter()`` mehrere Male aufzurufen. Ein Aufruf für jeden Filter. Das erhöht auch die -Lesbarkeit und macht den Code wartbarer. Da alle Methoden das Fluent-Interface implementieren können Aufrufe -einfach wie anbei gezeigt gekoppelt werden: - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Setzt mehrere Rename Filter - $upload->addFilter('Rename', 'C:\picture\newjpg', 'file1') - ->addFilter('Rename', 'C:\picture\newgif', 'file2'); - -.. note:: - - Es ist zu beachten das, auch wenn das mehrfache Setzen des gleichen Filters erlaubt ist, das zu Problemen - führen kann wenn verschiedene Optionen für den gleichen Filter verwendet werden. - -.. _zend.file.transfer.filters.decrypt: - -Decrypt Filter --------------- - -Der ``Decrypt`` Filter erlaubt es verschlüsselte Dateien zu entschlüsseln. - -Dieser Filter verwendet ``Zend\Filter\Decrypt``. Er unterstützt die Erweiterungen ``Mcrypt`` und ``OpenSSL`` von -*PHP*. Lesen Sie bitte das betreffende Kapitel für Details darüber wie Optionen für die Entschlüsselung gesetzt -werden können und welche Optionen unterstützt werden. - -Dieser Filter unterstützt eine zusätzliche Option die verwendet werden kann um die entschlüsselte Datei unter -einem anderen Dateinamen zu speichern. Setze die ``filename`` Option um den Dateinamen zu ändern unter dem die -entschlüsselte Datei abgespeichert wird. Wenn diese Option nicht angegeben wird, überschreibt die entschlüsselte -Datei die verschlüsselte Originaldatei. - -.. _zend.file.transfer.filters.decrypt.example1: - -.. rubric:: Verwenden des Decrypt Filters mit Mcrypt - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer\Adapter\Http(); - - // Fügt einen Filter hinzu um die hochgeladene verschlüsselte Datei - // mit Mcrypt und dem Schlüssel mykey zu entschlüsseln - // with mcrypt and the key mykey - $upload->addFilter('Decrypt', - array('adapter' => 'mcrypt', 'key' => 'mykey')); - -.. _zend.file.transfer.filters.decrypt.example2: - -.. rubric:: Verwenden des Decrypt Filters mit OpenSSL - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer\Adapter\Http(); - - // Fügt einen Filter hinzu um die hochgeladene verschlüsselte Datei - // mit openssl und den angegebenen Schlüsseln zu entschlüseln - $upload->addFilter('Decrypt', - array('adapter' => 'openssl', - 'private' => '/path/to/privatekey.pem', - 'envelope' => '/path/to/envelopekey.pem')); - -.. _zend.file.transfer.filters.encrypt: - -Encrypt Filter --------------- - -Der ``Encrypt`` Filter erlaubt es eine Datei zu verschlüsseln. - -Dieser Filter verwendet ``Zend\Filter\Encrypt``. Er unterstützt die Erweiterungen ``Mcrypt`` und ``OpenSSL`` von -*PHP*. Lesen Sie bitte das betreffende Kapitel für Details darüber wie Optionen für die Entschlüsselung gesetzt -werden können und welche Optionen unterstützt werden. - -Dieser Filter unterstützt eine zusätzliche Option die verwendet werden kann um die verschlüsselte Datei unter -einem anderen Dateinamen zu speichern. Setze die ``filename`` Option um den Dateinamen zu ändern unter dem die -verschlüsselte Datei abgespeichert wird. Wenn diese Option nicht angegeben wird, überschreibt die verschlüsselte -Datei die Originaldatei. - -.. _zend.file.transfer.filters.encrypt.example1: - -.. rubric:: Verwenden des Encrypt Filters mit Mcrypt - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer\Adapter\Http(); - - // Fügt einen Filter hinzu um die hochgeladene Datei mit mcrypt - // und dem Schlüssel mykey zu verschlüsseln - $upload->addFilter('Encrypt', - array('adapter' => 'mcrypt', 'key' => 'mykey')); - -.. _zend.file.transfer.filters.encrypt.example2: - -.. rubric:: Verwenden des Encrypt Filters mit OpenSSL - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer\Adapter\Http(); - - // Fügt einen Filter hinzu um die hochgeladene Datei mit openssl - // und den angegebenen Schlüsseln zu verschlüsseln - $upload->addFilter('Encrypt', - array('adapter' => 'openssl', - 'public' => '/path/to/publickey.pem')); - -.. _zend.file.transfer.filters.lowercase: - -LowerCase Filter ----------------- - -Der ``LowerCase`` Filter erlaubt es den Inhalt einer Datei auf Kleinschreibung zu ändern. Dieser Filter sollte nur -mit Textdateien verwendet werden. - -Bei der Initialisierung kann ein String angegeben werden welcher dann als Kodierung verwendet wird. Oder man kann -die ``setEncoding()`` Methode verwenden um Sie im Nachhinein zu setzen. - -.. _zend.file.transfer.filters.lowercase.example: - -.. rubric:: Verwenden des Lowercase Filters - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer\Adapter\Http(); - $upload->addValidator('MimeType', 'text'); - - // Fügt einen Filter hinzu der hochgeladene Textdateien - // auf Kleinschreibung ändert - $upload->addFilter('LowerCase'); - - // Fügt einen Filter hinzu um die hochgeladene Datei auf Kleinschreibung - // zu ändern aber nur für uploadfile1 - $upload->addFilter('LowerCase', null, 'uploadfile1'); - - // Fügt einen Filter für die Kleinschreibung hinzu wobei die Kodierung - // auf ISO-8859-1 gesetzt wird - $upload->addFilter('LowerCase', 'ISO-8859-1'); - -.. note:: - - Da die Optionen für den LowerCase Filter optional sind muß man darauf achten das man als zweiten Parameter - eine ``NULL`` (die Optionen) geben muß wenn man Ihn auf ein einzelnes Dateielement einschränken will. - -.. _zend.file.transfer.filters.rename: - -Rename Filter -------------- - -Der ``Rename`` Filter erlaubt es das Ziel des Uploads zu Ändern, den Dateinamen sowie bereits bestehende Dateien -zu überschreiben. Er unterstützt die folgenden Optionen: - -- ``source``: Der Name und das Ziel der alten Datei welche umbenannt werden soll. - -- ``target``: Das neue Verzeichnis, oder der Dateiname der Datei. - -- ``overwrite``: Definiert ob die alte Datei von der neuen überschrieben wird wenn diese bereits existiert. Der - Standardwert ist ``FALSE``. - -Zusätzlich kann die ``setFile()`` Methode verwendet werden um Dateien zu setzen, sie überschreibt alle vorher -gesetzten Dateien, ``addFile()`` um eine neue Datei zu bereits bestehenden zu setzen, und ``getFile()`` um alle -aktuell gesetzten Dateien zu erhalten. Um die Dinge zu vereinfachen, versteht dieser Filter verschiedene -Schreibweisen und seine Methoden und der Contructor verstehen die gleichen Schreibweisen. - -.. _zend.file.transfer.filters.rename.example: - -.. rubric:: Verwenden des Rename Filters - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer\Adapter\Http(); - - // Setzt einen neuen Zielpfad für alle Dateien - $upload->addFilter('Rename', 'C:\mypics\new'); - - // Setzt einen neuen Zielpfad nur für uploadfile1 - $upload->addFilter('Rename', 'C:\mypics\newgifs', 'uploadfile1'); - -Man kann verschiedene Schreibweisen verwenden. Anbei ist eine Tabelle in der eine Beschreibung und der Hintergrund -für die verschiedenen unterstützten Schreibweisen zu finden ist. Es ist zu beachten das, wenn man den Adapter -oder das Form Element verwendet, man nicht alle beschriebenen Schreibweisen verwenden kann. - -.. _zend.file.transfer.filters.rename.notations: - -.. table:: Verschiedene Schreibweisen des Rename Filters und deren Bedeutung - - +-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Schreibweise |Beschreibung | - +===============================================================================================+==============================================================================================================================================================================================================================================================================================+ - |addFile('C:\\uploads') |Spezifiziert einen neuen Pfad für alle Dateien wenn der angegebene String ein Verzeichnis ist. Es ist zu beachten das man eine Exception erhält wenn die Datei bereits existiert, siehe den overwriting Parameter. | - +-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addFile('C:\\uploads\\file.ext') |Spezifiziert einen neuen Pfad und Dateinamen für alle Dateien wenn der angegebene String nicht als Verzeichnis erkannt wird. Es ist zu beachten das man eine Exception erhält wenn die angegebene Datei bereits existiert, siehe den overwriting Parameter. | - +-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addFile(array('C:\\uploads\\file.ext', 'overwrite' => true)) |Spezifiziert einen neuen Pfad und Dateinamen für alle Dateien wenn der angegebene String nicht als Verzeichnis erkannt wird, und überschreibt alle existierenden Dateien mit dem gleichen Zielnamen. Es ist zu beachten das man keine Verständigung erhält das eine Datei überschrieben wurde.| - +-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addFile(array('source' => 'C:\\temp\\uploads', 'target' => 'C:\\uploads')) |Spezifiziert einen neuen Pfad für alle Dateien im alten Pfad wenn die angegebenen Strings als Verzeichnis erkannt werden. Es ist zu beachten das man eine Exception erhält wenn die Datei bereits exstiert, siehe den overwriting Parameter. | - +-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |addFile(array('source' => 'C:\\temp\\uploads', 'target' => 'C:\\uploads', 'overwrite' => true))|Spezifiziert einen neuen Pfad für alle Dateien im alten Pfad wenn die angegebenen Strings als Verzeichnis erkant werden und überschreibt alle existierenden Dateien mit dem gleichen Zielnamen. Es ist zu beachten das man keine Benachrichtigung erhält das eine Datei überschrieben wurde. | - +-----------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. _zend.file.transfer.filters.uppercase: - -UpperCase Filter ----------------- - -Der ``UpperCase`` Filter erlaubt es den Inhalt einer Datei auf Großschreibung zu ändern. Dieser Filter sollte nur -mit Textdateien verwendet werden. - -Bei der Initialisierung kann ein String angegeben werden welcher dann als Kodierung verwendet wird. Oder man kann -die ``setEncoding()`` Methode verwenden um Sie im Nachhinein zu setzen. - -.. _zend.file.transfer.filters.uppercase.example: - -.. rubric:: Verwenden des UpperCase Filters - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer\Adapter\Http(); - $upload->addValidator('MimeType', 'text'); - - // Fügt einen Filter hinzu um die hochgeladene Textdatei auf - // Großschreibung zu ändern - $upload->addFilter('UpperCase'); - - // Fügt einen Filter hinzu um die hochgeladene Datei auf Großschreibung - // zu ändern aber nur für uploadfile1 - $upload->addFilter('UpperCase', null, 'uploadfile1'); - - // Fügt einen Filter für die Großschreibung hinzu wobei die Kodierung - // auf ISO-8859-1 gesetzt wird - $upload->addFilter('UpperCase', 'ISO-8859-1'); - -.. note:: - - Da die Optionen für den UpperCase Filter optional sind muß man darauf achten das man als zweiten Parameter - eine ``NULL`` (die Optionen) geben muß wenn man Ihn auf ein einzelnes Dateielement einschränken will. - - diff --git a/docs/languages/de/modules/zend.file.transfer.introduction.rst b/docs/languages/de/modules/zend.file.transfer.introduction.rst deleted file mode 100644 index fadcf2cd1..000000000 --- a/docs/languages/de/modules/zend.file.transfer.introduction.rst +++ /dev/null @@ -1,416 +0,0 @@ -.. EN-Revision: none -.. _zend.file.transfer.introduction: - -Zend\File\Transfer -================== - -``Zend\File\Transfer`` bietet exzessiven Support für Datei Uploads und Downloads. Es kommt mit eingebauten -Prüfungen für Dateien und Funktionslitäten um Dateien mit Filtern zu verändern. Protokoll-Adapter erlauben -``Zend\File\Transfer`` die selbe *API* für Transportprotokolle wie *HTTP*, FTP, WEBDAV und andere zu verwenden. - -.. note:: - - **Einschränkungen** - - Die aktuelle Implementation von ``Zend\File\Transfer`` ist auf *HTTP* Post Uploads limitiert. Andere Adapter die - Downloads und andere Protokolle unterstützen werden in zukünftigen Releases hinzugefügt. Aktuell sollte - ``Zend\File\Transfer\Adapter\Http`` direkt verwendet werden. Sobald andere Adapter vorhanden sind, kann ein - gemeinsames Interface verwendet werden. - -.. note:: - - **Formulare** - - Wenn man ``Zend_Form`` verwendet sollte man die *API*\ s die von ``Zend_Form`` zur Verfügung gestellt werden, - und ``Zend\File\Transfer`` nicht direkt, verwenden. Der Dateitransfer Support von ``Zend_Form`` ist in - ``Zend\File\Transfer`` implementiert, weshalb die Informationen in diesem Kapitel für fortgeschrittene Benutzer - von ``Zend_Form`` interessant sind. - -Die Verwendung von ``Zend\File\Transfer`` ist relativ einfach. Es besteht aus zwei Teilen. Dem *HTTP* Formular, -wärend ``Zend\File\Transfer`` die hochgeladenen Dateien behandelt. Siehe das folgende Beispiel: - -.. _zend.file.transfer.introduction.example: - -.. rubric:: Einfaches Formular für File-Uploads - -Dieses Beispiel zeigt einen einfachen Dateiupload. Das erste Teil ist das Dateiformular. In unserem Beispiel gibt -es nur eine Datei welche wir hochladen wollen. - -.. code-block:: xml - :linenos: - -
- - Choose a file to upload: -
- -
- -Der Bequemlichkeit halber kann :ref:`Zend\Form\Element\File ` verwendet werden -statt das *HTML* manuell zu erstellen. - -Der nächste Schritt ist die Erstellung des Empfängers des Uploads. In unserem Beispiel ist der Empfänger bei -``/file/upload`` zu finden. Als nächstes erstellen wir also den 'file' Controller mit der ``upload()`` Aktion. - -.. code-block:: php - :linenos: - - $adapter = new Zend\File\Transfer\Adapter\Http(); - - $adapter->setDestination('C:\temp'); - - if (!$adapter->receive()) { - $messages = $adapter->getMessages(); - echo implode("\n", $messages); - } - -Dieses Codebeispiel demonstriert die einfachste Verwendung von ``Zend\File\Transfer``. Ein lokales Ziel wird mit -der ``setDestination()`` Methode definiert, und anschließend die ``receive()`` Methode aufgerufen. Wenn -irgendwelche Uploadfehler auftreten werden diese als Ausnahme zurückgegeben. - -.. note:: - - **Achtung** - - Dieses Beispiel ist nur für die Demonstration der grundsätzlichen *API* von ``Zend\File\Transfer``. Man sollte - dieses Code Beispiel **niemals** in einer Produktivumgebung einsetzen da es massive Sicherheitslücken - aufweisst. Man sollte immer Prüfungen verwenden um die Sicherheit zu erhöhen. - -.. _zend.file.transfer.introduction.adapters: - -Von Zend\File\Transfer unterstützte Adapter -------------------------------------------- - -``Zend\File\Transfer`` wurde designt um verschiedenste Adapter und auch Richtungen zu unterstützen. Mit -``Zend\File\Transfer`` kann man Dateien Hochladen, Herunterladen und sogar Weiterleiten (Hochladen mit einem -Adapter und Herunterladen mit einem anderen Adapter zur gleichen Zeit). - -.. _zend.file.transfer.introduction.options: - -Optionen für Zend\File\Transfer -------------------------------- - -``Zend\File\Transfer`` und seine Adapter unterstützen verschiedene Optionen. Alle Optionen können gesetzt werden -indem Sie entweder dem Constructor übergeben werden, oder durch Aufruf der ``setOptions($options)``. -``getOptions()`` gibt die Optionen zurück die aktuell gesetzt sind. Nachfolgend ist eine Liste aller -unterstützten Optionen: - -- **ignoreNoFile**: Wenn diese Option auf ``TRUE`` gesetzt ist, ignorieren alle Prüfer Dateien die nicht vom - Formular hochgeladen wurde. Der Standardwert ist ``FALSE``, was einen Fehler verursacht wenn die Datei nicht - spezifiziert wurde. - -.. _zend.file.transfer.introduction.checking: - -Dateien prüfen --------------- - -``Zend\File\Transfer`` hat verschiedene Methoden die auf verschiedenste Stati von spezifizierten Dateien prüfen. -Diese sind nützlich wenn man Dateien bearbeiten will nachdem Sie empfangen wurden. Diese Methoden beinhalten: - -- **isValid($files = null)**: Diese Methode prüft ob die angegebene Datei gültig ist, basierend auf den - Prüfungen welche dieser Datei angehängt sind. Wenn keine Dateien spezifiziert wurden, werden alle Dateien - geprüft. Man kann ``isValid()`` aufrufen bevor ``receive()`` aufgerufen wird; in diesem Fall ruft ``receive()`` - intern ``isValid()`` nicht mehr auf. - -- **isUploaded($files = null)**: Diese Methode prüft ob die spezifizierte Datei vom Benutzer hochgeladen wurde. - Das ist nützlich wenn man eine oder mehrere Dateien definiert hat. Wenn keine Dateien spezifiziert wurden, - werden alle Dateien geprüft. - -- **isReceived($files = null)**: Diese Methode prüft ob die spezifizierte Datei bereits empfangen wurde. Wenn - keine Dateien angegeben wurden, werden alle Dateien geprüft. - -.. _zend.file.transfer.introduction.checking.example: - -.. rubric:: Dateien prüfen - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Gibt alle bekannten internen Datei Informationen zurück - $files = $upload->getFileInfo(); - - foreach ($files as $file => $info) { - // Datei hochgeladen ? - if (!$upload->isUploaded($file)) { - print "Warum hast Du die Datei nicht hochgeladen ?"; - continue; - } - - // Prüfungen sind ok ? - if (!$upload->isValid($file)) { - print "Sorry, aber die Datei ist nicht das was wir wollten"; - continue; - } - } - - $upload->receive(); - -.. _zend.file.transfer.introduction.informations: - -Zusätzliche Dateiinformationen ------------------------------- - -``Zend\File\Transfer`` kann zusätzliche Informationen über Dateien zurückgeben. Die folgenden Methoden sind -vorhanden: - -- **getFileName($file = null, $path = true)**: Diese Methode gibt den wirklichen Namen der übertragenen Datei - zurück. - -- **getFileInfo($file = null)**: Diese Methode gibt die internen Informationen für die angegebene übertragene - Datei zurück. - -- **getFileSize($file = null)**: Diese Methode gibt die echte Dateigröße für die angegebene Datei zurück. - -- **getHash($hash = 'crc32', $files = null)**: Diese Methode gibt einen Hash des Inhalts einer angegebenen - übertragenen Datei zurück. - -- **getMimeType($files = null)**: Diese Methode gibt den Mimetyp der angegebenen übertragenen Datei zurück. - -``getFileName()`` akzeptiert den Namen des Elements als ersten Parameter. Wenn kein Name angegeben wird, werden -alle bekannten Dateinamen in einem Array zurückgegeben. Wenn die Datei eine MultiDatei ist, wird auch ein Array -zurückgegeben. Wenn nur eine einzelne Datei vorhanden ist wird nur ein String zurückgegeben. - -Standardmäßig werden Dateinamen mit dem kompletten Pfad zurückgegeben. Wenn man nur den Dateinamen ohne Pfad -benötigt, kann der zweite Parameter ``$path`` gesetzt werden, welcher den Dateinamen ausschneidet wenn er auf -``FALSE`` gesetzt wird. - -.. _zend.file.transfer.introduction.informations.example1: - -.. rubric:: Den Dateinamen bekommen - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - $upload->receive(); - - // Gibt die Dateinamen aller Dateien zurück - $names = $upload->getFileName(); - - // Gibt den Dateinamen des Formularelements 'foo' zurück - $names = $upload->getFileName('foo'); - -.. note:: - - Es ist zu beachten das sich der Dateinamen ändern kann nachdem die Datei empfangen wurde (receive) weil alle - Filter angewendet werden, sobald die Datei empfangen wurde. Deswegen sollte man ``getFileName()`` immer - ausführen nachdem die Dateien empfangen wurden. - -``getFileSize()`` gibt standardmäßig die echte Dateigröße in SI Schreibweise zurück was bedeutet das man -**2kB** statt **2048** erhält. Wenn man die reine Größe benötigt muß man die ``useByteString`` Option auf -``FALSE`` setzen. - -.. _zend.file.transfer.introduction.informations.example.getfilesize: - -.. rubric:: Die Größe einer Datei erhalten - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - $upload->receive(); - - // Gibt die Größen aller Dateien als Array zurück - // wenn mehr als eine Datei hochgeladen wurde - $size = $upload->getFileSize(); - - // Wechsle die SI Schreibweise damit reine Nummern zurückgegeben werden - $upload->setOption(array('useByteString' => false)); - $size = $upload->getFileSize(); - -.. note:: - - **Vom Client angegebene Dateigröße** - - Es ist zu beachten das die Dateigröße welche vom Client angegeben wird, nicht als sichere Eingabe angesehen - wird. Deswegen wird die echte Größe der Datei erkannt und statt der Dateigröße zurückgegeben welche vom - Client geschickt wurde. - -``getHash()`` akzeptiert den Namen eines Hash Algorithmus als ersten Parameter. Für eine Liste bekannter -Algorithmen kann in `PHP's hash_algos Methode`_ gesehen werden. Wenn kein Algorithmus spezifiziert wird, wird -**crc32** als Standardalgorithmus verwendet. - -.. _zend.file.transfer.introduction.informations.example2: - -.. rubric:: Den Hash einer Datei erhalten - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - $upload->receive(); - - // Gibt die Hashes von allen Dateien als Array zurück - // wenn mehr als eine Datei hochgeladen wurde - $hash = $upload->getHash('md5'); - - // Gibt den Has für das 'foo' Formularelement zurück - $names = $upload->getHash('crc32', 'foo'); - -.. note:: - - **Rückgabewert** - - Es ist zu beachten das der zurückgegebene Wert ein Array ist, wenn die Datei oder der Formularname mehr als - eine Datei enthält. - -``getMimeType()`` gibt den Mimetyp einer Datei zurück. Wenn mehr als eine Datei hochgeladen wurde wird ein Array -zurückgegeben, andernfalls ein String. - -.. _zend.file.transfer.introduction.informations.getmimetype: - -.. rubric:: Den Mimetyp einer Datei bekommen - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - $upload->receive(); - - $mime = $upload->getMimeType(); - - // Gibt den Mimetyp des 'foo' Form Elements zurück - $names = $upload->getMimeType('foo'); - -.. note:: - - **Vom Client angegebener MimeTyp** - - Es ist zu beachten das der MimeTyp welcher vom Client angegeben wird, nicht als sichere Eingabe betrachtet wird. - Deswegen wird der echte MimeTyp der Datei erkannt und statt dem Mimetyp welcher vom Client geschickt wird, - zurückgegeben. - -.. warning:: - - **Mögliche Exception** - - Beachte das diese Methode die fileinfo Erweiterung verwendet wenn Sie vorhanden ist. Wenn diese Erweiterung - nicht gefunden werden kann wird die mimemagic Erweiterung verwendet. Wenn keine Erweiterung gefunden wird dann - wird eine Exception geworfen. - -.. warning:: - - **Originale Daten in $_FILES** - - Aus Sicherheitsgründen werden auch die originalen Daten in $_FILES überschrieben sobald ``Zend\File\Transfer`` - initiiert wird. Wenn man dieses Verhalten unterdrücken will und die originalen Daten benötigt, kann bei der - Instanzierung die Option ``detectInfos`` einfach auf ``FALSE`` gesetzt werden. - - Diese Option hat keinen Effekt nachdem ``Zend\File\Transfer`` instanziert wurde. - -.. _zend.file.transfer.introduction.uploadprogress: - -Fortschritt für Datei Uploads ------------------------------ - -``Zend\File\Transfer`` kann den aktuellen Status eines gerade stattfindenden Datei Uploads erheben. Um dieses -Feature zu verwenden muß man entweder die *APC* Erweiterung verwenden, die mit den meisten standardmäßigen *PHP* -Installationen vorhanden ist, oder die ``UploadProgress`` Erweiterung. Beide Erweiterungen werden erkannt und -automatisch verwendet. Um den Fortschritt zu erhalten muß man einige Voraussetzungen erfüllen. - -Erstens, muß man entweder *APC* oder ``UploadProgress`` aktiviert haben. Es ist zu beachten das dieses Feature von -*APC* in der eigenen ``php.ini`` ausgeschaltet werden kann. - -Zweitens, muß man die richtigen unsichtbaren Felder im Formular hinzugefügt haben das die Dateien sendet. Wenn -man ``Zend\Form\Element\File`` verwendet werden diese unsichtbaren Felder automatisch von ``Zend_Form`` -hinzugefügt. - -Wenn die oberen zwei Punkte vorhanden sind dann ist man in der Lage den aktuellen Fortschritt des Datei uploads zu -erhalten indem man die ``getProgress()`` Methode verwendet. Aktuell gibt es 2 offizielle Wege um das hand zu haben. - -.. _zend.file.transfer.introduction.uploadprogress.progressadapter: - -Verwenden eines Progressbar Adapters -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann einen bequemen **Zend_ProgressBar** verwenden um den aktuellen Fortschritt zu erhalten und kann Ihn dann -auf einfachem Wege dem Benutzer zeigen. - -Um das zu ermöglichen, muß man den gewünschten **Zend\ProgressBar\Adapter** bei ``getProgress()`` hinzufügen -wenn es das erste Mal aufgerufen wird. Für Details über den zu verwendenden Adapter, bitte im Kapitel -:ref:`Zend_ProgressBar Standard Adapters ` nachsehen. - -.. _zend.file.transfer.introduction.uploadprogress.progressadapter.example1: - -.. rubric:: Verwenden eines Progressbar Adapters um den aktuellen Status zu erhalten - -.. code-block:: php - :linenos: - - $adapter = new Zend\ProgressBar\Adapter\Console(); - $upload = Zend\File\Transfer\Adapter\Http::getProgress($adapter); - - $upload = null; - while (!$upload['done']) { - $upload = Zend\File\Transfer\Adapter\Http:getProgress($upload); - } - -Die komplette Handhabung wird von ``getProgress()`` im Hintergrund durchgeführt. - -.. _zend.file.transfer.introduction.uploadprogress.manually: - -getProgress() händisch verwenden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann mit ``getProgress()`` auch händisch arbeiten, also ohne die Verwendung von ``Zend_ProgressBar``. - -``getProgress()`` muß ohne Einstellungen aufgerufen werden. Es gibt anschließend ein Array mit verschiedenen -Schlüssel zurück. Sie unterscheiden sich, abhängig von der verwendeten *PHP* Extension. Aber die folgenden -Schlüssel werden unabhängig von der Extension zurück gegeben: - -- **id**: Die ID dieses Uploads. Die ID identifiziert den Upload in der Extension. Man kann Sie auf den Wert des - versteckten Schlüssels setzen welcher den Upload identifiziert wenn ``getProgress()`` das erste Mal aufgerufen - wird. Standardmäßig ist er auf **progress_key** gesetzt. Man darf die ID nicht im Nachhinein ändern. - -- **total**: Die komplette Größe der Datei die hochgeladen wird in Bytes als Integer. - -- **current**: Die aktuelle hochgeladene Größe der Datei in Bytes als Integer. - -- **rate**: Die durchschnittliche Geschwindigkeit des Uploads in Bytes pro Sekunde als Integer. - -- **done**: Gibt ``TRUE`` zurück wenn der Upload abgeschlossen wurde, andernfalls ``FALSE``. - -- **message**: Die aktuelle Meldung. Entweder der Fortschritt als Text in der Form **10kB / 200kB**, oder eine - hilfreiche Nachricht im Fall eines Problems. Probleme könnten sein, das kein Upload durchgeführt wird, das ein - Fehler wärend des Empfangens der Daten, für den Fortschritt, aufgetreten ist, oder das der Upload abgebrochen - wurde. - -- **progress**: Dieser optionale Schlüssel nimmt eine Instanz von ``Zend\ProgressBar\Adapter`` oder - ``Zend_ProgressBar``, und erlaubt es, den aktuellen Status des Uploads, in einer Progressbar zu erhalten - -- **session**: Dieser optionale Schlüssel nimmt den Namen eines Session Namespaces entgegen der in - ``Zend_ProgressBar`` verwendet wird. Wenn dieser Schlüssel nicht angegeben wird, ist er standardmäßig - ``Zend\File\Transfer\Adapter\Http\ProgressBar``. - -Alle anderen zurückgegebenen Schlüssel werden direkt von den Extensions übernommen und werden nicht geprüft. - -Das folgende Beispiel zeigt eine mögliche händische Verwendung: - -.. _zend.file.transfer.introduction.uploadprogress.manually.example1: - -.. rubric:: Händische Verwendung des Datei Fortschritts - -.. code-block:: php - :linenos: - - $upload = Zend\File\Transfer\Adapter\Http::getProgress(); - - while (!$upload['done']) { - $upload = Zend\File\Transfer\Adapter\Http:getProgress($upload); - print "\nAktueller Fortschritt:".$upload['message']; - // Tu was zu tun ist - } - -.. note:: - - **Die Datei kennen von welcher der Fortschritt kommen soll** - - Das obige Beispiel funktioniert wenn der identifizierte Upload auf 'progress_key' gesetzt wurde. Wenn man einen - anderen Identifikator im Formular verwendet muss man den verwendeten Identifikator als ersten Parameter an - ``getProgress()`` bei initialen Aufruf übergeben. - - - -.. _`PHP's hash_algos Methode`: http://php.net/hash_algos diff --git a/docs/languages/de/modules/zend.file.transfer.validators.rst b/docs/languages/de/modules/zend.file.transfer.validators.rst deleted file mode 100644 index 730a3e074..000000000 --- a/docs/languages/de/modules/zend.file.transfer.validators.rst +++ /dev/null @@ -1,937 +0,0 @@ -.. EN-Revision: none -.. _zend.file.transfer.validators: - -Prüfungen für Zend\File\Transfer -================================ - -``Zend\File\Transfer`` wird mit verschiedenen Datei-relevanten Prüfungen ausgeliefert welche verwendet werden -können um die Sicherheit zu erhöhen und mögliche Attacken zu verhindern. Es ist zu beachten das diese Prüfungen -nur so effektiv sind wie Sie effektiv angewendet verwendet. Alle Prüfungen die mit ``Zend\File\Transfer`` -angeboten werden können in der ``Zend_Validator`` Komponente gefunden werden und heißen ``Zend\Validate\File\*``. -Die folgenden Prüfungen sind vorhanden: - -- ``Count``: Diese Prüfung checkt die Anzahl der Dateien. Es kann ein Minimum und ein Maximum spezifiziert werden. - Ein Fehler wird geworfen wenn einer der zwei Werte überschritten wird. - -- ``Crc32``: Diese Prüfung checkt den Crc32 Hashwert vom Inhalt einer Datei. Sie basiert auf der ``Hash`` Prüfung - und bietet eine bequeme und einfache Prüfung die nur Crc32 unterstützt. - -- ``ExcludeExtension``: Diese Prüfung checkt die Dateierweiterung. Sie wirft einen Fehler wenn die angegebene - Datei eine definierte Erweiterung hat. Mit dieser Prüfung können definierte Erweiterungen von der Prüfung - ausgenommen werden. - -- ``ExcludeMimeType``: Diese Prüfung prüft den *MIME* Typ von Dateien. Sie kann auch Arten von *MIME* Typen - prüfen und wirft einen Fehler wenn der *MIME* Typ einer spezifizierten Datei passt. - -- ``Exists``: Diese Prüfung checkt ob Dateien existieren. Sie wirft einen Fehler wenn eine spezifizierte Datei - nicht existiert. - -- ``Extension``: Diese Prüfung checkt die Dateierweiterung. Sie wirft einen Fehler wenn eine spezifizierte Datei - eine undefinierte Erweiterung hat. - -- ``FilesSize``: Diese Prüfung checkt die Größe von geprüften Dateien. Sie merkt sich intern die Größe aller - geprüften Dateien und wirft einen Fehler wenn die Summe aller spezifizierten Dateien die definierte Größe - überschreitet. Sie bietet auch Mindest- und Maximalwerte an. - -- ``ImageSize``: Diese Prüfung checkt die Größe von Bildern. Sie prüft die Breite und Höhe und erzwingt sowohl - eine Mindest- als auch eine Maximalgröße. - -- ``IsCompressed``: Diese Prüfung checkt ob die Datei komprimiert ist. Sie basiert auf der ``MimeType`` Prüfung - und validiert Komprimierungsarchiven wie Zip oder Arc. Sie kann auch auf andere Archive begrenzt werden. - -- ``IsImage``: Diese Prüfung checkt ob die Datei ein Bild ist. Sie basiert auf der ``MimeType`` Prüfung und - validiert Bilddateien wie Jpg oder Gif. Sie kann auch auf andere Bildtypen begrenzt werden. - -- ``Hash``: Diese Prüfung check den Hashwert des Inhalts einer Datei. Sie unterstützt mehrere Algorithmen. - -- ``Md5``: Diese Prüfung checkt den Md5 Hashwert vom Inhalt einer Datei. Sie basiert auf der *Hash* Prüfung und - bietet eine bequeme und einfache Prüfung die nur Md5 unterstützt. - -- ``MimeType``: Diese Prüfung prüft den *MIME* Typ von Dateien. Sie kann auch Arten von *MIME* Typen prüfen und - wirft einen Fehler wenn der *MIME* Typ einer spezifizierten Datei nicht passt. - -- ``NotExists``: Diese Prüfung checkt ob Dateien existieren. Sie wirft einen Fehler wenn eine angegebene Datei - existiert. - -- ``Sha1``: Diese Prüfung checkt den Sha1 Hashwert vom Inhalt einer Datei. Sie basiert auf der ``Hash`` Prüfung - und bietet eine bequeme und einfache Prüfung die nur Sha1 unterstützt. - -- ``Size``: Diese Prüfung ist fähig Dateien auf Ihre Dateigröße zu prüfen. Sie bietet eine Mindest- und eine - Maximalgröße an und wirft einen Fehler wenn eine der beiden Grenzen überschritten wird. - -- ``Upload``: Diese Prüfung ist eine interne. Sie prüft ob ein Upload zu einem Fehler geführt hat. Dieser darf - nicht gesetzt werden, da er automatisch durch ``Zend\File\Transfer`` selbst gesetzt wird. Deshalb darf diese - Prüfung nicht direkt verwendet werden. Man sollte nur wissen das Sie existiert. - -- ``WordCount``: Diese Prüfung ist fähig die Anzahl von Wörtern in Dateien zu prüfen. Sie bietet eine Mindest- - und Maximalanzahl und wirft einen Fehler wenn eine der Grenzen überschritten wird. - -.. _zend.file.transfer.validators.usage: - -Prüfungen mit Zend\File\Transfer verwenden ------------------------------------------- - -Prüfungen einzubinden ist sehr einfach. Es gibt verschiedene Methoden für das Hinzufügen und Manipulieren von -Prüfungen: - -- ``isValid($files = null)``: Prüft die spezifizierten Dateien indem alle Prüfungen verwendet werden. ``$files`` - kann entweder ein richtiger Dateiname, der Name des Elements, oder der Name der temporären Datei sein. - -- ``addValidator($validator, $breakChainOnFailure, $options = null, $files = null)``: Fügt die spezifizierte - Prüfung zu den Prüfungsstapel hinzu (optional nur zu den Datei(en) die spezifiziert wurden). ``$validator`` - kann entweder eine aktuelle Prüfinstanz sein oder ein Kurzname der den Prüfungstyp spezifiziert (z.B. 'Count'). - -- ``addValidators(array $validators, $files = null)``: Fügt die spezifizierten Prüfungen zum Prüfungsstapel - hinzu. Jeder Eintrag kann entweder ein Prüfungstyp/-options Paar sein oder ein Array mit dem Schlüssel - 'validator' das die Prüfung spezifiziert. Alle anderen Optionen werden als Optionen für die Instanzierung der - Prüfung angenommen. - -- ``setValidators(array $validators, $files = null)``: Überschreibt alle bestehenden Prüfungen mit den - spezifizierten Prüfungen. Die Prüfungen sollten der Syntax folgen die für ``addValidators()`` definiert ist. - -- ``hasValidator($name)``: Zeigt ob eine Prüfung registriert wurde. - -- ``getValidator($name)``: Gibt eine vorher registrierte Prüfung zurück. - -- ``getValidators($files = null)``: Gibt registrierte Prüfungen zurück. Wenn ``$files`` spezifiziert wurde, - werden die Prüfungen für die betreffende Datei oder das Set an Dateien zurückgegeben. - -- ``removeValidator($name)``: Entfernt eine vorher registrierte Prüfung. - -- ``clearValidators()``: Löscht alle registrierten Prüfungen. - -.. _zend.file.transfer.validators.usage.example: - -.. rubric:: Prüfungen zu einem File Transfer Objekt hinzufügen - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Setzt eine Dateigröße von 20000 Bytes - $upload->addValidator('Size', false, 20000); - - // Setzt eine Dateigröße von mindestens 20 Bytes und maximal 20000 Bytes - $upload->addValidator('Size', false, array('min' => 20, 'max' => 20000)); - - // Setzt eine Dateigröße von mindestens 20 Bytes und Maximal - // 20000 Bytes und eine Dateianzahl in einem Schritt - $upload->setValidators(array( - 'Size' => array('min' => 20, 'max' => 20000), - 'Count' => array('min' => 1, 'max' => 3), - )); - -.. _zend.file.transfer.validators.usage.exampletwo: - -.. rubric:: Prüfungen auf eine einzelne Datei limitieren - -``addValidator()``, ``addValidators()``, und ``setValidators()`` akzeptieren ein endendes Argument ``$files``. -Dieses Argument kann verwendet werden um eine Datei oder ein Array von Dateien zu spezifizieren auf dem die -angegebene Prüfung gesetzt werden soll. - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Setzt die Dateigröße auf 20000 Bytes und limitiert Sie nur auf 'file2' - $upload->addValidator('Size', false, 20000, 'file2'); - -Normal sollte die ``addValidators()`` Methode verwendet werden, welche mehrmals aufgerufen werden kann. - -.. _zend.file.transfer.validators.usage.examplemultiple: - -.. rubric:: Mehrere Prüfungen hinzufügen - -Oft ist es einfacher ``addValidator()`` mehrere Male aufzurufen mit einem Aufruf für jede Prüfung. Das erhöht -auch die Lesbarkeit und macht den Code wartbarer. Alle Methoden implementieren das Fluent-Interface, deshalb -können Aufrufe einfach wie anbei gezeigt gekoppelt werden: - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Setzt die Dateigröße auf 20000 Bytes - $upload->addValidator('Size', false, 20000) - ->addValidator('Count', false, 2) - ->addValidator('Filessize', false, 25000); - -.. note:: - - Es ist zu beachten, dass das mehrfache Setzen der gleichen Prüfung erlaubt ist, dass das aber zu Problemen - führen kann wenn verschiedene Optionen für die gleiche Prüfung verwendet werden. - -Letztendlich können Dateien einfach geprüft werden indem ``isValid()`` verwendet wird. - -.. _zend.file.transfer.validators.usage.exampleisvalid: - -.. rubric:: Prüfen der Dateien - -``isValid()`` akzeptiert den Dateinamen der hochgeladenen oder heruntergeladenen Datei, den temporären Dateinamen -oder den Namen des Formularelements. Wenn kein Parameter oder null angegeben wird, werden alle gefundenen Dateien -geprüft. - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Setzt die Dateigröße auf 20000 Bytes - $upload->addValidator('Size', false, 20000) - ->addValidator('Count', false, 2) - ->addValidator('Filessize', false, 25000); - - if (!$upload->isValid()) { - print "Prüfung fehlgeschlagen"; - } - -.. note:: - - Es ist zu beachten das ``isValid()`` automatisch aufgerufen wird, wenn die Dateien empfangen werden und es zuvor - noch nicht aufgerufen wurde. - -Wenn Prüfungen fehlgeschlagen sind, ist es eine gute Idee Informationen über die gefundenen Probleme zu erhalten. -Um diese Information zu erhalten können die Methoden ``getMessages()``, welche alle Prüfmeldungen als Array -zurückgibt, ``getErrors()`` welche alle Fehlercodes zurückgibt, und ``hasErrors()`` welche ``TRUE`` zurückgibt -sobald ein Prüffehler gefunden wurde, verwendet werden. - -.. _zend.file.transfer.validators.count: - -Count Prüfung -------------- - -Die ``Count`` Prüfung checkt die Anzahl der Dateien die angegeben wurde. Sie unterstützt die folgenden Schlüssel -für Optionen: - -- ``min``: Setzt die minimale Anzahl der Dateien die übertragen wird. - - .. note:: - - Wenn diese Option verwendet wird, muß die minimale Anzahl an Dateien übergeben werden wenn die Prüfung das - erste Mal aufgerufen wird; sonst wird ein Fehler zurückgegeben. - - Mit dieser Option kann die Mindestanzahl an Dateien definiert werden die man Empfangen sollte. - -- ``max``: Setzt die maximale Anzahl an Dateien die übertragen wird. - - Mit dieser Option kann die Anzahl der Dateien limitiert werden die man akzeptiert, aber genauso eine mögliche - Attacke erkennen wenn mehr Dateien übertragen werden als im Formular definiert wurden. - -Wenn diese Prüfung mit einem String oder Integer initiiert wird, wird Sie als ``max`` verwendet. Es können aber -auch die Methoden ``setMin()`` und ``setMax()`` verwendet werden um beide Optionen im Nachhinein zu setzen und -``getMin()`` und ``getMax()`` um die aktuell gesetzten Werte zu erhalten. - -.. _zend.file.transfer.validators.count.example: - -.. rubric:: Die Count Prüfung verwenden - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Die Anzahl der Dateien auf maximal 2 limitieren - $upload->addValidator('Count', false, 2); - - // Die Anzahl der Dateien auf maximal 5 und mindestens 1 Datei limitieren - $upload->addValidator('Count', false, array('min' =>1, 'max' => 5)); - -.. note:: - - Beachte das diese Prüfung die Anzahl der geprüften Dateien intern speichert. Die Datei welche das Maximum - überschrietet wird als Fehler zurückgegeben. - -.. _zend.file.transfer.validators.crc32: - -Crc32 Prüfung -------------- - -Die ``Crc32`` Prüfung checkt den Inhalt einer übertragenen Datei durch hashen. Diese Prüfung verwendet die Hash -Erweiterung von *PHP* mit dem Crc32 Algorithmus. Sie unterstützt die folgenden Optionen: - -- ``*``: Setzt einen beliebigen Schlüssel oder ein nummerisches Array. Dieser Wert wird als Hash verwendet gegen - den geprüft wird. - - Man kann mehrere Hashes setzen indem unterschiedliche Schlüssel angegeben werden. Jeder von Ihnen wird geprüft - und die Prüfung schlägt nur fehl wenn alle Werte fehlschlagen. - -.. _zend.file.transfer.validators.crc32.example: - -.. rubric:: Verwenden der Crc32 Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Prüft ob der Inhalt der hochgeladenen Datei den angegebenen Hash hat - $upload->addValidator('Hash', false, '3b3652f'); - - // Begrenzt diese Prüfung auf zwei unterschiedliche Hashes - $upload->addValidator('Crc32', false, array('3b3652f', 'e612b69')); - -.. _zend.file.transfer.validators.excludeextension: - -ExcludeExtension Prüfung ------------------------- - -Die ``ExcludeExtension`` Prüfung checkt die Dateierweiterung der angegebenen Dateien. Sie unterstützt die -folgenden Optionen: - -- ``*``: Setzt einen beliebigen Schlüssel oder ein nummerisches Array. Dieser Wert wird verwendet um zu prüfen ob - die angegebene Datei diese Dateierweiterung nicht verwendet. - -- ``case``: Setzt ein Boolean der anzeigt ob die Prüfung auf die Klein/Großschreibung achten soll. - Standardmäßig ist die Klein/Großschreibung egal. Beachte das dieser Schlüssel für alle vorhandenen - Erweiterungen angewendet werden kann. - -Dieser Prüfer akzeptiert mehrere Erweiterungen entweder als komma-getrennten String, oder als ein Array. Man kann -auch die ``setExtension()``, ``addExtension()`` und ``getExtension()`` Methoden verwenden um Erweiterungen zu -setzen und zu erhalten. - -In einigen Fällen ist es nützlich auch auf Klein/Großschreibung zu testen. Deshalb erlaubt der Constructor einen -zweiten Parameter ``$case`` der, wenn er auf ``TRUE`` gesetzt wird, die Erweiterungen abhängig von der Klein- oder -Großschreibung prüft. - -.. _zend.file.transfer.validators.excludeextension.example: - -.. rubric:: Die ExcludeExtension Prüfung verwenden - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Dateien mit der Erweiterung php oder exe nicht erlauben - $upload->addValidator('ExcludeExtension', false, 'php,exe'); - - // Dateien mit der Erweiterung php oder exe nicht erlauben - // aber die Array Schreibweise verwenden - $upload->addValidator('ExcludeExtension', false, array('php', 'exe')); - - // Prüft abhängig von der Groß-/Kleinschreibung - $upload->addValidator('ExcludeExtension', - false, - array('php', 'exe', 'case' => true)); - -.. note:: - - Es ist zu beachten das diese Prüfung nur die Dateierweiterung prüft. Sie prüft nicht den *MIME* Typ der - Datei. - -.. _zend.file.transfer.validators.excludemimetype: - -ExcludeMimeType Prüfung ------------------------ - -Die ``ExcludeMimeType`` Prüfung checkt den *MIME* Typ von übertragenen Dateien. Sie unterstützt die folgenden -Optionen: - -- ``*``: Setzt einen beliebigen Schlüssel oder ein nummerisches Array. Setzt den *MIME* Typ gegen den geprüft - werden soll. - - Mit dieser Option kann der *MIME* Typ von Dateien definiert werden die nicht akzeptiert werden. - -- ``headerCheck``: Wenn diese Option auf ``TRUE`` gesetzt wird, dann werden die *HTTP* Informationen für den - Dateityp geprüft wenn die **fileInfo** oder **mimeMagic** Erweiterungen nicht gefunden werden können. Der - Standardwert dieser Option ist ``FALSE``. - -Diese Prüfung akzeptiert viele *MIME* Typ entweder als Komma-getrennter String, oder als Array. Man kan auch die -Methoden ``setMimeType()``, ``addMimeType()``, und ``getMimeType()`` verwenden um *MIME* Typen zu setzen und zu -erhalten. - -.. _zend.file.transfer.validators.excludemimetype.example: - -.. rubric:: Verwendung der ExcludeMimeType Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Verweigert den MIME Typ gif für alle gegebenen Dateien - $upload->addValidator('ExcludeMimeType', 'image/gif'); - - // Verweigert den MIME Typ gif und jpeg für alle gegebenen Dateien - $upload->setValidator('ExcludeMimeType', array('image/gif', - 'image/jpeg'); - - // Verweigert die MIME Typ Gruppe image für alle Dateien - $upload->setValidator('ExcludeMimeType', 'image'); - -Das obige Beispiel zeigt das es auch möglich ist Gruppen von *MIME* Typen zu verweigern. Um, zum Beispiel, alle -Bilder zu verweigern, muß nur 'image' als *MIME* Typ verwendet werden. Das kann für alle Gruppen von *MIME* Typen -wie 'image', 'audio', 'video', 'test', und so weiter verwendet werden. - -.. note:: - - Es ist zu beachten das bei Verwendung von *MIME* Typ-Gruppen alle Mitglieder dieser Gruppe verweigert werden, - selbst wenn das nicht gewünscht ist. Wenn man 'image' verweigert, werden alle Typen von Bildern verweigert wie - 'image/jpeg' oder 'image/vasa'. Wenn man nicht sicher ist ob man alle Typen verweigern will sollte man nur - definierte *MIME* Typen zu verweigern statt der kompletten Gruppe. - -.. _zend.file.transfer.validators.exists: - -Exists Prüfung --------------- - -Die ``Exists`` Prüfung checkt ob Dateien die spezifiziert werden existieren. Sie unterstützt die folgenden -Optionen: - -- ``*``: Setzt einen beliebigen Schlüssel oder ein nummerisches Array um zu prüfen ob die spezifizierte Datei im - gegebenen Verzeichnis existiert. - -Diese Prüfung akzeptiert mehrere Verzeichnisse, entweder als Komma-getrennter String, oder als Array. Es können -aber auch die Methoden ``setDirectory()``, ``addDirectory()``, und ``getDirectory()`` verwendet werden um die -Verzeichnisse zu setzen und zu erhalten. - -.. _zend.file.transfer.validators.exists.example: - -.. rubric:: Die Exists Prüfung verwenden - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Das temporäre Verzeichnis für die Prüfung hinzufügen - $upload->addValidator('Exists', false, '\temp'); - - // Zwei Verzeichnisse hinzufügen indem die Array Schreibweise verwendet wird - $upload->addValidator('Exists', - false, - array('\home\images', '\home\uploads')); - -.. note:: - - Beachte das diese Prüfung checkt ob die spezifizierte Datei in allen angegebenen Verzeichnissen existiert. Die - Prüfung schlägt fehl, wenn die Datei in irgendeinem der angegebenen Verzeichnisse nicht existiert. - -.. _zend.file.transfer.validators.extension: - -Extension Prüfung ------------------ - -Die ``Extension`` Prüfung checkt die Dateierweiterung der angegebenen Dateien. Sie unterstützt die folgenden -Optionen: - -- ``*``: Setzt einen beliebigen Schlüssel oder ein nummerisches Array um zu prüfen ob die angegebene Datei diese - Dateierweiterung verwendet. - -- ``case``: Definiert of die Prüfung auf die Klein/Großschreibung achten soll. Standardmäßig ist die - Klein/Großschreibung egal. Es ist zu beachten das dieser Schlüssel für alle verwendeten Erweiterungen - angegeben wird. - -Dieser Prüfer akzeptiert mehrere Erweiterungen entweder als komma-getrennten String, oder als ein Array. Man kann -auch die ``setExtension()``, ``addExtension()`` und ``getExtension()`` Methoden verwenden um Erweiterungs Werte zu -setzen und zu erhalten. - -In einigen Fällen ist es nützlich auch auf Klein/Großschreibung zu testen. Hierfür nimmt der Constructor einen -zweiten Parameter ``$case`` der, wenn er auf ``TRUE`` gesetzt wird, die Erweiterungen abhängig von der Klein- oder -Großschreibung prüft. - -.. _zend.file.transfer.validators.extension.example: - -.. rubric:: Verwendung der Extension Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Limitiert die Erweiterungen auf jpg und png Dateien - $upload->addValidator('Extension', false, 'jpg,png'); - - // Limitiert die Erweiterungen auf jpg und png Dateien, - // verwendet aber die Array Schreibweise - $upload->addValidator('Extension', false, array('jpg', 'png')); - - // Abhängig von der Klein/Großschreibung prüfen - $upload->addValidator('Extension', false, array('mo', 'png', 'case' => true)); - if (!$upload->isValid('C:\temp\myfile.MO')) { - print 'Nicht gültig da MO und mo Kleinschreibungsmäßig nicht passen'; - } - -.. note:: - - Es ist zu beachten das diese Prüfung nur die Dateierweiterung prüft. Sie prüft nicht den *MIME* Typ der - Datei. - -.. _zend.file.transfer.validators.filessize: - -FilesSize Prüfung ------------------ - -Die ``FilesSize`` Prüfung checkt die komplette Größe aller übertragenen Dateien. Sie unterstützt die folgenden -Optionen: - -- ``min``: Setzt die minimale gemeinsame Dateigröße. Diese Option definiert die mindeste gemeinsame Größe die - übertragen werden soll. - -- ``max``: Setzt die maximale gemeinsame Dateigröße. - - Diese Option begrenzt die gemeinsame Dateigröße aller Dateien die übertragen werden, aber nicht die - Dateigröße von einzelnen Dateien. - -- ``bytestring``: Definiert ob im Fehlerfall eine benutzerfreundliche Nummer, oder die reine Dateigröße - zurückgegeben wird. - - Diese Option definiert ob der Benutzer '10864' oder '10MB' sieht. Der Standardwert ist ``TRUE`` weshalb '10MB' - zurückgegeben wird wenn nicht anders angegeben. - -Diese Prüfung kann auch mit einem String initiiert werden, der dann verwendet wird um die ``max`` Option zu -setzen. Man kann auch die Methoden ``setMin()`` und ``setMax()`` verwenden um beide Optionen nach den Contrucor zu -setzen, zusammen mit ``getMin()`` und ``getMax()`` um die Werte zu erhalten die vorher gesetzt wurden. - -Die Größe selbst wird auch in der SI Schreibweise akzeptiert wie Sie die meisten Betriebsystemen verwenden. Statt -**20000 bytes** kann auch **20kB** angeben werden. Alle Einheiten werden mit dem Basiswert 1024 konvertiert. Die -folgenden Einheiten werden akzeptiert: **kB**, **MB**, **GB**, **TB**, **PB** und **EB**. Beachte das 1kB gleich -1024 Bytes ist, 1MB gleich 1024kB, und so weiter. - -.. _zend.file.transfer.validators.filessize.example: - -.. rubric:: Verwenden der FilesSize Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Limitiert die Größe aller Dateien die hochgeladen werden auf 40000 Bytes - $upload->addValidator('FilesSize', false, 40000); - - // Limitiert die Größe aller Dateien die hochgeladen - // werden auf maximal 4MB und minimal 10kB - $upload->addValidator('FilesSize', - false, - array('min' => '10kB', 'max' => '4MB')); - - // Wie zuvor, gibt aber die reine Dateigröße - // statt einem benutzerfreundlichen String zurück - $upload->addValidator('FilesSize', - false, - array('min' => '10kB', - 'max' => '4MB', - 'bytestring' => false)); - -.. note:: - - Beachte das diese Prüfung intern die Dateigrößen der geprüften Dateien intern speichert. Die Datei welche - die Größe überschreitet wird als Fehler zurückgegeben. - -.. _zend.file.transfer.validators.imagesize: - -ImageSize Prüfung ------------------ - -Die ``ImageSize`` Prüfung checkt die Größe von Bildern. Sie unterstützt die folgenden Optionen: - -- ``minheight``: Setzt die mindeste Höhe des Bildes. - -- ``maxheight``: Settzt die maximale Höhe des Bildes. - -- ``minwidth``: Setzt die mindeste Breite des Bildes. - -- ``maxwidth``: Setzt die maximale Breite des Bildes. - -Die Methoden ``setImageMin()`` und ``setImageMax()`` setzen auch beide Minimal- und Maximalwerte im Nachhinein, -wärend die ``getMin()`` und ``getMax()`` Methoden die aktuell gesetzten Werte zurückgeben. - -Der Bequemlichkeit halber gibt es auch eine ``setImageWidth()`` und ``setImageHeight()`` Methode welche die -Mindest- und Maximalhöhe und -Breite der Bilddatei setzen. Sie haben auch passende ``getImageWidth()`` und -``getImageHeight()`` Methoden um die aktuell gesetzten Werte zu erhalten. - -Um die Prüfung einer betreffenden Dimension zu gestatten, muß die relevante Option einfach nicht gesetzt werden. - -.. _zend.file.transfer.validators.imagesize.example: - -.. rubric:: Verwendung der ImageSize Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Begrenzt die Größe eines Bildes auf eine Höhe von 100-200 - // und eine Breite von 40-80 Pixel - $upload->addValidator('ImageSize', false, - array('minwidth' => 40, - 'maxwidth' => 80, - 'minheight' => 100, - 'maxheight' => 200 - ); - - // Setzt die Breite der Prüfung zurück - $upload->setImageWidth(array('minwidth' => 20, 'maxwidth' => 200)); - -.. _zend.file.transfer.validators.iscompressed: - -IsCompressed Prüfung --------------------- - -Die ``IsCompressed`` Prüfung checkt ob eine übertragene Datei komprimiert ist wie zum Beispiel Zip oder Arc. -Diese Prüfung basiert auf der ``MimeType`` Prüfung und unterstützt die gleichen Methoden und Optionen. Diese -Prüfung kann mit den dort beschriebenen Methoden auf gewünschte Komprimierungstypen limitiert werden. - -.. _zend.file.transfer.validators.iscompressed.example: - -.. rubric:: Verwenden der IsCompressed Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Checkt ob die hochgeladene Datei komprimiert ist - $upload->addValidator('IsCompressed', false); - - // Limitiert diese Prüfung auf Zip Dateien - $upload->addValidator('IsCompressed', false, array('application/zip')); - - // Limitiert diese Prüfung auf Zip Dateien, - // und verwendet eine einfachere Schreibweise - $upload->addValidator('IsCompressed', false, 'zip'); - -.. note:: - - Es ist zu beachten das nicht geprüft wird ob ein gesetzter *MIME* Typ ein Komprimierungstyp ist oder nicht. Man - könnte zum Beispiel definieren das Gif Dateien von dieser Prüfung akzeptiert werden. Die Verwendung der - 'MimeType' Prüfung für Dateien welche nicht archiviert sind, führt zu besser lesbarem Code. - -.. _zend.file.transfer.validators.isimage: - -IsImage Prüfung ---------------- - -Die ``IsImage`` Prüfung checkt ob eine übertragene Datei eine Bilddatei ist, wie zum Beispiel Gif oder Jpeg. -Diese Prüfung basiert auf der ``MimeType`` Prüfung und unterstützt die gleichen Methoden und Optionen. Diese -Prüfung kann mit den dort beschriebenen Methoden auf gewünschte Bildarten limitiert werden. - -.. _zend.file.transfer.validators.isimage.example: - -.. rubric:: Verwenden der IsImage Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Checkt ob die hochgeladene Datei ein Bild ist - $upload->addValidator('IsImage', false); - - // Limitiert diese Prüfung auf Gif Dateien - $upload->addValidator('IsImage', false, array('application/gif')); - - // Limitiert diese Prüfung auf Jpeg Dateien, - // verwendet eine einfachere Schreibweise - $upload->addValidator('IsImage', false, 'jpeg'); - -.. note:: - - Es ist zu beachten das nicht geprüft wird ob ein gesetzter *MIME* Typ kein Bild ist. Es ist zum Beispiel - möglich, Zip Dateien von dieser Prüfung akzeptieren zu lassen. Die Verwendung der 'MimeType' Prüfung für - Dateien welche keine Bilder sind, führt zu besser lesbarem Code. - -.. _zend.file.transfer.validators.hash: - -Hash Prüfung ------------- - -Die ``Hash`` Prüfung checkt den Inhalt einer übertragenen Datei indem Sie gehasht wird. Diese Prüfung verwendet -die Hash Erweiterung von *PHP*. Sie unterstützt die folgenden Optionen: - -- ``*``: Nimmt einen beliebigen Schlüssel oder ein nummerisches Array. Setzt den Hash gegen den geprüft werden - soll. - - Man kann mehrere Hashes setzen indem Sie als Array angegeben werden. Jede Datei wird geprüft, und die Prüfung - wird nur fehlschlagen wenn alle Dateien die Prüfung nicht bestehen. - -- ``algorithm``: Setzt den Algorithmus der für das Hashen des Inhalts verwendet wird. - - Man kann mehrere Algorithmen setzen indem die ``addHash()`` Methode mehrere Male aufgerufen wird. - -.. _zend.file.transfer.validators.hash.example: - -.. rubric:: Verwenden der Hash Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Prüft ob der Inhalt der hochgeladenen Datei den angegebenen Hash enthält - $upload->addValidator('Hash', false, '3b3652f'); - - // Begrenzt diese Prüfung auf zwei unterschiedliche Hashes - $upload->addValidator('Hash', false, array('3b3652f', 'e612b69')); - - // Setzt einen anderen Algorithmus gegen den geprüft wird - $upload->addValidator('Hash', - false, - array('315b3cd8273d44912a7', - 'algorithm' => 'md5')); - -.. note:: - - Diese Prüfung unterstützt über 34 verschiedene Hash Algorithmen. Die bekanntesten sind 'crc32', 'md5' und - 'sha1'. Eine gesammelte Liste aller unterstützten Hash Algorithmen kann in PHP's `hash_algos Methode`_ auf der - `php.net Seite`_ gefunden werden. - -.. _zend.file.transfer.validators.md5: - -Md5 Prüfung ------------ - -Die ``Md5`` Prüfung checkt den Inhalt einer übertragenen Datei durch hashen. Diese Prüfung verwendet die Hash -Erweiterung von *PHP* mit dem Md5 Algorithmus. Sie unterstützt die folgenden Optionen: - -- ``*``: nimmt einen beliebigen Schlüssel oder ein nummerisches Array. - - Man kann mehrere Hashes setzen indem Sie als Array übergeben werden. Jede Datei wird geprüft und die Prüfung - schlägt nur dann fehl wenn die Prüfung alle Dateien fehlschlägt. - -.. _zend.file.transfer.validators.md5.example: - -.. rubric:: Verwenden der Md5 Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Prüft ob der Inhalt der hochgeladenen Datei den angegebenen Hash hat - $upload->addValidator('Md5', false, '3b3652f336522365223'); - - // Begrenzt diese Prüfung auf zwei unterschiedliche Hashes - $upload->addValidator('Md5', - false, - array('3b3652f336522365223', - 'eb3365f3365ddc65365')); - -.. _zend.file.transfer.validators.mimetype: - -MimeType Prüfung ----------------- - -Die ``MimeType`` Prüfung checkt den *MIME* Typ von übertragenen Dateien. Sie unterstützt die folgenden Optionen: - -- ``*``: Setzt einen beliebigen Schlüssel oder ein nummerisches Array. Setzt die Art des *MIME* Typs der geprüft - werden soll. - - Definiert den *MIME* Typ von Dateien die akzeptiert werden soll. - -- ``headerCheck``: Wenn diese Option auf ``TRUE`` gesetzt wird, dann werden die *HTTP* Informationen für den - Dateityp geprüft wenn die **fileInfo** oder **mimeMagic** Erweiterungen nicht gefunden werden können. Der - Standardwert dieser Option ist ``FALSE``. - -- ``magicfile``: Das Magicfile das verwendet werden soll. - - Mit dieser Option kann definiert werden welches Magicfile zu verwenden ist. Wenn es nicht gesetzt wird, oder leer - ist, wird stattdessen die MAGIC Konstante verwendet. Diese Option ist seit dem Zend Framework 1.7.1 vorhanden. - -Diese Prüfung akzeptiert viele *MIME* Typen entweder als Komma-getrennter String, oder als Array. Man kan auch die -Methoden ``setMimeType()``, ``addMimeType()``, und ``getMimeType()`` verwenden um *MIME* Typen zu setzen und zu -erhalten. - -Man kann mit der 'magicfile' Option auch die Magicdatei setzen die von Fileinfo verwendet werden soll. Zusätzlich -gibt es die komfortablen ``setMagicFile()`` und ``getMagicFile()`` Methoden die das spätere Setzen und Empfangen -des Magicfile Parameters erlauben. Diese Methoden sind seit dem Zend Framework 1.7.1 vorhanden. - -.. _zend.file.transfer.validators.mimetype.example: - -.. rubric:: Verwendung der MimeType Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Begrenzt den MIME Typ aller gegebenen Dateien auf Gif Bilder - $upload->addValidator('MimeType', 'image/gif'); - - // Begrenzt den MIME Typ alle gegebenen Dateien auf Gif und Jpeg Dateien - $upload->addValidator('MimeType', array('image/gif', 'image/jpeg'); - - // Begrenzt den MIME Typ aller Dateien auf die Gruppe image - $upload->addValidator('MimeType', 'image'); - - // Ein anderes magicfile verwenden - $upload->addValidator('MimeType', - false, - array('image', - 'magicfile' => '/path/to/magicfile.mgx')); - -Das obige Beispiel zeigt das es auch möglich ist den akzeptierten *MIME* Typ auf eine Gruppe von *MIME* Typen zu -begrenzen. Um alle Bilder zu erlauben kann einfach 'image' als *MIME* Typ verwendet werden. Das kann für alle -Gruppen von *MIME* Typen wie 'image', 'audio', 'video', 'test', und so weiter gemacht werden. - -.. note:: - - Es ist zu beachten das die Verwendung von *MIME* Typ-Gruppen alle Mitglieder dieser Gruppe akzeptiert, selbst - wenn die Anwendung diese nicht unterstützt. Wenn man 'image' erlaubt, erhält man auch 'image/xpixmap' oder - 'image/vasa' was problematisch sein könnte. Wenn man nicht sicher ist ob die eigene Anwendung alle Typen - unterstützt ist es besser nur definierte *MIME* Typen zu erlauben statt der kompletten Gruppe. - -.. note:: - - Diese Komponente verwendet die ``FileInfo`` Erweiterung wenn Sie vorhanden ist. Wenn nicht wird Sie die - ``mime_content_type()`` Funktion verwenden. Und wenn dieser Funktionsaufruf fehlschlägt wird der *MIME* Typ - verwendet der von *HTTP* angegeben wurde. - - Man sollte sich vor möglichen Sicherheitsproblemen vorsehen wenn weder ``FileInfo`` noch - ``mime_content_type()`` vorhanden sind. Der von *HTTP* angegebene *MIME* Typ ist nicht sicher und kann einfach - manipuliert werden. - -.. _zend.file.transfer.validators.notexists: - -NotExists Prüfung ------------------ - -Die ``NotExists`` Prüfung checkt ob Dateien die angegeben werden existieren. Sie unterstützt die folgenden -Optionen: - -- ``*``: Setzt einen beliebigen Schlüssel oder ein nummerisches Array. Checkt ob die Datei im gegebenen - Verzeichnis existiert. - -Diese Prüfung akzeptiert mehrere Verzeichnisse, entweder als Komma-getrennter String, oder als Array. Es können -aber auch die Methoden ``setDirectory()``, ``addDirectory()``, und ``getDirectory()`` verwendet werden um die -Verzeichnisse zu setzen und zu erhalten. - -.. _zend.file.transfer.validators.notexists.example: - -.. rubric:: Verwendung der NotExists Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Das temporäre Verzeichnis für die Prüfung hinzufügen - $upload->addValidator('NotExists', '\temp'); - - // Zwei Verzeichnisse durch Verwendung der Array Schreibweise hinzufügen - $upload->addValidator('NotExists', - array('\home\images', - '\home\uploads') - ); - -.. note:: - - Beachte das diese Prüfung checkt ob die Datei in allen angegebenen Verzeichnissen nicht existiert. Die Prüfung - schlägt fehl, wenn die Datei in irgendeinem der angegebenen Verzeichnisse existiert. - -.. _zend.file.transfer.validators.sha1: - -Sha1 Prüfung ------------- - -Die ``Sha1`` Prüfung checkt den Inhalt einer übertragenen Datei durch hashen. Diese Prüfung verwendet die Hash -Erweiterung von *PHP* mit dem Sha1 Algorithmus. Sie unterstützt die folgenden Optionen: - -- ``*``: Nimmt einen beliebigen Schlüssel oder ein nummerisches Array. - - Man kann mehrere Hashes setzen indem Sie als Array übergeben werden. Jeder Datei wird geprüft und die Prüfung - schlägt nur dann fehl wenn alle Dateien fehlschlagen. - -.. _zend.file.transfer.validators.sha1.example: - -.. rubric:: Verwenden der Sha1 Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Prüft ob der Inhalt der hochgeladenen Datei den angegebenen Hash hat - $upload->addValidator('Sha1', false, '3b3652f336522365223'); - - // Begrenzt diese Prüfung auf zwei unterschiedliche Hashes - $upload->addValidator('Sha1', - false, array('3b3652f336522365223', - 'eb3365f3365ddc65365')); - -.. _zend.file.transfer.validators.size: - -Size Prüfung ------------- - -Die ``Size`` Prüfung checkt die Größe von einzelnen Dateien. Sie unterstützt die folgenden Optionen: - -- ``min``: Setzt die minimale Dateigröße. - -- ``max``: Setzt die maximale Dateigröße. - -- ``bytestring``: Definiert ob ein Fehler mit einer benutzerfreundlichen Nummer zurückgegeben wird, oder mit der - reinen Dateigröße. - - Mit dieser Option kann definiert werden ob der Benutzer '10864' oder '10MB' erhält. Der Standardwert ist - ``TRUE`` was '10MB' zurückgibt. - -Man kann diese Prüfung auch nur mit einem String initialisieren, der dann verwendet wird um die ``max`` Option zu -setzen. Man kann auch die Methoden ``setMin()`` und ``setMax()`` verwenden um beide Optionen nach der -Instanziierung setzen, zusammen mit ``getMin()`` und ``getMax()`` um die Werte zu setzen die vorher gesetzt wurden. - -Die Größe selbst wird auch in der SI Schreibweise akzeptiert wie Sie von den meisten Betriebsystemen verwendet -wird. Statt **20000 bytes** kann man auch **20kB** angeben. Alle Einheiten werden konvertiert wobei 1024 als -Basiswert verwendet wird. Die folgenden Einheiten werden akzeptiert: **kB**, **MB**, **GB**, **TB**, **PB** und -**EB**. Beachte das 1kB identisch mit 1024 Bytes ist, 1MB identisch mit 1024kB ist, und so weiter. - -.. _zend.file.transfer.validators.size.example: - -.. rubric:: Verwendung der Size Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Limitiert die Größe einer Datei auf 40000 Bytes - $upload->addValidator('Size', false, 40000); - - // Limitiert die Größe der angegebenen Datei auf maximal 4MB und minimal 10kB - // Gibt auch im Fall eines Fehlers die reine Zahl statt einer - // Benutzerfreundlichen zurück - $upload->addValidator('Size', - false, - array('min' => '10kB', - 'max' => '4MB', - 'bytestring' => false)); - -.. _zend.file.transfer.validators.wordcount: - -WordCount Prüfung ------------------ - -Die ``WordCount`` Prüfung checkt die Anzahl von Wörtern in angegebenen Dateien. Sie Unterstützt die folgenden -Optionen: - -- ``min``: Setzt die mindeste Anzahl an Wörtern die gefunden werden soll. - -- ``max``: Setzt die maximale Anzahl an Wörtern die gefunden werden soll. - -Wenn man diese Prüfung mit einem String oder Integer initiiert, wird der Wert als ``max`` verwendet. Oder man -verwendet die ``setMin()`` und ``setMax()`` Methoden um beide Optionen im Nachhinein zu Setzen und ``getMin()`` -sowie ``getMax()`` um die aktuell gesetzten Werte zu erhalten. - -.. _zend.file.transfer.validators.wordcount.example: - -.. rubric:: Verwendung der WordCount Prüfung - -.. code-block:: php - :linenos: - - $upload = new Zend\File\Transfer(); - - // Begrenzt die Anzahl der Wörter in Dateien auf maximal 2000 - $upload->addValidator('WordCount', false, 2000); - - // Begrenzt die Anzahl der Wörter in Dateien auf maximal 5000 - // und mindestens 1000 Wörter - $upload->addValidator('WordCount', false, array('min' => 1000, 'max' => 5000)); - - - -.. _`hash_algos Methode`: http://php.net/hash_algos -.. _`php.net Seite`: http://php.net diff --git a/docs/languages/de/modules/zend.filter.base-name.rst b/docs/languages/de/modules/zend.filter.base-name.rst deleted file mode 100644 index 90583b54f..000000000 --- a/docs/languages/de/modules/zend.filter.base-name.rst +++ /dev/null @@ -1,42 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.basename: - -BaseName -======== - -``Zend\Filter\BaseName`` erlaubt es einen String zu filtern welcher den Pfad zu einer Daten enthält und gibt den -Basisnamen dieser Datei zurück. - -.. _zend.filter.set.basename.options: - -Unterstützte Optionen für Zend\Filter\BaseName ----------------------------------------------- - -Es gibt keine zusätzlichen Optionen für ``Zend\Filter\BaseName``. - -.. _zend.filter.set.basename.basic: - -Einfache Verwendung -------------------- - -Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden: - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\BaseName(); - - print $filter->filter('/vol/tmp/filename'); - -Das gibt 'filename' zurück. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\BaseName(); - - print $filter->filter('/vol/tmp/filename.txt'); - -Das gibt '``filename.txt``' zurück. - - diff --git a/docs/languages/de/modules/zend.filter.boolean.rst b/docs/languages/de/modules/zend.filter.boolean.rst deleted file mode 100644 index b02e4644c..000000000 --- a/docs/languages/de/modules/zend.filter.boolean.rst +++ /dev/null @@ -1,182 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.boolean: - -Boolean -======= - -Dieser Filter ändert eine gegebene Eingabe auf einen ``BOOLEAN`` Wert. Das ist oft nützlich wenn man mit -Datenbanken arbeitet oder wenn Formularwerte bearbeitet werden. - -.. _zend.filter.set.boolean.default: - -Standardverhalten von Zend\Filter\Boolean ------------------------------------------ - -Standardmäßig arbeitet dieser Filter indem er Eingabe auf ``BOOLEAN`` Werte castet; in anderen Worte, er arbeitet -in ähnlicher Weise wie der Aufruf von ``(boolean) $value``. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Boolean(); - $value = ''; - $result = $filter->filter($value); - // gibt false zurück - -Dies bedeuetet dass ``Zend\Filter\Boolean`` ohne die Angabe einer Konfiguration alle Eingabetypen akteptiert und -ein ``BOOLEAN`` zurückgibt wie man es durch Typcasting zu ``BOOLEAN`` erhält. - -.. _zend.filter.set.boolean.types: - -Das Verhalten von Zend\Filter\Boolean ändern --------------------------------------------- - -Manchmal ist das Casten mit ``(boolean)`` nicht ausreichend. ``Zend\Filter\Boolean`` erlaubt es spezifische Typen -zu konfigurieren welche konvertiert werden, und jene die ignoriert werden. - -Die folgenden Typen können behandelt werden: - -- **boolean**: Gibt einen boolschen Wert so wie er ist zurück. - -- **integer**: Konvertiert den Integerwert **0** zu ``FALSE``. - -- **float**: Konvertiert den Gleitkommawert **0.0** zu ``FALSE``. - -- **string**: Konvertiert einen leeren String **''** zu ``FALSE``. - -- **zero**: Konvertiert einen String der ein einzelnes Null Zeichen (**'0'**) enthält zu ``FALSE``. - -- **empty_array**: Konvertiert ein leeres **array** zu ``FALSE``. - -- **null**: Konvertiert den Wert ``NULL`` zu ``FALSE``. - -- **php**: Konvertiert Werte so wie diese mit *PHP* zu ``BOOLEAN`` konvertiert werden. - -- **false_string**: Konvertiert einen String der das Wort "false" enthält zu einem boolschen ``FALSE``. - -- **yes**: Konvertiert einen lokalisierten String welcher das Wort "nein" enthält zu ``FALSE``. - -- **all**: Konvertiert alle obigen Typen zu ``BOOLEAN``. - -Alle anderen angegebenen Werte geben standardmäßig ``TRUE`` zurück. - -Es gibt verschiedene Wege um auszuwählen welche der oben stehenden Typen gefiltert werden. Man kann ein oder -mehrere Typen angeben und Sie hinzufügen, man kann ein Array angeben, man kann die Konstanten verwenden, oder man -kann einen textuellen String angeben. Siehe die folgenden Beispiele: - -.. code-block:: php - :linenos: - - // Konvertiert 0 zu false - $filter = new Zend\Filter\Boolean(Zend\Filter\Boolean::INTEGER); - - // Konvertiert 0 und '0' zu false - $filter = new Zend\Filter\Boolean( - Zend\Filter\Boolean::INTEGER + Zend\Filter\Boolean::ZERO - ); - - // Konvertiert 0 und '0' zu false - $filter = new Zend\Filter\Boolean(array( - 'type' => array( - Zend\Filter\Boolean::INTEGER, - Zend\Filter\Boolean::ZERO, - ), - )); - - // Konvertiert 0 und '0' zu false - $filter = new Zend\Filter\Boolean(array( - 'type' => array( - 'integer', - 'zero', - ), - )); - -Man kann auch eine Instanz von ``Zend_Config`` angeben um die gewünschten Typen zu setzen. Um Typen nach der -Instanzierung zu setzen kann die Methode ``setType()`` verwendet werden. - -.. _zend.filter.set.boolean.localized: - -Lokalisierte Boolsche Werte ---------------------------- - -Wie vorher erwähnt erkennt ``Zend\Filter\Boolean`` auch die lokalisierten Strings für "Ja" und "Nein". Das -bedeutet das man den Kunden in einem Formular nach "Ja" oder "Nein" in seiner eigenen Sprache fragen kann und -``Zend\Filter\Boolean`` die Antworten zu richtigen boolschen Werten konvertieren wird. - -Um das gewünschte Gebietsschema zu setzen kann man entweder die Option ``locale`` verwenden oder die Methode -``setLocale()`` verwenden. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Boolean(array( - 'type' => Zend\Filter\Boolean::ALL, - 'locale' => 'de', - )); - - // Gibt false zurück - echo $filter->filter('nein'); - - $filter->setLocale('en'); - - // Gibt true zurück - $filter->filter('yes'); - -.. _zend.filter.set.boolean.casting: - -Casten ausschalten ------------------- - -Machmal ist es nützlich nur ``TRUE`` oder ``FALSE`` zu erkennen und alle anderen Werte ohne Änderung -zurückzugeben. ``Zend\Filter\Boolean`` erlaubt dies indem die Option ``casting`` auf ``FALSE`` gesetzt wird. - -In diesem Fall arbeitet ``Zend\Filter\Boolean`` wie in der folgenden Tabelle beschrieben, die zeigt welche Werte -``TRUE`` oder ``FALSE`` zurückgeben. Alle anderen angegebenen Werte werden ohne Änderung zurückgegeben wenn -``casting`` auf ``FALSE`` gesetzt wird. - -.. _zend.filter.set.boolean.casting.table: - -.. table:: Verwendung ohne Casten - - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Typ |True |False | - +=================================+=================================================+================================================+ - |Zend\Filter\Boolean::BOOLEAN |TRUE |FALSE | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::INTEGER |0 |1 | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::FLOAT |0.0 |1.0 | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::STRING |"" | | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::ZERO |"0" |"1" | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::EMPTY_ARRAY |array() | | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::NULL |NULL | | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::FALSE_STRING|"false" (unabhängig von der Schreibweise) |"true" (unabhängig von der Schreibweise) | - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - |Zend\Filter\Boolean::YES |localized "yes" (unabhängig von der Schreibweise)|localized "no" (unabhängig von der Schreibweise)| - +---------------------------------+-------------------------------------------------+------------------------------------------------+ - -Das folgende Beispiel zeigt das Verhalten wenn die Option ``casting`` verändert wird: - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Boolean(array( - 'type' => Zend\Filter\Boolean::ALL, - 'casting' => false, - )); - - // Gibt false zurück - echo $filter->filter(0); - - // Gibt true zurück - echo $filter->filter(1); - - // Gibt den Wert zurück - echo $filter->filter(2); - - diff --git a/docs/languages/de/modules/zend.filter.callback.rst b/docs/languages/de/modules/zend.filter.callback.rst deleted file mode 100644 index b6093b501..000000000 --- a/docs/languages/de/modules/zend.filter.callback.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.callback: - -Callback -======== - -Dieser Filter erlaubt es einem eigene Methoden in Verbindung mit ``Zend_Filter`` zu verwenden. Man muß keinen -neuen Filter erstellen wenn man bereits eine Methode hat die diesen Job erledigt. - -Nehmen wir an das wir einen Filter erstellen wollen der einen String umdreht. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Callback('strrev'); - - print $filter->filter('Hello!'); - // Ausgabe "!olleH" - -Wie man sehen kann ist es wirklich sehr einfach ein Callback zu verwenden um einen eigenen Filter zu definieren. Es -ist auch möglich eine Methode zu verwenden, wenn diese innerhalb einer Klasse definiert ist, indem ein Array als -Callback angegeben wird. - -.. code-block:: php - :linenos: - - // Unsere Klassendefinition - class MyClass - { - public function Reverse($param); - } - - // Die Filter Definition - $filter = new Zend\Filter\Callback(array('MyClass', 'Reverse')); - print $filter->filter('Hello!'); - -Um den aktuell gesetzten Callback zu erhalten kann ``getCallback()`` verwendet werden, und um einen anderen -Callback zu setzen kann ``setCallback()`` verwendet werden. - -Es ist auch möglich Standardparameter zu definieren, die der aufgerufenen Methode als Array übergeben werden wenn -der Filter ausgeführt wird. Dieses Array wird mit dem Wert der gefiltert werden soll zusammengehängt. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Callback( - array( - 'callback' => 'MyMethod', - 'options' => array('key' => 'param1', 'key2' => 'param2') - ) - ); - $filter->filter(array('value' => 'Hello')); - -Wenn man die oben stehende Methodendefinition manuell aufrufen würde, dann würde das wie folgt aussehen: - -.. code-block:: php - :linenos: - - $value = MyMethod('Hello', 'param1', 'param2'); - -.. note:: - - Man sollte auch beachten das die Definition einer Callback Methode, welche nicht aufgerufen werden kann, eine - Exception auslöst. - - diff --git a/docs/languages/de/modules/zend.filter.compress.rst b/docs/languages/de/modules/zend.filter.compress.rst deleted file mode 100644 index 687238a7d..000000000 --- a/docs/languages/de/modules/zend.filter.compress.rst +++ /dev/null @@ -1,398 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.compress: - -Compress und Decompress -======================= - -Diese zwei Filter sind in der Lage Strings, Dateien und Verzeichnisse zu komprimieren und zu dekomprimieren. Sie -verwenden Adapter und unterstützen die folgenden Kompressions Formate: - -- **Bz2** - -- **Gz** - -- **Lzf** - -- **Rar** - -- **Tar** - -- **Zip** - -Jedes Kompressions Format hat unterschiedliche Fähigkeiten die anbei beschrieben sind. Alle Kompressions Filter -können fast der selben Art und Weise verwendet werden, und unterscheiden sich primär in den vorhandenen Optionen -und der Art der Kompression welche diese anbieten (beide bieten Algorithmen für Strings vs. Dateien vs. -Verzeichnisse an) - -.. _zend.filter.set.compress.generic: - -Generelle Handhabung --------------------- - -Um einen Kompressions Filter zu erstellen muss man das Kompressions Format auswählen welches man verwenden will. -Die folgende Beschreibung nimmt den **Bz2** Adapter. Details für alle anderen Adapter werden nach dieser Sektion -beschrieben. - -Diese zwei Filter sind grundsätzlich identisch, da Sie das gleiche Backend verwenden. ``Zend\Filter\Compress`` -sollte verwendet werden wenn man Elemente komprimieren will, und ``Zend\Filter\Decompress`` sollte verwendet werden -wenn man Elemente dekomprimieren will. - -Wenn man zum Beispiel einen String komprimieren will, müssen wir ``Zend\Filter\Compress`` instanziieren und den -gewünschten Adapter angeben. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Compress('Bz2'); - -Um einen anderen Adapter zu verwenden muss dieser einfach im Constructor spezifiziert werden. - -Man kann auch ein Array von Optionen oder ein ``Zend_Config`` Objekt anbieten. Wenn man das tut sollte mindestens -der Schlüssel "adapter" angegeben werden, und anschließend entweder der Schlüssel "options" oder -"adapterOptions" (welches ein Array von Optionen ein sollte das dem Adapter bei der Instanziierung übergeben -wird). - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Compress(array( - 'adapter' => 'Bz2', - 'options' => array( - 'blocksize' => 8, - ), - )); - -.. note:: - - **Standardmäßiger Kompressions Adapter** - - Wenn kein Kompressions Adapter angegeben wird, dann wird der **Gz** Adapter verwendet. - -Fast die gleiche Verwendung ist die Dekomprimierung eines Strings. Wir müssen in diesem Fall nur den -Dekompressions Filter verwenden. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Decompress('Bz2'); - -Um einen komprimierten String zu erhalten muss der originale String angegeben werden. Der gefilterte Wert ist die -komprimierte Version des originalen Strings. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Compress('Bz2'); - $compressed = $filter->filter('Uncompressed string'); - // Gibt den komprimierten String zurück - -Dekomprimierung funktioniert auf die gleiche Weise. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Decompress('Bz2'); - $compressed = $filter->filter('Compressed string'); - // Gibt den dekomprimierten String zurück - -.. note:: - - **Hinweis zur Komprimierung von Strings** - - Nicht alle Adapter unterstützen die Kompression von Strings. Kompressions Formate wie **Rar** können nur - Dateien und Verzeichnisse verarbeiten. Für Details muss man in die Sektion für den Adapter gesehen werden den - man verwenden will. - -.. _zend.filter.set.compress.archive: - -Ein Archiv erstellen --------------------- - -Die Erstellung einer Archivedatei arbeitet fast auf die gleiche Weise wie die Komprimierung eines Strings. Trotzdem -benötigen wir in diesem Fall einen zusätzlichen Parameter welcher den Namen des Archivs enthält welches wir -erstellen wollen. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Compress(array( - 'adapter' => 'Bz2', - 'options' => array( - 'archive' => 'filename.bz2', - ), - )); - $compressed = $filter->filter('Uncompressed string'); - // Gibt bei Erfolg true zurück und erstellt die Archiv Datei - -Im obigen Beispeil wird der unkomprimierte String komprimiert, und wird dann in die angegebene Archiv Datei -geschrieben. - -.. note:: - - **Existierende Archive werden überschrieben** - - Der Inhalt einer existierenden Datei wird überschrieben wenn der angegebene Dateiname des Archivs bereits - existiert. - -Wenn man eine Datei komprimieren will, dann muss man den Namen der Datei mit dessen Pfad angeben. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Compress(array( - 'adapter' => 'Bz2', - 'options' => array( - 'archive' => 'filename.bz2' - ), - )); - $compressed = $filter->filter('C:\temp\compressme.txt'); - // Gibt bei Erfolg true zurück und erstellt die Archiv Datei - -Man kann auch ein Verzeichnis statt einem Dateinamen spezifizieren. In diesem Fall wird das gesamte Verzeichnis mit -allen seinen Dateien und Unterverzeichnissen in das Archiv komprimiert. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Compress(array( - 'adapter' => 'Bz2', - 'options' => array( - 'archive' => 'filename.bz2' - ), - )); - $compressed = $filter->filter('C:\temp\somedir'); - // Gibt bei Erfolg true zurück und erstellt die Archiv Datei - -.. note:: - - **Keine großen oder Basisverzeichnisse komprimieren** - - Man sollte niemals große oder Basisverzeichnisse wie eine komplette Partition komprimieren. Die Komprimierung - einer kompletten Partition ist ein sehr Zeitintensiver Task welcher zu massiven Problemen auf dem Server führen - kann, wenn es nicht genug Platz gibt, oder das eigene Skript zu viel Zeit benötigt. - -.. _zend.filter.set.compress.decompress: - -Ein Archiv dekomprimieren -------------------------- - -Die Dekomprimierung einer Archivdatei arbeitet fast wie dessen Komprimierung. Man muss entweder die Eigenschaft -``archive`` spezifizieren, oder den Dateinamen des Archivs angeben wenn man die Datei dekomprimiert. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Decompress('Bz2'); - $compressed = $filter->filter('filename.bz2'); - // Gibt bei Erfolg true zurück und dekomprimiert die Archiv Datei - -Einige Adapter unterstützen die Dekomprimierung des Archivs in ein anderes Unterverzeichnis. In diesem Fall kann -der Parameter ``target`` spezifiziert werden. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Decompress(array( - 'adapter' => 'Zip', - 'options' => array( - 'target' => 'C:\temp', - ) - )); - $compressed = $filter->filter('filename.zip'); - // Gibt bei Erfolg true zurück und dekomprimiert die Archiv Datei - // in das angegebene Zielverzeichnis - -.. note:: - - **Verzeichnisse in welche extrahiert werden soll müssen existieren** - - Wenn man ein Archiv in ein Verzeichnis dekomprimieren will, dann muss dieses Verzeichnis existieren. - -.. _zend.filter.set.compress.bz2: - -Bz2 Adapter ------------ - -Der Bz2 Adapter kann folgendes komprimieren und dekomprimieren: - -- Strings - -- Dateien - -- Verzeichnisse - -Dieser Adapter verwendet *PHP*'s Bz2 Erweiterung. - -Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen: - -- **Archive**: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll. - -- **Blocksize**: Dieser Parameter setzt die Blockgröße welche zu verwenden ist. Diese kann zwischen '0' und '9' - liegen. Der Standardwert ist '4'. - -Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum -Beispiel sind die zu 'Blocksize' gehörenden Methoden ``getBlocksize()`` und ``setBlocksize()``. Man kann auch die -``setOptions()`` Methode verwenden welche alle Optionen als Array akzeptiert. - -.. _zend.filter.set.compress.gz: - -Gz Adapter ----------- - -Der Gz Adapter kann folgendes komprimieren und dekomprimieren: - -- Strings - -- Dateien - -- Verzeichnisse - -Dieser Adapter verwendet *PHP*'s Zlib Erweiterung. - -Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen: - -- **Archive**: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll. - -- **Level**: Das Level der Kompression welches verwendet werden soll. Es kann zwischen '0' und '9' liegen. Der - Standardwert ist '9'. - -- **Mode**: Es gibt zwei unterstützte Modi. 'compress' und 'deflate'. Der Standardwert ist 'compress'. - -Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum -Beispiel sind die zu 'Level' gehörenden Methoden ``getLevel()`` und ``setLevel()``. Man kann auch die -``setOptions()`` Methode verwenden welche alle Optionen als Array akzeptiert. - -.. _zend.filter.set.compress.lzf: - -Lzf Adapter ------------ - -Der Lzf Adapter kann folgendes komprimieren und dekomprimieren: - -- Strings - -.. note:: - - **Lzf unterstützt nur Strings** - - Der Lzf Adapter kann keine Dateien oder Verzeichnisse verarbeiten. - -Dieser Adapter verwendet *PHP*'s Lzf Erweiterung. - -Es sind keine Optionen vorhanden um diesen Adapter anzupassen. - -.. _zend.filter.set.compress.rar: - -Rar Adapter ------------ - -Der Rar Adapter kann folgendes komprimieren und dekomprimieren: - -- Dateien - -- Verzeichnisse - -.. note:: - - **Rar unterstützt keine Strings** - - Der Rar Adapter kann keine Strings verarbeiten. - -Dieser Adapter verwendet *PHP*'s Rar Erweiterung. - -.. note:: - - **Die Kompression wird von Rar nicht unterstützt** - - Durch Beschränkungen des Kompressions Formats von Rar, gibt es keine frei erhältliche Komprimierung. Wenn man - Dateien in ein neues Rar Archiv komprimieren will, muss man dem Adapter einen Callback anbieten mit dem ein Rar - Kompressions Programm aufgerufen wird. - -Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen: - -- **Archive**: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll. - -- **Callback**: Ein Callback welcher diesem Adapter Unterstützung für Komprimierung anbietet. - -- **Password**: Das Passwort welches für die Dekomprimierung verwendet werden soll. - -- **Target**: Das Ziel zu dem dekomprimierte Dateien geschrieben werden. - -Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum -Beispiel sind die zu 'Target' gehörenden Methoden ``getTarget()`` und ``setTarget()``. Man kann auch die -``setOptions()`` Methode verwenden welche alle Optionen als Array akzeptiert. - -.. _zend.filter.set.compress.tar: - -Tar Adapter ------------ - -Der Rar Adapter kann folgendes komprimieren und dekomprimieren: - -- Dateien - -- Verzeichnisse - -.. note:: - - **Tar unterstützt keine Strings** - - Der Tar Adapter kann keine Strings verarbeiten. - -Dieser Adapter verwendet *PEAR*'s ``Archive_Tar`` Komponente. - -Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen: - -- **Archive**: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll. - -- **Mode**: Ein Modus der für die Komprimierung verwendet werden soll. Unterstützt werden entweder '``NULL``', - was keine Komprimierung bedeutet, 'Gz' was *PHP*'s Zlib Erweiterung verwendet, und 'Bz2' was *PHP*'s Bz2 - Erweiterung verwendet. Der Standardwert ist '``NULL``'. - -- **Target**: Das Ziel zu dem dekomprimierte Dateien geschrieben werden. - -Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum -Beispiel sind die zu 'Target' gehörenden Methoden ``getTarget()`` und ``setTarget()``. Man kann auch die -``setOptions()`` Methode verwenden welche alle Optionen als Array akzeptiert. - -.. note:: - - **Verwendung von Verzeichnissen** - - Wenn Verzeichnisse mit Tar komprimiert werden, dann wird der komplette Dateipfad verwendet. Das bedeutet das - erstellte Tar Dateien nicht nur das Unterverzeichnis sondern den kompletten Pfad für die komprimierten Dateien - enthält. - -.. _zend.filter.set.compress.zip: - -Zip Adapter ------------ - -Der Rar Adapter kann folgendes komprimieren und dekomprimieren: - -- Strings - -- Dateien - -- Verzeichnisse - -.. note:: - - **Zip unterstützt die Dekomprimierung von Strings nicht** - - Der Zip Adapter kann die Dekomprimierung von Strings nicht verarbeiten; eine Dekomprimierung wird immer in eine - Datei geschrieben. - -Dieser Adapter verwendet *PHP*'s ``Zip`` Erweiterung. - -Um die Komprimierung anzupassen unterstützt dieser Adapter die folgenden Optionen: - -- **Archive**: Dieser Parameter setzt die Archivdatei welche verwendet oder erstellt werden soll. - -- **Target**: Das Ziel zu dem dekomprimierte Dateien geschrieben werden. - -Alle Optionen können bei der Instanziierung oder durch Verwendung der betreffenden Methode verwendet werden. Zum -Beispiel sind die zu 'Target' gehörenden Methoden ``getTarget()`` und ``setTarget()``. Man kann auch die -``setOptions()`` Methode verwenden welche alle Optionen als Array akzeptiert. - - diff --git a/docs/languages/de/modules/zend.filter.digits.rst b/docs/languages/de/modules/zend.filter.digits.rst deleted file mode 100644 index 2821e8904..000000000 --- a/docs/languages/de/modules/zend.filter.digits.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.digits: - -Digits -====== - -Gibt den String ``$value`` zurück und entfernt alle ausser Ziffern. - -.. _zend.filter.set.digits.options: - -Unterstützte Optionen für Zend\Filter\Digits --------------------------------------------- - -Es gibt keine zusätzlichen Optionen für ``Zend\Filter\Digits``. - -.. _zend.filter.set.digits.basic: - -Einfache Verwendung -------------------- - -Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden: - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Digits(); - - print $filter->filter('October 2009'); - -Dies gibt "2009" zurück. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Digits(); - - print $filter->filter('HTML 5 für Dummies'); - -Dies gibt "5" zurück. - - diff --git a/docs/languages/de/modules/zend.filter.dir.rst b/docs/languages/de/modules/zend.filter.dir.rst deleted file mode 100644 index f0a32c3a0..000000000 --- a/docs/languages/de/modules/zend.filter.dir.rst +++ /dev/null @@ -1,42 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.dir: - -Dir -=== - -Ein angegebener String welcher den Pfad zu einer Datei enthält wird von dieser Funktion nur den Namen des -Verzeichnisses zurückgeben. - -.. _zend.filter.set.dir.options: - -Unterstützte Optionen für Zend\Filter\Dir ------------------------------------------ - -Es gibt keine zusätzlichen Optionen für ``Zend\Filter\Dir``. - -.. _zend.filter.set.dir.basic: - -Einfache Verwendung -------------------- - -Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden: - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Dir(); - - print $filter->filter('/etc/passwd'); - -Dies gibt "``/etc``" zurück. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Dir(); - - print $filter->filter('C:/Temp/x'); - -Dies gibt "``C:/Temp``" zurück. - - diff --git a/docs/languages/de/modules/zend.filter.encryption.rst b/docs/languages/de/modules/zend.filter.encryption.rst deleted file mode 100644 index 7f29d6b76..000000000 --- a/docs/languages/de/modules/zend.filter.encryption.rst +++ /dev/null @@ -1,284 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.encrypt: - -Encrypt -======= - -Dieser Filter verschlüsselt beliebige Strings mit den angegebenen Einstellungen. Hierfür verwendet er Adapter. -Aktuell gibt es Adapter für die ``Mcrypt`` und ``OpenSSL`` Erweiterungen von *PHP*. - -Da diese zwei Verschlüsselungs-Methodologien komplett unterschiedlich arbeiten, ist auch die Verwendung der -Adapters unterschiedlich. Man muß die Adapter den man verwenden will, bei der Initialisierung des Filters -auswählen. - -.. code-block:: php - :linenos: - - // Verwenden des Mcrypt Adapters - $filter1 = new Zend\Filter\Encrypt(array('adapter' => 'mcrypt')); - - // Verwendung des OpenSSL Adapters - $filter2 = new Zend\Filter\Encrypt(array('adapter' => 'openssl')); - -Um einen anderen Adapter zu setzen kann man auch ``setAdapter()`` verwenden, und die ``getAdapter()`` Methode um -den aktuell gesetzten Adapter zu erhalten. - -.. code-block:: php - :linenos: - - // Verwenden des Mcrypt Adapters - $filter = new Zend\Filter\Encrypt(); - $filter->setAdapter('openssl'); - -.. note:: - - Wenn man die ``adapter`` Option nicht angibt oder setAdapter nicht verwendet, dann wird standardmäßig der - ``Mcrypt`` Adapter verwendet. - -.. _zend.filter.set.encrypt.mcrypt: - -Verschlüsselung mit Mcrypt --------------------------- - -Wenn man die ``Mcrypt`` Erweiterung installiert hat, kann man den ``Mcrypt`` Adapter verwenden. Dieser Adapter -unterstützt bei der Initialisierung die folgenden Optionen: - -- **key**: Der Verschlüsselungs-Schlüssel mit dem die Eingabe verschlüsselt wird. Man benötigt den gleichen - Schlüssel für die Entschlüsselung. - -- **algorithm**: Der Algorithmus der verwendet werden soll. Das sollte einer der Algorithmus Cipher sein die man - unter `PHP's Mcrypt Cipers`_ finden kann. Wenn er nicht gesetzt wird, ist er standardmäßig 'blowfish'. - -- **algorithm_directory**: Das Verzeichnis in dem der Algorithmus gefunden werden kann. Wenn es nicht gesetzt wird, - ist es standardmäßig der Pfad der in der Mcrypt Erweiterung gesetzt wurde. - -- **mode**: Der Verschlüsselungs Modus der verwendet werden soll. Es sollte einer der Modi sein der unter `PHP's - Mcrypt Modi`_ gefunden werden kann. Wenn er nicht gesetzt wird, ist er standardmäßig 'cbc'. - -- **mode_directory**: Der Verzeichnis in dem der Modus gefunden werden kann. Wenn es nicht gesetzt wird, ist es - standardmäßig der Pfad der in der ``Mcrypt`` Erweiterung gesetzt wurde. - -- **vector**: Der Initialisierungs Vektor der verwendet werden soll. Wenn er nicht gesetzt wird, wird ein - zufälliger Vektor verwende. - -- **salt**: Ob der Schlüssel als Salt Wert verwendet wird. Der Schlüssel der für die Verschlüsselung verwendet - wird, wird selbst auch verschlüsselt. Der Standardwert ist ``FALSE``. - -- **compression**: Ob der verschlüsselte Wert komprimiert werden soll. Der Standard ist nicht komprimiert. Für - Details sehen Sie unter :ref:`Komprimierung für Openssl ` nach. - -Wenn man einen String statt einem Array übergibt, wird dieser String als key Option verwendet. - -Man kan die Verschlüsselungswerte auch im Nachhinein mit den Methoden ``getEncryption()`` und ``setEncryption()`` -erhalten und setzen. - -.. note:: - - Es ist zu beachten das man eine Ausnahme erhält wenn die mcrypt Erweiterung in der eigenen Umgebung nicht - vorhanden ist. - -.. note:: - - Man sollte auch beachten das alle Einstellungen geprüft werden wenn man eine Instanz erstellt oder - ``setEncryption()`` aufruft. Wenn mcrypt ein Problem mit diesen Einstellungen erkennt wird eine Ausnahme - geworfen. - -Man kann den Verschlüsselungs Vektor durch den Aufruf von ``getVector()`` und ``setVector()`` erhalten und setzen. -Ein engegebener String wird, je nach benötigter Vektorgröße des verwendeten Algorithmus, abgeschnitten oder -aufgefüllt. - -.. note:: - - Es ist zu beachten das, wenn man keinen eigenen Vektor setzt, man den Vektor holen und speichern muß. - Andernfalls ist man nicht in der Lage den verschlüsselten String wieder zu dekodieren. - -.. code-block:: php - :linenos: - - // Verwendet die standardmäßigen Blowfish Einstellungen - $filter = new Zend\Filter\Encrypt('myencryptionkey'); - - // Setzt einen eigenen Vektor, andernfalls muß man getVector() - // ausrufen und diesen Vektor für spätere Entschlüsselung speichern - $filter->setVector('myvector'); - // $filter->getVector(); - - $encrypted = $filter->filter('text_to_be_encoded'); - print $encrypted; - - // Für Entschlüsselung siehe den Decrypt Filter - -.. _zend.filter.set.encrypt.openssl: - -Verschlüsselung mit OpenSSL ---------------------------- - -Wenn man die ``OpenSSL`` Erweiterung installiert hat, kann man den ``OpenSSL`` Adapter verwenden. Dieser Adapter -unterstützt bei der Instanziierung die folgenden Optionen: - -- **public**: Der öffentliche Schlüssel des Benutzer dem man verschlüsselte Inhalte zur Verfügung stellen will. - Man kann mehrere öffentliche Schlüssel angeben indem man ein Array verwendet. Man kann entweder den Pfad und - den Dateinamen der Schlüsseldatei angeben, oder nur den Inhalt der Schlüseldatei selbst. - -- **private**: Der eigene private Schlüssel der für die Verschlüsselung des Inhalts verwendet wird. Auch der - private Schlüssel kann entweder ein Dateiname mit Pfad zur Schlüsseldatei sein, oder nur der Inhalt der - Schlüsseldatei selbst. - -- **compression**: Ob der verschlüsselte Wert komprimiert werden soll. Standardmäßig wird nicht komprimiert. - -- **package**: Ob der Umschlagschlüssel mit dem verschlüsselten Wert gepackt werden soll. Der Standardwert ist - ``FALSE``. - -Man kann öffentliche Schlüssel auch im Nachhinein mit den Methoden ``getPublicKey()`` und ``setPublicKey()`` -erhalten und setzen. Auch der private Schlüssel kann mit den entsprechenden Methoden ``getPrivateKey()`` und -``setPrivateKey()`` geholt und gesetzt werden. - -.. code-block:: php - :linenos: - - // Verwende openssl und gib einen privaten Schlüssel an - $filter = new Zend\Filter\Encrypt(array( - 'adapter' => 'openssl', - 'private' => '/path/to/mykey/private.pem' - )); - - // natürlich kann man die öffentlichen Schlüssel auch - // bei der Instanziierung angeben - $filter->setPublicKey(array( - '/public/key/path/first.pem', - '/public/key/path/second.pem' - )); - -.. note:: - - Es ist zu beachten das der ``OpenSSL`` Adapter nicht funktionieren wird wenn keine gültigen Schlüsseln - angegeben werden. - -Wenn man auch die Schlüssel selbst verschlüsseln will, muß man eine Passphrase mit der ``setPassphrase()`` -Methode angeben. Wenn man Inhalte entschlüsseln will, die mit einer Passphrase verschlüsselt wurden, muß man -nicht nur den öffentlichen Schlüssel, sondern auch die Passphrase um den verschlüsselten Schlüssel zu -entschlüsseln. - -.. code-block:: php - :linenos: - - // Verwende openssl und gib einen privaten Schlüssel an - $filter = new Zend\Filter\Encrypt(array( - 'adapter' => 'openssl', - 'private' => '/path/to/mykey/private.pem' - )); - - // Natürlich kann man die öffentlichen Schlüssel - // auch bei der Instanziierung angeben - $filter->setPublicKey(array( - '/public/key/path/first.pem', - '/public/key/path/second.pem' - )); - $filter->setPassphrase('mypassphrase'); - -Zum Schluß muß man, wenn OpenSSL verwendet wird, dem Empfänger den verschlüsselten Inhalt, die Passphrase, wenn -eine angegeben wurde, und den Umschlagschlüssel für die Entschlüsselung angeben. - -Das bedeutet, das man die Umschlagschlüssel nach der Verschlüsselung mit der ``getEnvelopeKey()`` Methode holen -muß. - -Unser komplettes Beispiel für die Verschlüsselung von Inhalten mit ``OpenSSL`` schaut wie folgt aus. - -.. code-block:: php - :linenos: - - // Verwende openssl und gib einen privaten Schlüssel an - $filter = new Zend\Filter\Encrypt(array( - 'adapter' => 'openssl', - 'private' => '/path/to/mykey/private.pem' - )); - - // natürlich kann man die öffentlichen Schlüssel - // auch bei der Instaiziierung angeben - $filter->setPublicKey(array( - '/public/key/path/first.pem', - '/public/key/path/second.pem' - )); - $filter->setPassphrase('mypassphrase'); - - $encrypted = $filter->filter('text_to_be_encoded'); - $envelope = $filter->getEnvelopeKey(); - print $encrypted; - - // Für die Entschlüsselung siehe beim Decrypt Filter - -.. _zend.filter.set.encrypt.openssl.simplified: - -Vereinfachte Verwendung mit Openssl -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wie vorher zu sehen war, muss man den Umschlagschlüssel holen um in der Lage zu sein den vorher verschlüsselten -Wert wieder zu entschlüsseln. Das kann sehr frustrierend sein wenn man mit mehreren Werten arbeitet. - -Für eine vereinfachte Verwendung kann man die ``package`` Option auf ``TRUE`` setzen. Der Standardwert ist -``FALSE``. - -.. code-block:: php - :linenos: - - // Verwende openssl und gib einen privaten Schlüssel an - $filter = new Zend\Filter\Encrypt(array( - 'adapter' => 'openssl', - 'private' => '/path/to/mykey/private.pem', - 'public' => '/public/key/path/public.pem', - 'package' => true - )); - - $encrypted = $filter->filter('text_to_be_encoded'); - print $encrypted; - - // Für die Entschlüsselung siehe beim Decrypt Filter - -Jetzt enthält der zurückgegebene Wert sowohl den verschlüsselten Wert als auch den Umschlagschlüssel. Man muss -diesen also nicht mehr nach der Verschlüsselung holen. Aber, und das ist der negative Aspekt dieses Features, der -verschlüsselte Wert kann jetzt nur mehr entschlüsselt werden indem man ``Zend\Filter\Encrypt`` verwendet. - -.. _zend.filter.set.encrypt.openssl.compressed: - -Komprimieren des Inhalts -^^^^^^^^^^^^^^^^^^^^^^^^ - -Basierend auf dem originalen Wert, kann der verschlüsselte Wert ein sehr langer String sein. Um den Wert zu -reduzieren erlaubt ``Zend\Filter\Encrypt`` die Verwendung von Kompression. - -Die ``compression`` Option kann entweder auf den Namen eines Komprimierungsadapters gesetzt werden, oder auf ein -Array welches alle gewünschten Optionen für den Komprimierungsadapter setzt. - -.. code-block:: php - :linenos: - - // Verwende nur den grundsätzlichen Komprimierungsadapter - $filter1 = new Zend\Filter\Encrypt(array( - 'adapter' => 'openssl', - 'private' => '/path/to/mykey/private.pem', - 'public' => '/public/key/path/public.pem', - 'package' => true, - 'compression' => 'bz2' - )); - - // Verwende den Basis Komprimierungsadapter - $filter2 = new Zend\Filter\Encrypt(array( - 'adapter' => 'openssl', - 'private' => '/path/to/mykey/private.pem', - 'public' => '/public/key/path/public.pem', - 'package' => true, - 'compression' => array('adapter' => 'zip', 'target' => '\usr\tmp\tmp.zip') - )); - -.. note:: - - **Entschlüsselung mit den selben Werten** - - Wenn man einen Wert entschlüsseln will welcher zusätzlich komprimiert wurde, dann muss man die selben - Komprimierungseinstellungen für die Entschlüsselung verwenden wie bei der Verschlüsselung. Andernfalls wird - die Entschlüsselung fehlschlagen. - - - -.. _`PHP's Mcrypt Cipers`: http://php.net/mcrypt -.. _`PHP's Mcrypt Modi`: http://php.net/mcrypt diff --git a/docs/languages/de/modules/zend.filter.filter-chains.rst b/docs/languages/de/modules/zend.filter.filter-chains.rst deleted file mode 100644 index d1e47ea44..000000000 --- a/docs/languages/de/modules/zend.filter.filter-chains.rst +++ /dev/null @@ -1,53 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.filter_chains: - -Filter Ketten -============= - -Oft müssen mehrere Filter auf Werte in einer speziellen Reihenfolge angewendet werden. Zum Beispiel, ein Login -Formular das einen Benutzernamen akzeptiert welcher nur kleingeschrieben und alphabetische Zeichen haben sollte. -``Zend_Filter`` bietet eine einfache Methode mit der Filter zusammengekettet werden können. Der folgende Code -zeigt wie eine Verkettung von zwei Filtern für das übermitteln eines Benutzernamens funktioniert: - -.. code-block:: php - :linenos: - - // Eine Filterkette erstellen und die Filter der Kette hinzufügen - $filterChain = new Zend\Filter\Filter(); - $filterChain->addFilter(new Zend\I18n\Filter\Alpha()) - ->addFilter(new Zend\Filter\StringToLower()); - - // Den Benutzernamen filtern - $username = $filterChain->filter($_POST['username']); - -Filter werden in der Reihenfolge ausgeführt in der Sie ``Zend_Filter`` hinzugefügt werden. Im obigen Beispiel -wird dem Benutzernamen zuerst jedes nicht-alphabetische Zeichen entfernt und anschließend jeder Großbuchstabe in -einen Kleinbuchstaben umgewandelt. - -Jedes Objekt das ``Zend\Filter\Interface`` implementiert kann in einer Filterkette verwendet werden. - -.. _zend.filter.filter_chains.order: - -Ändern der Reihenfolge der Filterkette --------------------------------------- - -Seit 1.10 unterstützt die ``Zend_Filter`` Kette auch das Ändern der Kette durch voranstellen oder anhängen von -Filtern. Zum Beispiel macht der nächste Code exakt das gleiche wie das andere Beispiel für die Filterkette des -Benutzernamens: - -.. code-block:: php - :linenos: - - // Eine Filterkette erstellen und die Filter der Kette hinzufügen - $filterChain = new Zend\Filter\Filter(); - - // Dieser Filter wird der Filterkette angehängt - $filterChain->appendFilter(new Zend\Filter\StringToLower()); - - // Dieser Filter wird am Beginn der Kette vorangestellt - $filterChain->prependFilter(new Zend\I18n\Filter\Alpha()); - - // Nach dem Benutzernamen filtern - $username = $filterChain->filter($_POST['username']); - - diff --git a/docs/languages/de/modules/zend.filter.html-entities.rst b/docs/languages/de/modules/zend.filter.html-entities.rst deleted file mode 100644 index 79cfb1fb1..000000000 --- a/docs/languages/de/modules/zend.filter.html-entities.rst +++ /dev/null @@ -1,134 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.htmlentities: - -HtmlEntities -============ - -Gibt den String ``$value`` zurück, wobei Zeichen in Ihre *HTML* Entity Äquivalente konvertiert werden wenn diese -existieren. - -.. _zend.filter.set.htmlentities.options: - -Unterstützte Optionen für Zend\Filter\HtmlEntities --------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Filter\HtmlEntities`` unterstützt: - -- **quotestyle**: Äquivalent zum Parameter **quote_style** der nativen *PHP* Funktion htmlentities. Er erlaubt es - zu definieren wass mit 'einfachen' und "doppelten" Hochkomma passieren soll. Die folgenden Konstanten werden - akzeptiert: ``ENT_COMPAT``, ``ENT_QUOTES`` ``ENT_NOQUOTES`` wobei ``ENT_COMPAT`` der Standardwert ist. - -- **charset**: Äquivalent zum Parameter **charset** der nativen *PHP* Funktion htmlentities. Er definiert das - Zeichenset welches beim Filtern verwendet werden soll. Anders als bei der nativen *PHP* Funktion ist der - Standardwert 'UTF-8'. Siehe "http://php.net/htmlentities" für eine Liste der unterstützten Zeichensets. - - .. note:: - - Diese Option kann auch über den Parameter ``$options``, als ``Zend_Config`` Objekt oder als Array gesetzt - werden. Der Optionsschlüssel wird entweder als Zeichenset oder als Kodierung akzeptiert. - -- **doublequote**: Äquivalent zum Parameter **double_encode** der nativen *PHP* Funktion htmlentities. Wenn er auf - false gesetzt wird, werden existierende html entities nicht kodiert. Der Standardwert ist es alles zu - konvertieren (true). - - .. note:: - - Diese Option muss über den Parameter ``$options`` oder die Methode ``setDoubleEncode()`` gesetzt werden. - -.. _zend.filter.set.htmlentities.basic: - -Einfache Verwendung -------------------- - -Siehe das folgende Beispiel für das Standardverhalten dieses Filters. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\HtmlEntities(); - - print $filter->filter('<'); - -.. _zend.filter.set.htmlentities.quotestyle: - -Hochkomma Stil --------------- - -``Zend\Filter\HtmlEntities`` erlaubt es den verwendete Hochkomma Stil zu verändern. Dies kan nützlich sein wenn -man doppelte, einfache oder beide Typen von Hochkommas un-gefiltert lassen will. Siehe das folgende Beispiel: - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\HtmlEntities(array('quotestyle' => ENT_QUOTES)); - - $input = "Ein 'einfaches' und " . '"doppeltes"'; - print $filter->filter($input); - -Das obige Beispiel gibt **Ein 'einfaches' und "doppeltes"** zurück. Es ist zu beachten dass sowohl 'einfache' als -auch "doppelte" Hochkommas gefiltert werden. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\HtmlEntities(array('quotestyle' => ENT_COMPAT)); - - $input = "Ein 'einfaches' und " . '"doppeltes"'; - print $filter->filter($input); - -Das obige Beispiel gibt **Ein 'einfaches' und "doppeltes"** zurück. Es ist zu beachten dass "doppelte" Hochkommas -gefiltert werden wärend 'einfache' Hochkommas nich verändert werden. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\HtmlEntities(array('quotestyle' => ENT_NOQUOTES)); - - $input = "Ein 'einfaches' und" . '"doppeltes"'; - print $filter->filter($input); - -Das obige Beispiel gibt **Ein 'einfaches' und "doppeltes"** zurück. Es ist zu beachten dass "doppelte" oder -'einfache' Hochkommas verändert werden. - -.. _zend.filter.set.htmlentities.: - -Helfer Methoden ---------------- - -Um die Option ``quotestyle`` nach der Instanzierung zu erhalten oder zu ändern, können die zwei Methoden -``setQuoteStyle()`` und ``getQuoteStyle()`` verwendet werden. ``setQuoteStyle()`` akzeptiert einen ``$quoteStyle`` -Parameter. Die folgenden Konstanten werden akzeptiert: ``ENT_COMPAT``, ``ENT_QUOTES``, ``ENT_NOQUOTES`` - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\HtmlEntities(); - - $filter->setQuoteStyle(ENT_QUOTES); - print $filter->getQuoteStyle(ENT_QUOTES); - -Um die Option ``charset`` nach der Instanzierung zu erhalten oder zu ändern, können die zwei Methoden -``setCharSet()`` und ``getCharSet()`` verwendet werden. ``setCharSet()`` akzeptiert einen ``$charSet`` Parameter. -Siehe "http://php.net/htmlentities" für eine Liste der unterstützten Zeichensets. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\HtmlEntities(); - - $filter->setQuoteStyle(ENT_QUOTES); - print $filter->getQuoteStyle(ENT_QUOTES); - -Um die Option ``doublequote`` nach der Instanzierung zu erhalten oder zu ändern, können die zwei Methoden -``setDoubleQuote()`` und ``getDoubleQuote()`` verwendet werden. ``setDoubleQuote()`` akzeptiert einen boolschen -Parameter ``$doubleQuote``. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\HtmlEntities(); - - $filter->setQuoteStyle(ENT_QUOTES); - print $filter->getQuoteStyle(ENT_QUOTES); - - diff --git a/docs/languages/de/modules/zend.filter.inflector.rst b/docs/languages/de/modules/zend.filter.inflector.rst deleted file mode 100644 index d67809751..000000000 --- a/docs/languages/de/modules/zend.filter.inflector.rst +++ /dev/null @@ -1,370 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.inflector: - -Zend\Filter\Inflector -===================== - -``Zend\Filter\Inflector`` ist ein generell verwendbares Tool für regel-basierende Beugung von Strings zu einem -gegebenen Ziel. - -Als Beispiel, kann es gewünscht sein MixedCase oder camelCaseWörter in einen Pfad zu transformieren; für die -Lesbarkeit, OS Policies, oder andere Gründe, sollen diese auch kleingeschrieben werden, und die Wörter sollen mit -einem Bindestrich ('-') getrennt werden. Eine Beugung (Inflector) kann das erledigen. - -``Zend\Filter\Inflector`` implementiert ``Zend\Filter\Interface``; eine Beugung kann durch den Aufruf von -``filter()`` auf der Objekt Instanz durchgeführt werden. - -.. _zend.filter.inflector.camel_case_example: - -.. rubric:: MixedCase und camelCaseText in ein anderes Format transformieren - -.. code-block:: php - :linenos: - - $inflector = new Zend\Filter\Inflector('pages/:page.:suffix'); - $inflector->setRules(array( - ':page' => array('Word_CamelCaseToDash', 'StringToLower'), - 'suffix' => 'html' - )); - - $string = 'camelCasedWords'; - $filtered = $inflector->filter(array('page' => $string)); - // pages/camel-cased-words.html - - $string = 'this_is_not_camel_cased'; - $filtered = $inflector->filter(array('page' => $string)); - // pages/this_is_not_camel_cased.html - -.. _zend.filter.inflector.operation: - -Funktion --------- - -Eine Beugung benötigt ein **Ziel** (target) und ein oder mehrere **Regeln** (rules). Ein Ziel ist grundsätzlich -ein String der Platzhalter für Variablen definiert die ersetzt werden sollen. Sie werden durch das Voranstellen -eines ':' spezifiziert: **:script**. - -Wenn ``filter()`` aufgerufen wird, muß ein Array von Schlüssel und Wert Paaren übergeben werden die den -Variablen im Ziel entsprechen. - -Jede Variable im Ziel kann null oder mehr, mit Ihr assoziierte Regeln, besitzen. Regeln können entweder -**statisch** (static) sein oder zu einer ``Zend_Filter`` Klasse verweisen. Statische Regeln werden den angegebenen -Text ersetzen. Andernfalls wird eine Klasse verwendet die auf die Regel passt die angegeben wurde, um den Text zu -beugen. Klasse werden typischerweise spezifiziert indem ein Kurzname verwendet wird, der den Filternamen indiziert, -wobei jeglicher üblicher Präfix entfernt wurde. - -Als Beispiel kann jede konkrete ``Zend_Filter`` Implementierung verwendet werden; trotzdem, statt auf diese als -'``Zend\I18n\Filter\Alpha``' oder '``Zend\Filter\StringToLower``' zu verweisen kann einfach '``Alpha``' oder -'``StringToLower``' spezifiziert werden. - -.. _zend.filter.inflector.paths: - -Pfade zu alternativen Filtern setzen ------------------------------------- - -``Zend\Filter\Inflector`` verwendet ``Zend\Loader\PluginLoader`` um das Laden von Filtern zu managen die von der -Beugung verwendet werden sollen. Standardmäßig, wird jeder Filter mit dem Präfix ``Zend_Filter`` vorhanden sein. -Um auf Filter mit diesem Präfix zuzugreifen, die aber tiefer in der Hirarchie vorhanden sind, kann einfach der -``Zend_Filter Präfix`` entfernt werden: - -.. code-block:: php - :linenos: - - // Verwendet Zend\Filter\Word\CamelCaseToDash als Regel - $inflector->addRules(array('script' => 'Word_CamelCaseToDash')); - -Um einen alternativen Pfad zu setzen hat ``Zend\Filter\Inflector`` eine Utility Methode die den Plugin Lader -verwendet, ``addFilterPrefixPath()``: - -.. code-block:: php - :linenos: - - $inflector->addFilterPrefixPath('My_Filter', 'My/Filter/'); - -Alternativ kann der Plugin Lader von der Beugung empfangen, und direkt mit Ihm interagiert werden: - -.. code-block:: php - :linenos: - - $loader = $inflector->getPluginLoader(); - $loader->addPrefixPath('My_Filter', 'My/Filter/'); - -Für weitere Optionen über das Bearbeiten von Pfaden zu Filtern sollte in die :ref:`PluginLoader Dokumentation -` gesehen werden. - -.. _zend.filter.inflector.targets: - -Das Ziel der Beugung setzen ---------------------------- - -Das Ziel der Beugung ist ein String mit einigen Platzhaltern für Variablen. Platzhalter haben die Form eines -Identifizierers, standardmäßig einem Doppelpunkt (':'), gefolgt von einem Variablennamen: ':script', ':path', -usw. Die ``filter()`` Methode sieht nach dem Identifizierer gefolgt von dem Variablennamen der ersetzt werden soll. - -Der Identifizierer kann geändert werden in dem die ``setTargetReplacementIdentifier()`` Methode verwendet wird, -oder indem er als drittes Argument dem Konstruktor übergeben wird: - -.. code-block:: php - :linenos: - - // Über Konstruktor: - $inflector = new Zend\Filter\Inflector('#foo/#bar.#sfx', null, '#'); - - // Über Zugriffsmethode: - $inflector->setTargetReplacementIdentifier('#'); - -Typischerweise wird das Ziel über den Konstruktor gesetzt. Trotzdem kann es Ziel später geändert werden (zum -Beispiel, um die Standardbeugung in Kernkomponenten die dem ``ViewRenderer`` oder ``Zend_Layout`` zu verändern). -``setTarget()`` kann für diese Zwecke verwendet werden: - -.. code-block:: php - :linenos: - - $inflector = $layout->getInflector(); - $inflector->setTarget('layouts/:script.phtml'); - -Zusätzlich kann es gewünscht sein einen Klassenmember für die eigene Klasse zu haben, der es erlaubt das -Beugungsziel zu aktualisieren -- ohne dass das Ziel jedesmal direkt aktualisiert werden muß (was Methodenaufrufe -erspart). ``setTargetReference()`` erlaubt es das zu tun: - -.. code-block:: php - :linenos: - - class Foo - { - /** - * @var string Beugungsziel - */ - protected $_target = 'foo/:bar/:baz.:suffix'; - - /** - * Konstruktor - * @return void - */ - public function __construct() - { - $this->_inflector = new Zend\Filter\Inflector(); - $this->_inflector->setTargetReference($this->_target); - } - - /** - * Setzt das Ziel; Aktualisiert das Ziel für die Beugung - * - * @param string $target - * @return Foo - */ - public function setTarget($target) - { - $this->_target = $target; - return $this; - } - } - -.. _zend.filter.inflector.rules: - -Beugungsregeln --------------- - -Wie bereits in der Einführung erwähnt, gibt es zwei Typen von Regeln: statische und filter-basierende. - -.. note:: - - Es ist wichtig festzustellen das unabhängig von der Methode in welche Regeln dem Inflector hinzugefügt werden, - entweder eine nach der anderen, oder alle auf einmal; die Reihenfolge sehr wichtig ist. Speziellere Namen, oder - Namen die andere Regelnamen enthalten können, müssen vor nicht speziellen Namen hinzugefügt werden. Wenn zum - Beispiel zwei Regelnamen 'moduleDir' und 'module' angenommen werden, sollte die 'moduleDir' Regel vor 'module' - auftreten, da 'module' in 'moduleDir' enthalten ist. Wenn 'module' vor 'moduleDir' hinzugefügt wurde, wird - 'module' als Teil von 'moduleDir' erkannt und und ausgeführt wobei 'Dir' im Ziel nicht ersetzt wird. - -.. _zend.filter.inflector.rules.static: - -Statische Regeln -^^^^^^^^^^^^^^^^ - -Statische Regeln führen einfach eine Ersetzung von Strings aus; sie sollten verwendet werden wenn ein Segment in -einem Ziel existiert das typischerweise statisch ist, aber welches der Entwickler ändern darf. Die -``setStaticRule()`` Methode kann verwendet werden um die Regel zu ändern: - -.. code-block:: php - :linenos: - - $inflector = new Zend\Filter\Inflector(':script.:suffix'); - $inflector->setStaticRule('suffix', 'phtml'); - - // Später ändern: - $inflector->setStaticRule('suffix', 'php'); - -So wie das Ziel selbst kann auch eine statische Regel an eine Referenz gebunden werden, was die Aktualisierung -einer einzelnen Variablen erlaubt statt das ein Methodenaufruf benötigt wird; das ist oft nützlich wenn die -Klasse intern eine Beugung verwendet, und die User den Beugungsmechanismus nicht holen sollen damit dieser -aktualisiert werden kann. Die ``setStaticRuleReference()`` kann verwendet werden um das durchzuführen: - -.. code-block:: php - :linenos: - - class Foo - { - /** - * @var string Suffix - */ - protected $_suffix = 'phtml'; - - /** - * Konstruktor - * @return void - */ - public function __construct() - { - $this->_inflector = new Zend\Filter\Inflector(':script.:suffix'); - $this->_inflector->setStaticRuleReference('suffix', $this->_suffix); - } - - /** - * Suffix setzen - * aktualisiert die statische Suffix Regel im Beugungsmechanismus - * - * @param string $suffix - * @return Foo - */ - public function setSuffix($suffix) - { - $this->_suffix = $suffix; - return $this; - } - } - -.. _zend.filter.inflector.rules.filters: - -Beugungsregeln filtern -^^^^^^^^^^^^^^^^^^^^^^ - -Die Filter von ``Zend_Filter`` können auch als Beugungsregeln verwendet werden. Genauso wie bei statische Regeln -werden Sie an eine Zielvariable gebunden; anders als statische Regeln können mehrfache Filter definiert werden die -zur Beugung verwendet werden. Diese Filter werden in der Reihenfolge ausgeführt, weswegen man vorsichtig sein -sollte und Sie in der Reihenfolge registriert die für die Daten die empfangen werden sollen Sinn machen. - -Regeln können durch Verwendung von ``setFilterRule()`` hinzugefügt werden (was alle vorhergehenden Regeln für -diese Variable überschreibt) oder ``addFilterRule()`` (was die neue Regel zu jeder existierenden Regel für diese -Variable hinzufügt). Filter werden in einem der folgenden Wege spezifiziert: - -- **String**. Der String kann ein Klassenname eines Filters, oder ein Segment des Klassennamens ohne jeglichem - Präfix sein der im Beugungs Plugin Lader gesetzt ist (standardmäßig, ohne den '``Zend_Filter``' Präfix). - -- **Filter Objekt**. Jede Objekt Instanz die ``Zend\Filter\Interface`` implementiert kann als ein Filter übergeben - werden. - -- **Array**. Ein Array von einem oder mehreren Strings oder Filterobjekten wie vorher definiert. - -.. code-block:: php - :linenos: - - $inflector = new Zend\Filter\Inflector(':script.:suffix'); - - // Setzt eine Regel um den Zend\Filter\Word\CamelCaseToDash Filter zu verwenden - $inflector->setFilterRule('script', 'Word_CamelCaseToDash'); - - // Eine Regel hinzufügen um Strings kleinzuschreiben - $inflector->addFilterRule('script', new Zend\Filter\StringToLower()); - - // Regeln en-masse setzen - $inflector->setFilterRule('script', array( - 'Word_CamelCaseToDash', - new Zend\Filter\StringToLower() - )); - -.. _zend.filter.inflector.rules.multiple: - -Viele Regeln auf einmal setzen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Typischerweise ist es einfacher viele Regeln auf einmal zu setzen als eine einzelne Variable und die Beugungsregeln -auf einmal zu konfigurieren. ``Zend\Filter\Inflector``'s ``addRules()`` und ``setRules()`` Methode erlaubt dies. - -Jede Methode nimmt ein Array von Variable und Regel Paaren, wobei die Regel alles sein kann was der Typ der Regel -akzeptiert (String, Filterobjekt, oder Array). Variablennamen akzeptieren eine spezielle Schreibweise um das Setzen -von statischen Regeln und Filterregeln zu erlauben, entsprechend der folgenden Schreibweise: - -- **':' prefix**: Filterregeln. - -- **kein Präfix**: statische Regel. - -.. _zend.filter.inflector.rules.multiple.example: - -.. rubric:: Mehrere Regeln auf einmal setzen - -.. code-block:: php - :linenos: - - // Es kann auch setRules() mit dieser Schreibweise verwendet werden: - $inflector->addRules(array( - // Filterregeln: - ':controller' => array('CamelCaseToUnderscore','StringToLower'), - ':action' => array('CamelCaseToUnderscore','StringToLower'), - - // Statische Regel: - 'suffix' => 'phtml' - )); - -.. _zend.filter.inflector.utility: - -Hilfsmethoden -------------- - -``Zend\Filter\Inflector`` hat eine Anzahl von Hilfsmethoden für das Empfangen und Setzen der Plugin Laders, die -Manipulation und das Empfangen von Regeln, und die Kontrolle ob und wann Ausnahmen geworfen werden. - -- ``setPluginLoader()`` kann verwendet werden wenn ein eigener Plugin Loader konfiguriert werden soll der mit - ``Zend\Filter\Inflector`` verwendet werden soll; ``getPluginLoader()`` empfängt den aktuell gesetzten. - -- ``setThrowTargetExceptionsOn()`` kann verwendet werden um zu kontrollieren ob ``filter()`` eine Ausnahme wirft, - oder nicht, wenn ein übergegebener Identifizierer der ersetzt werden soll nicht im Ziel gefunden wird. - Standardmäßig wird keine Ausnahme geworfen. ``isThrowTargetExceptionsOn()`` zeigt wie der aktuelle Wert ist. - -- ``getRules($spec = null)`` kann verwendet werden um alle registrierten Regeln für alle Variablen zu empfangen, - oder nur die Regeln für eine einzelne Variable. - -- ``getRule($spec, $index)`` holt eine einzelne Regel für eine gegebene Variable; das kann nützlich sein für das - Holen einer spezifischen Filterregel für eine Variable die eine Filterkette hat. ``$index`` muß übergeben - werden. - -- ``clearRules()`` löscht alle aktuell registrierten Regeln. - -.. _zend.filter.inflector.config: - -Zend_Config mit Zend\Filter\Inflector verwenden ------------------------------------------------ - -``Zend_Config`` kann verwendet werden um Regeln, Filter Präfix Pfade, oder andere Objektstati im -Beugungsmachanismus zu setzen, entweder durch die Übergabe eines ``Zend_Config`` Objekts zum Konstruktor, oder -durch ``setOptions()``. Die folgenden Einstellungen können spezifiziert werden: - -- ``target`` spezifiziert das Beugungsziel. - -- ``filterPrefixPath`` spezifiziert ein oder mehrere Filter Präfix und Pfad Paare für die Verwendung mit dem - Beugungsmechanismus. - -- ``throwTargetExceptionsOn`` sollte ein Boolscher Wert sein der anzeigt ob eine Ausnahme geworfen wird, oder nicht - geworfen wird, wenn ein Idenzifizierer der ersetzt werden soll nach der Beugung noch immer vorhanden ist. - -- ``targetReplacementIdentifier`` spezifiziert das Zeichen das verwendet wird wenn Ersetzungsvariablen im - Zielstring identifiziert werden. - -- ``rules`` spezifiziert ein Array von Beugungsregeln; es sollte aus Schlüsseln bestehen die entweder Werte oder - Arrays von Werten spezifizieren, die mit ``addRules()`` übereinstimmen. - -.. _zend.filter.inflector.config.example: - -.. rubric:: Zend_Config mit Zend\Filter\Inflector verwenden - -.. code-block:: php - :linenos: - - // Mit dem Konstruktor: - $config = new Zend\Config\Config($options); - $inflector = new Zend\Filter\Inflector($config); - - // Oder mit setOptions(): - $inflector = new Zend\Filter\Inflector(); - $inflector->setOptions($config); - - diff --git a/docs/languages/de/modules/zend.filter.input.rst b/docs/languages/de/modules/zend.filter.input.rst deleted file mode 100644 index c2fa075e7..000000000 --- a/docs/languages/de/modules/zend.filter.input.rst +++ /dev/null @@ -1,787 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.input: - -Zend\Filter\Input -================= - -``Zend\Filter\Input`` bietet ein ausgezeichnetes Interface um mehrere Filter und Prüfer zu assoziieren, Sie -Kollektionen von Daten hinzuzufügen, und Eingabewerte zu empfangen nachdem diese durch die Filter und Prüfer -bearbeitet wurden. Werte werden standardmäßig in kommentiertem Format zurückgegeben für sichere *HTML* Ausgabe. - -Angenommen das diese Klasse ein Käfig für externe Daten ist. Daten betreten die Anwendung von externen Quellen, -wie *HTTP* Anfrageparameter, *HTTP* Header, ein Web Service, oder sogar durch Lesen von eine Datenbank oder anderen -Dateien. Daten werden zuerst in den Käfig gesperrt, und die Anwendung kann diese Daten nur dann Stück für Stück -empfangen wenn dem Käfig gesagt wird, was diese Daten sein sollten und wie geplant ist diese zu verwenden. Der -Käfig inspiziert die Daten auf Gültigkeit. Es kann passieren das er die Datenwerte kommentiert für den -entsprechenden Kontext. Der Käfig entlässt die Daten nur wen diese alle Notwendigkeiten komplett erfüllen. Mit -einem einzigen und bequemen Interface, wird gutes Programmierverhalten ermöglicht und es lässt Entwickler -darüber nachdenken wie die Daten verwendet werden. - -- **Filter** wandeln Eingabewerte um, inden Sie Zeichen in dem Wert entfernen oder Ändern. Das Ziel ist es - Eingabewerte zu "normalisieren" bis diese einem erwarteten Format entsprechen. Zum Beispiel, wenn ein String von - nummerischen Zeichen benötigt wird, und der Eingabewert "abc123" ist dann könnte eine erwartete Umwandlung die - Änderung des Wertes in den String "123" sein. - -- **Prüfer** prüfen Eingabewerte gegenüber Kriterien und melden ob diese den Test bestanden haben oder nicht. - Der Wert wird nicht geändert, aber die Prüfung kann fehlschlagen. Zum Beispiel, wenn ein String wie eine Email - Adresse aussehen muß, und der Eingabewert "abc123" ist, dann wird der Wert als nicht gültig angenommen. - -- **Auskommentierer** wandeln einen Wert um indem Sie magisches Verhalten von bestimmten Zeichen entfernen. In - einigen Ausgabekontexten haben speziellen Zeichen eine Bedeutung. Zum Beispiel das Zeichen '<' und '>' begrenzen - *HTML* Tags, und wenn ein String diese Zeichen enthält und in einem *HTML* Kontext ausgegeben wird, könnte der - Inhalt zwischen Ihnen die Ausgabe oder Funktionalität der *HTML* Präsentation beeinflussen. Das auskommentieren - der Zeichen entfernt die spezielle Bedeutung, damit Sie als literale Zeichen ausgegeben werden. - -Um ``Zend\Filter\Input`` zu verwenden, müssen die folgenden Schritte unternommen werden: - -. Filter und Prüfregeln deklarieren - -. Filter und Prüfbearbeiter erstellen - -. Eingabedaten bereitstellen - -. Geprüfte Felder und andere Reports erhalten - -Die folgenden Sektionen beschreiben die Schritte für die Verwendung dieser Klasse. - -.. _zend.filter.input.declaring: - -Filter und Prüfregeln deklarieren ---------------------------------- - -Vor der Erstellung einer Instanz von ``Zend\Filter\Input``, muß ein Array von Filterregeln deklariert werden und -auch ein Array von Prüfregeln. Dieses assoziative Array verbindet einen Regelnamen mit einem Filter oder Prüfer -oder einer Kette von Filtern oder Prüfern. - -Das folgende Beispiel eines Sets von Filterregeln deklariert, daß das Feld 'month' von ``Zend\Filter\Digits`` -gefiltert wird, und das Feld 'account' von ``Zend\Filter\StringTrim`` gefiltert wird. Anschließend wird ein Set -von Prüfregeln deklariert welches prüft dass das Feld 'account' nur dann gültig ist wenn es nur alphabetische -Zeichen enthält. - -.. code-block:: php - :linenos: - - $filters = array( - 'month' => 'Digits', - 'account' => 'StringTrim' - ); - - $validators = array( - 'account' => 'Alpha' - ); - -Jeder Schlüssel im obigen ``$filters`` Array ist der Name einer Regel die auf einen Filter für ein spezielles -Datenfeld angewendet wird. Standardmäßig, ist der Name der Regel auch der Name des Feldes der Eingabedaten auf -welche die Regel angewendet werden soll. - -Eine Regel kann in verschiedenen Formaten deklariert werden: - -- Ein einfacher skalarer String, der einem Klassennamen entspricht: - - .. code-block:: php - :linenos: - - $validators = array( - 'month' => 'Digits', - ); - -- Die Instanz eines Objektes einer der Klassen die ``Zend\Filter\Interface`` oder ``Zend\Validate\Interface`` - implementieren. - - .. code-block:: php - :linenos: - - $digits = new Zend\Validate\Digits(); - - $validators = array( - 'month' => $digits - ); - -- Ein Array um eine Kette von Filtern oder Prüfern zu deklarieren. Die Elemente dieses Arrays können Strings sein - die Klassennamen entsprechen oder Filter/Prüfobjekte, wie in den oben beschriebenen Fällen. Zusätzlich kann - eine dritte Wahl verwendet werden: Ein Array das einen String enthält der dem Klassennamen entspricht gefolgt - von Argumenten die dessen Konstruktor übergeben werden. - - .. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - 'Digits', // String - new Zend\Validate\Int(), // Objekt Instanz - array('Between', 1, 12) // String mit Konstruktor Argumenten - ) - ); - -.. note:: - - Wenn ein Filter oder Prüfer mit Konstruktor Argumenten in einem Array deklariert wird, muß ein Array für die - Regel erstellt werden, selbst wenn die Regel nur einen Filter oder Prüfer enthält. - -Es kann ein spezieller "Wildcard" Regelschlüssel **'*'**, entweder im Array des Filters oder im Array des -Prüfers, verwendet werden. Das bedeutet das der Filter oder Prüfer der in dieser Regel deklariert wird allen -Feldern der Eingabedaten zugewiesen wird. Es gilt zu beachten das die Reihenfolge der Einträge im Array des -Filters oder im Array des Prüfers bedeutend ist; die Regeln werden in der gleichen Reihenfolge zugewiesen in dem -diese deklariert wurden. - -.. code-block:: php - :linenos: - - $filters = array( - '*' => 'StringTrim', - 'month' => 'Digits' - ); - -.. _zend.filter.input.running: - -Filter und Prüfbearbeiter erstellen ------------------------------------ - -Nachdem die Filter und Prüfarrays deklariert wurden, können diese als Argumente im Konstruktor von -``Zend\Filter\Input`` verwendet werden. Das gibt ein Objekt zurück welches alle Filter- und Prüfregeln kennt, und -das verwendet werden kann um ein oder mehrere Sets von Eingabedaten zu bearbeiten. - -.. code-block:: php - :linenos: - - $input = new Zend\Filter\Input($filters, $validators); - -Man kann Eingabedaten als drittes Argument im Konstruktor spezifizieren. Die Datenstruktur ist ein assoziatives -Array. Die superglobalen Standardvariablen in *PHP*, ``$_GET`` und ``$_POST``, sind Beispiele für dieses Format. -Man kann jede dieser Variablen als Eingabedaten für ``Zend\Filter\Input`` verwenden. - -.. code-block:: php - :linenos: - - $data = $_GET; - - $input = new Zend\Filter\Input($filters, $validators, $data); - -Alternativ kann die ``setData()`` Methode verwendet werden, indem ein assoziatives Array von Schlüssel/Werte -Paaren, im selben Format wie oben beschrieben, übergeben wird. - -.. code-block:: php - :linenos: - - $input = new Zend\Filter\Input($filters, $validators); - $input->setData($newData); - -Die ``setData()`` Methode definiert Daten nocheinmal, in einem existierenden ``Zend\Filter\Input`` Objekt ohne die -Filter- und Prüfregeln zu verändern. Wenn diese Methode verwendet wird können die selben Regeln, an anderen Sets -von Eingabedaten, wieder verwendet werden. - -.. _zend.filter.input.results: - -Geprüfte Felder und andere Reporte empfangen --------------------------------------------- - -Nachdem Filter und Prüfer deklariert wurden und der Eingabeprozessor erstellt wurde, können Reporte von -fehlenden, unbekannten und ungültigen Feldern empfangen werden. Man kann auch die Werte der Felder erhalten, -nachdem die Filter angewendet wurden. - -.. _zend.filter.input.results.isvalid: - -Abfragen ob die Eingabe gültig ist -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wenn alle Eingabedaten die Prüfregeln bestanden haben, gibt die ``isValid()`` Methode ``TRUE`` zurück. Wenn -irgendein Feld ungültig ist oder ein benötigtes Feld fehlt, gibt die ``isValid()`` Methode ``FALSE`` zurück. - -.. code-block:: php - :linenos: - - if ($input->isValid()) { - echo "OK\n"; - } - -Diese Methode akzeptiert ein optionales String Argument, das ein individuelles Feld benennt. Wenn das spezifizierte -Feld die Prüfung passiert und bereit ist um abgeholt zu werden, gibt ``isValid('fieldName')`` den Wert ``TRUE`` -zurück. - -.. code-block:: php - :linenos: - - if ($input->isValid('month')) { - echo "Feld 'month' ist OK\n"; - } - -.. _zend.filter.input.results.reports: - -Ungültige, fehlende oder unbekannte Felder erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- **Ungültige** Felder sind jene, die einen oder mehrere Ihrer Prüfungen nicht bestehen. - -- **Fehlende** Felder sind jene die nicht in den Eingabedaten vorhanden sind, aber im Metakommando - ``'presence'=>'required'`` (Siehe die :ref:`spätere Sektion ` über - Metakommandos) deklariert wurden. - -- **Unbekannte** Felder sind jene die in keiner einzigen Regel, im Array der Prüfer, deklariert wurden, aber in - den Eingabedaten vorkommen. - -.. code-block:: php - :linenos: - - if ($input->hasInvalid() || $input->hasMissing()) { - $messages = $input->getMessages(); - } - - // getMessages() gibt einfach die Zusammenfassung von getInvalid() - // und getMissing() zurück - - if ($input->hasInvalid()) { - $invalidFields = $input->getInvalid(); - } - - if ($input->hasMissing()) { - $missingFields = $input->getMissing(); - } - - if ($input->hasUnknown()) { - $unknownFields = $input->getUnknown(); - } - -Das Ergebnis der ``getMessages()`` Methode ist ein assoziatives Array, das die Regelnamen einem Array von -Fehlermeldungen, relativ zu diesen Regeln, zuordnet. Es ist anzumerken das der Index dieses Arrays der Name der -Regel ist die in der Regeldeklaration verwendet wird, und welche von den Namen der Felder, die von der Regel -geprüft werden, unterschiedlich sein kann. - -Die ``getMessages()`` Methode gibt eine Zusammenfassung der Arrays zurück die von ``getInvalid()`` und -``getMissing()`` retourniert werden. Diese Methoden geben Subsets der Nachrichten zurück, relativ zu den -Prüffehlern, oder Felder die als benötigt deklariert wurden aber in der Eingabe fehlen. - -Die ``getErrors()`` Methode gibt ein assoziatives Array zurück, in dem die Regelnamen einem Array von Fehler -Identifizierern entsprechen. Fehler Identifizierer sind fixe Strings, um Gründe für eine fehlgeschlagene -Prüfung, zu identifizieren, wobei Nachrichten selbst geändert werden können. Siehe :ref:`dieses Kapitel -` für mehr Informationen. - -Die Nachricht die von ``getMissing()`` zurückgegeben wird kann als Argument beim ``Zend\Filter\Input`` -Konstruktor, oder durch verwenden der ``setOptions()`` Methode, spezifiziert werden. - -.. code-block:: php - :linenos: - - $options = array( - 'missingMessage' => "Feld '%field%' wird benötigt" - ); - - $input = new Zend\Filter\Input($filters, $validators, $data, $options); - - // alternative Methode: - - $input = new Zend\Filter\Input($filters, $validators, $data); - $input->setOptions($options); - -Und man kann auch einen Übersetzer hinzufügen der einem die Möglichkeit bietet mehrere Sprachen für die -Meldungen anzubieten welche von ``Zend\Filter\Input`` zurückgegeben werden. - -.. code-block:: php - :linenos: - - $translate = new Zend\Translator\Adapter\Array(array( - 'content' => array( - Zend\Filter\Input::MISSING_MESSAGE => "Wo ist das Feld?" - ) - ); - - $input = new Zend\Filter\Input($filters, $validators, $data); - $input->setTranslator($translate); - -Wenn man einen anwendungsweiten Übersetzer verwendet, dann wird dieser von ``Zend\Filter\Input`` verwendet. In -diesem Fall muss man den Übersetzer nicht manuell setzen. - -Das Ergebnis der ``getUnknown()`` Methode ist ein assoziatives Array, in dem die Feldnamen den Feldwerten -zugeordnet werden. Feldnamen werden in diesem Fall als Arrayschlüssel verwendet, statt als Regelnamen, weil keine -Regel die Feld erwähnt die unbekannte Felder sind. - -.. _zend.filter.input.results.escaping: - -Gültige Felder bekommen -^^^^^^^^^^^^^^^^^^^^^^^ - -Alle Felder die entweder ungültig, fehlend oder unbekannt sind, werden als gültig angenommen. Man kann Werte für -diese Felder erhalten indem ein magischer Accessor verwendet wird. Es gibt auch die nicht-magische Accessor -Methoden ``getEscaped()`` und ``getUnescaped()``. - -.. code-block:: php - :linenos: - - $m = $input->month; // Ausgabe vom magischen Accessor kommentieren - $m = $input->getEscaped('month'); // Ausgabe kommentieren - $m = $input->getUnescaped('month'); // nicht kommentieren - -Standardmäßig, wenn ein Wert empfangen wird, wird er mit ``Zend\Filter\HtmlEntities`` gefiltert. Das ist der -Standard weil angenommen wird, das die am meisten übliche Verwendung, die Ausgabe von Werten von einem Feld in -*HTML* ist. Der HtmlEntities Filter hilft ungewollten Ausgaben von Code vorzubeugen, welche zu Sicherheitsproblemen -führen könnten. - -.. note:: - - Wie oben gezeigt, kann man unkommentierte Werte erhalten undem die ``getUnescaped()`` Methode verwendet wird, - aber man muß dafür Code schreiben um die Werte sicher zu verwenden, und Sicherheitsprobleme, wie - Verletzbarkeit für Seitenübergreifende Skript Attacken zu vermeiden. - -.. warning:: - - **Ungeprüfte Felder escapen** - - Wie vorher erwähnt gibt ``getEscaped()`` nur geprüfte Felder zurück. Felder die keine zugeordnete Prüfung - haben können auf diesem Weg nicht empfangen werden. Trotzdem gibt es einen möglichen Weg. Man kann eine leere - Prüfung für alle Felder hinzufügen. - - .. code-block:: php - :linenos: - - $validators = array('*' => array()); - - $input = new Zend\Filter\Input($filters, $validators, $data, $options); - - Aber es sei gewarnt das die Verwendung dieser Schreibweise eine Sicherheitslücke eröffnet welche für - Cross-Site Scripting Attacken verwendet werden könnte. Deswegen sollte man immer individuelle Prüfungen für - jedes Feld setzen. - -Es kann ein anderer Filter für das auskommentieren von Werten definiert werden, durch seine Spezifikation im Array -der Optionen des Konstruktors: - -.. code-block:: php - :linenos: - - $options = array('escapeFilter' => 'StringTrim'); - $input = new Zend\Filter\Input($filters, $validators, $data, $options); - -Alternativ kann die ``setDefaultEscapeFilter()`` Methode verwendet werden: - -.. code-block:: php - :linenos: - - $input = new Zend\Filter\Input($filters, $validators, $data); - $input->setDefaultEscapeFilter(new Zend\Filter\StringTrim()); - -Bei jeder Verwendung, kann der Kommentarfilter als String Basisname der Filterklasse, oder als Objektinstanz einer -Filterklasse, spezifiziert werden. Der Kommentarfilter kann eine Instanz einer Filterkette, oder ein Objekt der -``Zend_Filter`` Klasse sein. - -Filter die Ausgaben kommentieren sollen auf diesen Weg ausgeführt werden, um sicherzustellen das Sie nach der -Prüfung ausgeführt werden. Andere Filter, die im Array der Filterregeln deklariert werden, werden bei den -Eingabedaten angewendet bevor diese Daten geprüft werden. Wenn Kommentarfilter vor der Prüfung ausgeführt -werden, würde der Prozess der Prüfung viel komplexer sein um sowohl kommentierte als auch unkommentierte -Versionen der Daten anzubieten. Deswegen wird empfohlen, Filter die Ausgaben mit ``setDefaultEscapeFilter()`` -kommentieren, nicht im ``$filters`` Array zu deklarieren. - -Es gibt nur eine ``getEscaped()`` Methode, und deswegen kann nur ein Filter für das kommentieren spezifiziert -werden (trotzdem kann dieser Filter eine Filterkette sein). Wenn eine einzelne Instanz von ``Zend\Filter\Input`` -benötigt wird, um kommentierte Ausgaben zu erhalten, und mehr als eine Filtermethode angewendet werden soll, -sollte ``Zend\Filter\Input`` erweitert werden und neue Methoden in der Subklasse implementiert werden um Wert auf -unterschiedlichen Wegen zu erhalten. - -.. _zend.filter.input.metacommands: - -Metakommandos verwenden um Filter oder Prüfregeln zu kontrollieren ------------------------------------------------------------------- - -Zusätzlich zum deklarieren der Übereinstimmungen von Feldern zu Filtern oder Prüfer, können einige -"Metakommandos" in der Array Deklaration spezifiziert werden um einige optionale Verhaltensweisen von -``Zend\Filter\Input`` zu kontrollieren. Metakommandos treten als String-indizierte Einträge in einem gegebenen -Filter- oder Prüfarray Wert auf. - -.. _zend.filter.input.metacommands.fields: - -Das FIELDS Metakommando -^^^^^^^^^^^^^^^^^^^^^^^ - -Wenn der Name der Regel für einen Filter oder Prüfer anders lautet als das Feld in welchem er angewendet werden -soll, kann der Feldname mit dem 'fields' Metakommando spezifiziert werden. - -Dieses Metakommando kann durch Verwendung der Klassenkonstanten ``Zend\Filter\Input::FIELDS`` statt der Angabe -eines Strings spezifiziert werden. - -.. code-block:: php - :linenos: - - $filters = array( - 'month' => array( - 'Digits', // Namen als Integer Index [0] filtern - 'fields' => 'mo' // Namen als String Index ['fields'] filtern - ) - ); - -Im obigen Beispiel wendet die Filterregel den 'digits' Filter am Eingabefeld, das 'mo' heißt, an. Der String -'month' wird einfach ein mnemonischer Schlüsselfür diese Filterregel; er wird nicht als Filtername verwendet wenn -der Filter mit dem 'fields' Metakommando spezifiziert wird, aber er wird als Regelname verwendet. - -Der Standardwert des 'fields' Metakommandos ist der Index der aktuellen Regel. Im obigen Beispiel wird die Regel, -wenn das 'fields' Metakommando nicht spezifiziert wird, auf das Eingabefeld das 'month' heißt, angewendet. - -Eine weitere Verwendung des 'fields' Metakommandos ist es Felder für Filter oder Prüfer zu spezifizieren die -mehrere Felder als Eingabe benötigen. Wenn das 'fields' Metakommando ein Array ist, ist das Argument des -korrespondierenden Filters oder Prüfers ein Array mit den Werten dieser Felder. Zum Beispiel ist es für Benutzer -üblich einen Passwort String in zwei Feldern zu spezifizieren, und diese müssen den selben String in beide Felder -eingeben. Man kann zum Beispiel eine Prüfklasse implmentieren die ein Array Argument annimmt, und ``TRUE`` -zurückgibt wenn alle Werte im Array identisch zum jeweils anderen sind. - -.. code-block:: php - :linenos: - - $validators = array( - 'password' => array( - 'StringEquals', - 'fields' => array('password1', 'password2') - ) - ); - // Inkludiert die hypotetische Klasse Zend\Validate\StringEquals, - // übergibt dieser ein Array Argument das den Wert der beiden Eingabe - // Datenfelder enthält die 'password1' und 'password2' heißen. - -Wenn die Prüfung dieser Regel fehlschlägt wird der Schlüssel der Regel ('password') im Rückgabewert von -``getInvalid()`` verwendet und nicht eine der benannten Felder im 'fields' Metakommando. - -.. _zend.filter.input.metacommands.presence: - -Das PRESENCE Metakommando -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Jeder Eintrag im Prüfarray kann ein Metakommando haben das 'presence' heißt. Wenn der Wert dieses Metakommandos -'required' ist muß dieses Feld in den Eingabedaten existieren, andernfalls wird es als fehlendes Feld gemeldet. - -Das Metakommando kann auch spezifiziert werden indem die Klassenkonstante ``Zend\Filter\Input::PRESENCE`` statt dem -String verwendet wird. - -.. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - 'digits', - 'presence' => 'required' - ) - ); - -Der Standardwert dieses Metakommandos ist 'optional'. - -.. _zend.filter.input.metacommands.default: - -Das DEFAULT_VALUE Metakommando -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wenn ein Feld, für das ein Wert mit dem 'default' Metakommando für diese Regel, in den Eigabedaten vorhanden ist, -nimmt das Feld den Wert dieses Metakommandos. - -Dieses Metakommando kann auch spezifiziert werden indem die Klassenkonstante ``Zend\Filter\Input::DEFAULT_VALUE`` -statt einem String verwendet wird. - -Der Standardwert wird dem Feld zugeordnet bevor irgendeiner der Prüfungen stattfindet. Der Standardwert wird dem -Feld nur für die aktuelle Regel zugeordnet; wenn das selbe Weld in einer folgenden Regel referenziert wird, hat -dieses Feld keinen Wert wenn diese Regel evaluiert wird. Deshalb können verschiedene Regeln auch verschiedene -Standardwerte für ein gegebenes Feld deklarieren. - -.. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - 'digits', - 'default' => '1' - ) - ); - - // kein Wert für das 'month' Feld - $data = array(); - - $input = new Zend\Filter\Input(null, $validators, $data); - echo $input->month; // gibt 1 aus - -Wenn eine Regel das ``FIELDS`` Metakommando verwendet um ein Array mit mehrfachen Feldern zu definieren, kann ein -Array für das ``DEFAULT_VALUE`` Metakommando definiert werden und der Standard der korrespondierenden Schlüssel -wird für alle fehlenden Felder verwendet. Wenn ``FIELDS`` mehrfache Felder definiert aber ``DEFAULT_VALUE`` nur -ein skalarer Wert ist, dann wird dieser Standardwert als Wert für alle fehlenden Feldern im Array verwendet. - -Es gibt keinen Standardwert für dieses Metakommando. - -.. _zend.filter.input.metacommands.allow-empty: - -Das ALLOW_EMPTY Metakommando -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Standardmäßig, wenn ein Feld in den Eingabedaten existiert, wird Ihm der Prüfer zugeordnet selbst wenn der Wert -des Feldes ein leerer String ist (**''**). Das kann zu einem Fehler in der Prüfung führen. Zum Beispiel, wenn ein -Prüfer auf Ziffern prüft und es keine gibt weil ein leerer String keine Zeichen hat, weil der Prüfer dann die -Daten als fehlerhaft meldet. - -Wenn, in eigenen Fällen, ein leerer String als gültig angenommen werden soll, kann das Metakommando 'allowEmpty' -auf ``TRUE`` gesetzt werden. Dann passieren die Eingabedaten die Prüfung wenn sie in den Eingabedaten vorhanden -sind, aber der Wert ein leerer String ist. - -Dieses Metakommando kann spezifiziert werden indem die Klassenkonstante ``Zend\Filter\Input::ALLOW_EMPTY`` statt -einem String verwendet wird. - -.. code-block:: php - :linenos: - - $validators = array( - 'address2' => array( - 'Alnum', - 'allowEmpty' => true - ) - ); - -Der Standardwert dieses Metakommandos ist ``FALSE``. - -Im unüblichen Fall das eine Prüfregel mit keinem Prüfer definiert wird, aber das 'allowEmpty' Metakommando -``FALSE`` ist (was bedeutet, dass das Feld als ungültig angenommen wird wenn es leer ist), gibt -``Zend\Filter\Input`` eine Standard Fehlermeldung zurück die mit ``getMessages()`` empfangen werden kann. Diese -Meldung kann spezifiziert werden indem die 'notEmptyMessage' als Argument für den ``Zend\Filter\Input`` -Constructor verwendet wird oder indem die ``setOptions()`` Methode verwendet wird. - -.. code-block:: php - :linenos: - - $options = array( - 'notEmptyMessage' => "Ein nicht-leerer Wert wird für das Feld '%field%' benötigt" - ); - - $input = new Zend\Filter\Input($filters, $validators, $data, $options); - - // alternative Methode: - - $input = new Zend\Filter\Input($filters, $validators, $data); - $input->setOptions($options); - -.. _zend.filter.input.metacommands.break-chain: - -Das BREAK_CHAIN Metakommando -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Standardmäßig, wenn eine Regel mehr als einen Prüfer hat werden alle Prüfer auf die Eingabe angewendet, und die -resultierende Nachricht enthält alle Fehlermeldungen die durch die Eingabe verursacht wurden. - -Alternativ, wenn der Wert des 'breakChainOnFailure' Metakommandos ``TRUE`` ist, terminiert die Prüfkette nachdem -der erste Prüfer fehlschlägt. Die Eingabedaten werden nicht gegen nachfolgende Prüfer in der Kette geprüft. Sie -können also weitere Fehlschläge verursachen selbst wenn der eine, der gemeldet wurde, korrigiert wird. - -Dieses Metakommando kann spezifiziert werden indem die Klassenkonstante ``Zend\Filter\Input::BREAK_CHAIN`` statt -einem String verwendet wird. - -.. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - 'Digits', - new Zend\Validate\Between(1,12), - new Zend\Validate\GreaterThan(0), - 'breakChainOnFailure' => true - ) - ); - $input = new Zend\Filter\Input(null, $validators); - -Der Standardwert dieses Metakommandos ist ``FALSE``. - -Die Klasse der Prüfketten, ``Zend_Validate``, ist flexibler was das Durchbrechen von ausgeführten Ketten betrifft -als ``Zend\Filter\Input``. Mit der ersten Klasse, kann eine Option gesetzt werden um die Kette, für jeden Prüfer -in der Kette, bei Fehlern unabhängig von jedem anderen Prüfer abzubrechen. Mit der anderen Klasse wird der -definierte Wert des 'breakChainOnFailure' Metakommandos für eine Regel, einheitlich für alle Regeln in der Regel, -angewendet. Wenn eine flexiblere Verwendung benötigt wird, sollte die Prüfkette selbst erstellt werden und diese -als Objekt in der Definition der Prüfregel verwendet werden: - -.. code-block:: php - :linenos: - - // Prüfkette mit nicht einheitlichen breakChainOnFailure Attributen - // erstellen - $chain = new Zend\Validate\Validate(); - $chain->addValidator(new Zend\Validate\Digits(), true); - $chain->addValidator(new Zend\Validate\Between(1,12), false); - $chain->addValidator(new Zend\Validate\GreaterThan(0), true); - - // Prüfregeln deklarieren welche die oben definierte Kette verwenden - $validators = array( - 'month' => $chain - ); - $input = new Zend\Filter\Input(null, $validators); - -.. _zend.filter.input.metacommands.messages: - -Das MESSAGES Metakommando -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann Fehlermeldungen für jeden Prüfer in einer Regel spezifizieren indem das 'messages' Metakommando -verwendet wird. Der Wert dieses Metakommandos variiert, je nachdem ob man mehrere Prüfer in der Regel hat, oder ob -man die Nachricht für eine spezielles Fehlerereignis in einem angegebenen Prüfer setzen will. - -Dieses Metakommando kann spezifiziert werden indem die Klassenkonstante ``Zend\Filter\Input::MESSAGES`` statt einem -String verwendet wird. - -Anbei ist ein einfaches Beispiel wie eine Standard fehlermeldung für einen einzelnen Prüfer gesetzt wird. - -.. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - 'digits', - 'messages' => 'Ein Monat darf nur aus Ziffern bestehen' - ) - ); - -Wenn mehrere Prüfer vorhanden sind für die eine Fehlermeldung gesetzt werden soll, sollte ein Array für dem Wert -des 'messages' Metakommandos verwendet werden. - -Jedes Element dieses Array wird dem Prüfer an der gleichen Indexposition zugeordnet. Man kann eine Nachricht für -die Prüfung an der Position **n** spezifizieren indem der Wert von **n** als Array Index verwendet wird. So kann -einigen Prüfern erlaubt werden Ihre eigenen Standardnachrichten zu verwenden, wärend die Nachricht für einen -nachfolgenden Prüfer in der Kette gesetzt wird. - -.. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - 'digits', - new Zend\Validate\Between(1, 12), - 'messages' => array( - // Standardnachricht für Prüfer [0] verwenden - // Neue Nachricht für Prüfer [1] setzen - 1 => 'Der Wert für Monat muß zwischen 1 und 12 sein' - ) - ) - ); - -Wenn einer der Prüfer mehrere Fehlermeldungen besitzt, werden diese durch Nachrichten Schlüssel identifiziert. Es -gibt verschiedene Schlüssel in jeder Prüfklasse, welche als Identifizierer für Fehlernachrichten fungieren, die -die entsprechende Prüfklasse erstellen kann. Jede Prüfklasse definiert Konstanten für Ihre -Nachrichtenschlüssel. Diese Schlüssel können im 'messages' Metakommando verwendet werden indem Sie als -assoziatives Array übergeben werden statt als String. - -.. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - 'digits', new Zend\Validate\Between(1, 12), - 'messages' => array( - 'Ein Monat darf nur aus Ziffern bestehen', - array( - Zend\Validate\Between::NOT_BETWEEN => - 'Der Wert %value% vom Monat sollte zwischen ' . - '%min% und %max% sein', - Zend\Validate\Between::NOT_BETWEEN_STRICT => - 'Der Wert %value% vom Monat darf nur zwischen ' . - '%min% und %max% sein' - ) - ) - ) - ); - -Es sollte für jede Prüfklasse in die Dokumentation gesehen werden, um zu wissen ob diese mehrere -Fehlernachrichten hat, welche Schlüssel die Nachrichten haben und welche Token im Nachrichtentemplate verwendet -werden können. - -Wenn man nur eine Prüfung in der Prüfregel hat, oder aller verwendeten Prüfungen die gleiche Nachricht gesetzt -haben, dann kann auf Sie ohne zusätzliche Erstellung eines Arrays referiert werden: - -.. code-block:: php - :linenos: - - $validators = array( - 'month' => array( - new Zend\Validate\Between(1, 12), - 'messages' => array( - Zend\Validate\Between::NOT_BETWEEN => - 'Month value %value% must be between ' . - '%min% and %max%', - Zend\Validate\Between::NOT_BETWEEN_STRICT => - 'Month value %value% must be strictly between ' . - '%min% and %max%' - ) - ) - ); - -.. _zend.filter.input.metacommands.global: - -Verwenden von Optionen um Metakommandos für alle Regeln zu setzen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Der Standardwert für die 'allowEmpty', 'breakChainOnFailure', und 'presence' Metakommandos kann für alle Regeln -gesetzt werden indem das ``$options`` Argument für den Konstruktor von ``Zend\Filter\Input`` verwendet wird. Das -erlaubt das Setzen des Standardwertes für alle Regeln, ohne dass das Metakommando für jede Regel gesetzt werden -muß. - -.. code-block:: php - :linenos: - - // Der Standard wird bei allen Feldern gesetzt und erlaubt einen leeren String. - $options = array('allowEmpty' => true); - - // Diese Regeldefinition kann überschrieben werden, wenn ein Feld keinen leeren - // String akzeptieren soll - $validators = array( - 'month' => array( - 'Digits', - 'allowEmpty' => false - ) - ); - - $input = new Zend\Filter\Input($filters, $validators, $data, $options); - -Die 'fields', 'messages', und 'default' Metakommandos können nicht mit dieser Technik gesetzt werden. - -.. _zend.filter.input.namespaces: - -Namensräume für Filterklassen hinzufügen ----------------------------------------- - -Standardmäßig, wenn ein Filter oder Prüfer als String deklariert wird, sucht ``Zend\Filter\Input`` nach der -korrespondierenden Klasse unter dem ``Zend_Filter`` oder ``Zend_Validate`` Namensraum. Ein Filter der zum Beispiel -nach dem String 'digits' benannt ist wird in der Klasse ``Zend\Filter\Digits`` gefunden. - -Wenn eigene Filter oder Prüfklassen geschrieben werden, oder Filter oder Prüfer von Drittanbietern verwendet -werden, können diese Klassen in einem anderen Namensraum als ``Zend_Filter`` oder ``Zend_Validate`` existieren. -``Zend\Filter\Input`` kann mitgeteilt werden, das in zusätzlichen Namensräumen gesucht werden soll. Namensräume -können in den Konstruktor Optionen spezifiziert werden: - -.. code-block:: php - :linenos: - - $options = array('filterNamespace' => 'My_Namespace_Filter', - 'validatorNamespace' => 'My_Namespace_Validate'); - $input = new Zend\Filter\Input($filters, $validators, $data, $options); - -Alternativ kann die ``addValidatorPrefixPath($prefix, $path)`` oder die ``addFilterPrefixPath($prefix, $path)`` -Methoden verwendet werden, welche direkt auf den Plugin Lader verweisen der von ``Zend\Filter\Input`` verwendet -wird: - -.. code-block:: php - :linenos: - - $input->addValidatorPrefixPath('Other_Namespace', 'Other/Namespace'); - $input->addFilterPrefixPath('Foo_Namespace', 'Foo/Namespace'); - - // Die Suchrichtung für die Prüfungen ist jetzt: - // 1. My_Namespace_Validate - // 1. My_Namespace - // 3. Zend_Validate - - // Die Suchrichtung für die Filter ist jetzt: - // 1. My_Namespace_Filter - // 2. Foo_Namespace - // 3. Zend_Filter - -``Zend_Filter`` ``und Zend_Validate`` können als Namensraum nicht entfernt werden, es können nur Namensräume -hinzugefügt werden. Benutzerdefinierte Namensräume werden zuerst durchsucht, Zend Namensräume werden zuletzt -durchsucht. - -.. note:: - - Ab der Version 1.5 sollte die Funktion ``addNamespace($namespace)`` nicht mehr verwendet werden und wurde durch - den Plugin Lader getauscht. Und ``addFilterPrefixPath()`` sowie ``addValidatorPrefixPath()`` wurden - hinzugefügt. Auch die Konstante ``Zend\Filter\Input::INPUT_NAMESPACE`` sollte jetzt nicht mehr verwendet - werden. Die Konstanten ``Zend\Filter\Input::VALIDATOR_NAMESPACE`` und ``Zend\Filter\Input::FILTER_NAMESPACE`` - sind seit den Releases nach 1.7.0 vorhanden. - -.. note:: - - Seit Version 1.0.4 wurde ``Zend\Filter\Input::NAMESPACE``, der den Wert ``namespace`` hatte, auf - ``Zend\Filter\Input::INPUT_NAMESPACE``, mit dem Wert ``inputNamespace`` geändert, um der Reservierung des - Schlüsselwortes ``namespace`` ab *PHP* 5.3 gerecht zu werden. - - diff --git a/docs/languages/de/modules/zend.filter.int.rst b/docs/languages/de/modules/zend.filter.int.rst deleted file mode 100644 index 7b1ccfa90..000000000 --- a/docs/languages/de/modules/zend.filter.int.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.int: - -Int -=== - -``Zend\Filter\Int`` erlaubt es einen skalaren Wert in einen Integer Wert zu konvertieren. - -.. _zend.filter.set.int.options: - -Unterstützte Optionen für Zend\Filter\Int ------------------------------------------ - -Es gibt keine zusätzlichen Optionen für ``Zend\Filter\Int``. - -.. _zend.filter.set.int.basic: - -Einfache Verwendung -------------------- - -Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden: - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Int(); - - print $filter->filter('-4 ist weniger als 0'); - -Das gibt '-4' zurück. - - diff --git a/docs/languages/de/modules/zend.filter.null.rst b/docs/languages/de/modules/zend.filter.null.rst deleted file mode 100644 index f6ab69087..000000000 --- a/docs/languages/de/modules/zend.filter.null.rst +++ /dev/null @@ -1,84 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.null: - -Null -==== - -Dieser Filter ändert die angegebene Eingabe so dass Sie ``NULL`` ist wenn Sie spezifischen Kriterien entspricht. -Das ist oft notwendig wenn man mit Datenbanken arbeitet und einen ``NULL`` Wert statt einem Boolean oder -irgendeinem anderen Typ haben will. - -.. _zend.filter.set.null.default: - -Standardverhalten für Zend\Filter\Null --------------------------------------- - -Standardmäßig arbeitet dieser Filter wie *PHP*'s ``empty()`` Methode; in anderen Worten, wenn ``empty()`` ein -boolsches ``TRUE`` zurückgibt, dann wird ein ``NULL`` Wert zurückgegeben. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\Null(); - $value = ''; - $result = $filter->filter($value); - // Gibt null statt einem leeren String zurück - -Das bedeutet das ``Zend\Filter\Null``, ohne die Angabe irgendeiner Konfiguration, alle Eingabetypen akteptiert und -in den selben Fällen ``NULL`` zurückgibt wie ``empty()``. - -Jeder andere Wert ist zurückgegeben wie er ist, ohne irgendwelche Änderungen. - -.. _zend.filter.set.null.types: - -Ändern des Verhaltens von Zend\Filter\Null ------------------------------------------- - -Manchmal ist es nicht genug basieren auf ``empty()`` zu filtern. Hierfür erlaubt es ``Zend\Filter\Null`` die Typen -zu konfigurieren welche konvertiert werden und jene die nicht konvertiert werden. - -Die folgenden Typen können behandelt werden: - -- **boolean**: Konvertiert einen boolschen **FALSE** Wert zu ``NULL``. - -- **integer**: Konvertiert einen Integer **0** Wert zu ``NULL``. - -- **empty_array**: Konvertiert ein leeres **Array** zu ``NULL``. - -- **string**: Konvertiert einen leeren String **''** zu ``NULL``. - -- **zero**: Konvertiert einen String der eine einzelne Null Ziffer enthält (**'0'**) zu ``NULL``. - -- **all**: Konvertiert alle obigen Typen zu ``NULL``. (Das ist das Standardverhalten.) - -Es gibt verschiedene Wege um zu wählen welche der obigen Typen gefiltert werden und welche nicht. Man kann einen -oder mehrere Typen angeben und diese addieren, man kann ein Array angeben, man kann Konstanten verwenden, oder man -kann einen textuellen String angeben. Siehe die folgenden Beispiele: - -.. code-block:: php - :linenos: - - // Konvertiert false zu null - $filter = new Zend\Filter\Null(Zend\Filter\Null::BOOLEAN); - - // Konvertiert false und 0 zu null - $filter = new Zend\Filter\Null( - Zend\Filter\Null::BOOLEAN + Zend\Filter\Null::INTEGER - ); - - // Konvertiert false und 0 zu null - $filter = new Zend\Filter\Null( array( - Zend\Filter\Null::BOOLEAN, - Zend\Filter\Null::INTEGER - )); - - // Konvertiert false und 0 zu null - $filter = new Zend\Filter\Null(array( - 'boolean', - 'integer', - )); - -Man kann auch eine Instanz von ``Zend_Config`` angeben um die gewünschten Typen zu setzen. Um Typen im nachhinein -zu setzen kann ``setType()`` verwendet werden. - - diff --git a/docs/languages/de/modules/zend.filter.preg-replace.rst b/docs/languages/de/modules/zend.filter.preg-replace.rst deleted file mode 100644 index 3eb454d4e..000000000 --- a/docs/languages/de/modules/zend.filter.preg-replace.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.pregreplace: - -PregReplace -=========== - -``Zend\Filter\PregReplace`` führt eine Suche durch indem es Reguläre Ausdrücke verwendet und alle gefundenen -Elemente ersetzt. - -Die Option ``match`` muss angegeben werden um das Pattern zu Setzen nach dem gesucht wird. Es kann ein String, für -ein einzelnes Pattern sein, oder ein Array von Strings für mehrere Pattern. - -Um das Pattern zu Setzen das als Ersatz verwendet wird, muss die Option ``replace`` verwendet werden. Es kann ein -String, für ein einzelnes Pattern sein, oder ein Array von Strings für mehrere Pattern. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\PregReplace(array('match' => '/bob/', - 'replace' => 'john')); - $input = 'Hi bob!'; - - $filter->filter($input); - // Gibt 'Hi john!' zurück - -Man kann ``getMatchPattern()`` und ``setMatchPattern()`` verwenden um die Suchpattern im Nachhinein zu Setzen. Um -das Ersatzpattern zu Setzen können ``getReplacement()`` und ``setReplacement()`` verwendet werden. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\PregReplace(); - $filter->setMatchPattern(array('bob', 'Hi')) - ->setReplacement(array('john', 'Bye')); - $input = 'Hi bob!'; - - $filter->filter($input); - // Gibt 'Bye john!' zurück - -Für eine komplexere Verwendung sollte man einen Blick in *PHP*'s `Kapitel für PCRE Pattern`_ werfen. - - - -.. _`Kapitel für PCRE Pattern`: http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php diff --git a/docs/languages/de/modules/zend.filter.real-path.rst b/docs/languages/de/modules/zend.filter.real-path.rst deleted file mode 100644 index bd66882a4..000000000 --- a/docs/languages/de/modules/zend.filter.real-path.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.realpath: - -RealPath -======== - -Dieser Filter löst gegebene Links und Pfadnamen auf und gibt kanonische absolute Pfadnamen zurück. Referenzen zu -'``/./``', '``/../``' und extra '``/``' Zeichen im Eingabepfad werden entfernt. Der Ergebnispfad hat keine -symbolischen Links, '``/./``' oder '``/../``' Zeichen mehr. - -``Zend\Filter\RealPath`` gibt bei einem Fehler ``FALSE`` zurück, z.B. wenn die Datei nicht existiert. Auf *BSD* -Systemen schlägt ``Zend\Filter\RealPath`` nicht fehl wenn nur die letzte Komponente des Pfades nicht existiert, -wärend andere Systeme ``FALSE`` zurückgeben. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\RealPath(); - $path = '/www/var/path/../../mypath'; - $filtered = $filter->filter($path); - - // Gibt '/www/mypath' zurück - -Manchmal ist es auch nützlich einen Pfad zu erhalten wenn diese nicht existiert, z.B. wenn man den echten Pfad -für einen Pfad erhalten will den man erstellt. Man kann entweder ein ``FALSE`` bei der Initialisierung angeben, -oder ``setExists()`` verwenden um es zu setzen. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\RealPath(false); - $path = '/www/var/path/../../non/existing/path'; - $filtered = $filter->filter($path); - - // Gibt '/www/non/existing/path' zurück, selbst wenn - // file_exists oder realpath false zurückgeben würden - - diff --git a/docs/languages/de/modules/zend.filter.rst b/docs/languages/de/modules/zend.filter.rst deleted file mode 100644 index 74fd3bd2a..000000000 --- a/docs/languages/de/modules/zend.filter.rst +++ /dev/null @@ -1,160 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.introduction: - -Einführung -========== - -Die ``Zend_Filter`` Komponente bietet ein Set von normalerweise benötigen Datenfiltern. Sie bietet auch einen -einfachen Filterketten Mechanismus mit dem mehrere Filter bei einem einfachen Wert in einer benutzerdefinierten -Reihenfolge ausgeführt werden können. - -.. _zend.filter.introduction.definition: - -Was ist ein Filter? -------------------- - -In der physikalischen Welt wird ein Filter typischerweise für das entfernen von unerwünschten Teilen einer -Eingabe verwendet, und der gewünschte Teil der Eingabe wird zur Ausgabe des Filters weitergeleitet (z.B. Kaffee). -In solchen Szenarien ist ein Filter ein Operator der ein Subset von der Eingabe produziert. Diese Art des Filterns -ist für Web Anwendungen nützlich - entfernen illegaler Eingaben, trimmen von unnötigen Leerzeichen, usw. - -Diese Basisdefinition eines Filter kann erweitert werden um generelle Umwandlungen über eine Eingabe zu -beinhalten. Eine übliche Umwandlung die in Web Anwendungen durchgeführt wird, ist das auskommentieren von *HTML* -Entititäten. Zum Beispiel, wenn ein Formular Feld automatisch mit einer unsicheren Eingabe übergeben wird (z.B. -von einem Web Browser), sollte dieser Wert entweder frei von *HTML* Entititäten sein oder nur auskommentierte -*HTML* Entititäten enthalten, um unerwünschtes Verhalten und Sicherheitslöcher zu vermeiden. Um diesen -Anforderungen gerecht zu werden müssen *HTML* Entititäten die in der Eingabe vorkommen entweder entfernt oder -auskommentiert werden. Natürlich hängt es von der Situation ab welcher Weg mehr zutrifft. Ein Filter der *HTML* -Entititäten entfernt operiert innerhalb der Beschreibung der ersten Definition von Filter - ein Operator der ein -Subset von einer Eingabe produziert. Ein Filter der *HTML* Entititäten auskommentiert, wandelt die Eingabe um -(z.B. "&" wird umgewandelt in "&"). Solche Fälle zu unterstützen ist für Web Entwickler sehr wichtig und "zu -filtern", im Kontext der Verwendung von ``Zend_Filter``, bedeutet einige Umwandlungen über Eingabedaten -durchzuführen. - -.. _zend.filter.introduction.using: - -Normale Verwendung von Filtern ------------------------------- - -Diese Filterdefinition bekanntgegeben zu haben bietet die Grundlage für ``Zend\Filter\Interface``, welches eine -einzelne Methode benötigt die ``filter()`` genannt wird, und von der Filterklasse implementiert werden muß. - -Nachfolgend ist ein grundsätzliches Beispiel der Verwendung eines Filters über zwei Eingabedaten, einem -Und-Zeichen (**&**) und einem Hochkommazeichen (**"**): - -.. code-block:: php - :linenos: - - $htmlEntities = new Zend\Filter\HtmlEntities(); - - echo $htmlEntities->filter('&'); // & - echo $htmlEntities->filter('"'); // " - -.. _zend.filter.introduction.static: - -Verwenden der statischen staticFilter() Methode ------------------------------------------------ - -Wenn es unbequem ist einen gegebene Filterklasse zu Laden und eine Instanz des Filters zu erstellen, kann die -statische ``Zend\Filter\Filter::staticFilter()`` Methode als alternativer Aufrufstil verwendet werden. Das erste Argument -dieser Methode ist der Eingabewert, der die ``filter()`` Methode passieren soll. Das zweite Argument ist ein -String, der dem Basisnamen der Filterklasse, relativ zum ``Zend_Filter`` Namensraum, entspricht. Die -``filterStatic()`` Methode lädt die Klasse automatisch, erstellt eine Instanz, und führt die Eingabedaten der -``filter()`` Methode zu. - -.. code-block:: php - :linenos: - - echo Zend\Filter\Filter::filterStatic('&', 'HtmlEntities'); - -Es kann auch ein Array von Konstruktor Argumenten übergeben werden, wen diese für die Filterklasse benötigt -werden. - -.. code-block:: php - :linenos: - - echo Zend\Filter\Filter::filterStatic('"', - 'HtmlEntities', - array('quotestyle' => ENT_QUOTES)); - -Die statische Verwendung kann für das Ad-Hoc aufrufen von Filtern bequem sein, aber wenn man einen Filter über -mehrere Eingaben anwenden will ist es effizienter den ersten Beispiel von oben zu folgen, eine Instanz des Filter -Objekts zu erstellen und dessen ``filter()`` Methode aufzurufen. - -Die ``Zend\Filter\Input`` Klasse erlaubt es also, mehrere Filter zu instanzieren und auszurufen, und wenn -benötigt, den Prüfklassen diese Sets von Eingabedaten zu verarbeiten. Siehe :ref:`Zend\Filter\Input -`. - -.. _zend.filter.introduction.static.namespaces: - -Namespaces -^^^^^^^^^^ - -Wenn man mit selbst definierten Filtern arbeitet, dann kann man an ``Zend\Filter\Filter::filterStatic()`` einen vierten -Parameter übergeben welcher der Namespace ist, an dem der eigene Filter gefunden werden kann. - -.. code-block:: php - :linenos: - - echo Zend\Filter\Filter::filterStatic( - '"', - 'MyFilter', - array($parameters), - array('FirstNamespace', 'SecondNamespace') - ); - -``Zend_Filter`` erlaubt es auch standardmäßige Namespaces zu setzen. Das bedeutet das man Sie einmal in der -Bootstrap setzt und sie nicht mehr bei jedem Aufruf von ``Zend\Filter\Filter::filterStatic()`` angeben muß. Der folgende -Codeschnipsel ist identisch mit dem vorherigen. - -.. code-block:: php - :linenos: - - Zend\Filter\Filter::setDefaultNamespaces(array('FirstNamespace', 'SecondNamespace')); - echo Zend\Filter\Filter::filterStatic('"', 'MyFilter', array($parameters)); - echo Zend\Filter\Filter::filterStatic('"', 'OtherFilter', array($parameters)); - -Der Bequemlichkeit halber gibt es die folgenden Methoden welche die Behandlung von Namespaces erlauben: - -- **Zend\Filter\Filter::getDefaultNamespaces()**: Gibt alle standardmäßigen Namespaces als Array zurück. - -- **Zend\Filter\Filter::setDefaultNamespaces()**: Setzt neue standardmäßige Namespaces und überschreibt alle vorher - gesetzten. Es wird entweder ein String für einen einzelnen Namespace akzeptiert, oder ein Array für mehrere - Namespaces. - -- **Zend\Filter\Filter::addDefaultNamespaces()**: Fügt zusätzliche Namespaces zu den bereits gesetzten hinzu. Es wird - entweder ein String für einen einzelnen Namespace akzeptiert, oder ein Array für mehrere Namespaces. - -- **Zend\Filter\Filter::hasDefaultNamespaces()**: Gibt ``TRUE`` zurück wenn ein oder mehrere standardmäßige Namespaces - gesetzt sind, und ``FALSE`` wenn keine standardmäßigen Namespaces gesetzt sind. - -.. _zend.filter.introduction.caveats: - -Doppelt filtern ---------------- - -Wenn zwei Filter nacheinander verwendet werden muss man bedenken dass es oft nicht möglich ist die originale -Ausgabe zu erhalten indem der gegensätzliche Filter verwendet wird. Nehmen wir das folgende Beispiel: - -.. code-block:: php - :linenos: - - $original = "my_original_content"; - - // Einen Filter anwenden - $filter = new Zend\Filter\Word\UnderscoreToCamelCase(); - $filtered = $filter->filter($original); - - // Sein gegenstück verwenden - $filter2 = new Zend\Filter\Word\CamelCaseToUnderscore(); - $filtered = $filter2->filter($filtered) - -Das oben stehende Code Beispiel könnte zur Vermutung führen dass man die originale Ausgabe erhält nachdem der -zweite Filter angewendet wurde. Aber bei logischer Betrachtung ist dies nicht der Fall. Nachdem der erste Filter -angewendet wurde, wird **my_original_content** zu **MyOriginalContent** geändert. Aber nachdem der zweite Filter -angewendet wurde ist das Ergebnis **My_Original_Content**. - -Wie man sieht ist es nicht immer möglich die originale Ausgabe zu erhalten indem ein Filter angewendet wird der -das Gegenteil zu sein scheint. Das hängt vom Filter und auch von der angegebenen Inhalt ab. - - diff --git a/docs/languages/de/modules/zend.filter.set.rst b/docs/languages/de/modules/zend.filter.set.rst deleted file mode 100644 index 22c4c17b2..000000000 --- a/docs/languages/de/modules/zend.filter.set.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set: - -Standard Filter Klassen -======================= - -Zend Framework kommt mit einem Standardset von Filtern, welche bereits zur Verwendung fertig sind. - -.. include:: zend.i18n.filter.alnum.rst -.. include:: zend.i18n.alpha.alnum.rst -.. include:: zend.filter.base-name.rst -.. include:: zend.filter.boolean.rst -.. include:: zend.filter.callback.rst -.. include:: zend.filter.compress.rst -.. include:: zend.filter.decryption.rst -.. include:: zend.filter.digits.rst -.. include:: zend.filter.dir.rst -.. include:: zend.filter.encryption.rst -.. include:: zend.filter.html-entities.rst -.. include:: zend.filter.int.rst -.. include:: zend.filter.localized-to-normalized.rst -.. include:: zend.filter.normalized-to-localized.rst -.. include:: zend.filter.null.rst -.. include:: zend.filter.preg-replace.rst -.. include:: zend.filter.real-path.rst -.. include:: zend.filter.string-to-lower.rst -.. include:: zend.filter.string-to-upper.rst -.. include:: zend.filter.string-trim.rst -.. _zend.filter.set.stripnewlines: - -StripNewlines -------------- - -Gibt den String ``$value`` ohne Zeilenumbruch Zeichen zurück. - -.. _zend.filter.set.striptags: - -StripTags ---------- - -Dieser Filter gibt den Eingabestring zurück, wobei alle *HTML* und *PHP* Tags von Ihm entfernt werden ausser -diesen die explizit erlaubt sind. Zusätzlich zur Möglichkeit zu definieren welche Tags erlaubt sind können -Entwickler definieren welche Attribute über alle erlaubten Tags erlaubt sind und auch nur für spezielle Tags. - - diff --git a/docs/languages/de/modules/zend.filter.string-to-lower.rst b/docs/languages/de/modules/zend.filter.string-to-lower.rst deleted file mode 100644 index bc4935924..000000000 --- a/docs/languages/de/modules/zend.filter.string-to-lower.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.stringtolower: - -StringToLower -============= - -Dieser Filter konvertiert alle Eingabe so das Sie kleingeschrieben sind. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\StringToLower(); - - print $filter->filter('SAMPLE'); - // gibt "sample" zurück - -Standardmäßig behandelt er nur Zeichen aus dem aktuellen Gebietsschema des eigenen Servers. Zeichen von anderen -Zeichensets werden ignoriert. Trotzdem ist es möglich auch diese, mit der mbstring Erweiterung, kleinzuschreiben -wenn diese in der eigenen Umgebung vorhanden ist. Es muß, bei der Initialisierung des ``StringToLower`` Filters, -einfach die gewünschte Kodierung angegeben werden. Oder man verwendet die ``setEncoding()`` Methode, um die -Kodierung im Nachhinein zu ändern. - -.. code-block:: php - :linenos: - - // Verwendung von UTF-8 - $filter = new Zend\Filter\StringToLower('UTF-8'); - - // Oder ein Array angeben was bei der Verwendung einer - // Konfiguration nützlich sein kann - $filter = new Zend\Filter\StringToLower(array('encoding' => 'UTF-8')); - - // Oder im Nachinein - $filter->setEncoding('ISO-8859-1'); - -.. note:: - - **Falsche Kodierungen setzen** - - Man sollte darauf achten das man eine Exception bekommt wenn man eine Kodierung setzt, solange die mbstring - Erweiterung in der eigenen Umgebung nicht vorhanden ist. - - Auch wenn man eine Kodierung setzt, welche von der mbstring Erweiterung nicht unterstützt wird, erhält man - eine Exception. - - diff --git a/docs/languages/de/modules/zend.filter.string-to-upper.rst b/docs/languages/de/modules/zend.filter.string-to-upper.rst deleted file mode 100644 index 2cc801104..000000000 --- a/docs/languages/de/modules/zend.filter.string-to-upper.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.stringtoupper: - -StringToUpper -============= - -Dieser Filter konvertiert alle Eingaben so das Sie großgeschrieben sind. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\StringToUpper(); - - print $filter->filter('Sample'); - // gibt "SAMPLE" zurück - -So wie der ``StringToLower`` Filter, kann dieser Filter nur jene Zeichen behandeln welche vom aktuellen -Gebietsschema des eigenen Servers unterstützt werden. Die Verwendung anderer Zeichensets funktioniert genauso wie -bei ``StringToLower``. - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\StringToUpper(array('encoding' => 'UTF-8')); - - // oder im Nachhinein - $filter->setEncoding('ISO-8859-1'); - - diff --git a/docs/languages/de/modules/zend.filter.string-trim.rst b/docs/languages/de/modules/zend.filter.string-trim.rst deleted file mode 100644 index 457565f66..000000000 --- a/docs/languages/de/modules/zend.filter.string-trim.rst +++ /dev/null @@ -1,57 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.stringtrim: - -StringTrim -========== - -Dieser Filter verändert einen angegebenen String so dass bestimmte Zeichen vom Anfang und vom Ende entfernt -werden. - -.. _zend.filter.set.stringtrim.options: - -Unterstützte Optionen für Zend\Filter\StringTrim ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Filter\StringTrim`` unterstützt: - -- **charlist**: Liste der Zeichen welche vom Anfang und vom Ende des Strings entfernt werden sollen. Wenn sie nicht - gesetzt wird oder null ist, wird das Standardverhalten verwendet, welches nur Leerzeichen vom Beginn und vom Ende - des Strings entfernt. - -.. _zend.filter.set.stringtrim.basic: - -Einfache Verwendung -------------------- - -Ein einfaches Beispiel der Verwendung ist nachfolgend zu finden: - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\StringTrim(); - - print $filter->filter(' Das ist (mein) Inhalt: '); - -Das obige Beispiel gibe 'Das ist (mein) Inhalt:' zurück. Es sollte beachtet werden dass alle Leerzeichen entfernt -wurden. - -.. _zend.filter.set.stringtrim.types: - -Standardverhalten für Zend\Filter\StringTrim --------------------------------------------- - -.. code-block:: php - :linenos: - - $filter = new Zend\Filter\StringTrim(':'); - // oder new Zend\Filter\StringTrim(array('charlist' => ':')); - - print $filter->filter(' Das ist (mein) Inhalt:'); - -Das obige Beispiel gibt 'Das ist (mein) Inhalt' zurück. Es sollte beachtet werden dass Leerzeichen und -Doppelpunkte entfernt werden. Man kann auch eine Instanz von ``Zend_Config`` oder ein Array mit einem 'charlist' -Schlüssel angeben. Un die gewünschte Liste der Zeichen nach der Instanzierung zu setzen kann die Methode -``setCharList()`` verwendet werden. ``getCharList()`` gibt die Werte zurück welche für die Zeichenliste gesetzt -sind. - - diff --git a/docs/languages/de/modules/zend.filter.writing-filters.rst b/docs/languages/de/modules/zend.filter.writing-filters.rst deleted file mode 100644 index d66438c4e..000000000 --- a/docs/languages/de/modules/zend.filter.writing-filters.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.writing_filters: - -Filter schreiben -================ - -``Zend_Filter`` bietet ein Set von normalerweise benötigten Filtern, aber Entwickler müssen oft Ihre eigenen -Filter für deren eigene spezielle Verwendung schreiben. Die Arbeit des Schreibens eines eigenen Filters ist -möglich durch die Implementierung von ``Zend\Filter\Interface``. - -``Zend\Filter\Interface`` definiert eine einzige Methode, ``filter()``, die von Benutzerdefinierten Klassen -implementiert werden kann. Ein Objekt das dieses Interface implementiert kann in eine Filterkette mit -``Zend\Filter\Filter::addFilter()`` hinzugefügt werden. - -Das folgende Beispiel demonstriert wie ein eigener Filter geschrieben wird: - -.. code-block:: php - :linenos: - - class MyFilter implements Zend\Filter\Interface - { - public function filter($value) - { - // einige Transformationen über $value durchführen - // um $valueFiltered zu erhalten - - return $valueFiltered; - } - } - -Um eine Instanz des Filters der oben definiert wurde in eine Filterkette hinzuzufügen: - -.. code-block:: php - :linenos: - - $filterChain = new Zend\Filter\Filter(); - $filterChain->addFilter(new MyFilter()); - - diff --git a/docs/languages/de/modules/zend.form.elements.rst b/docs/languages/de/modules/zend.form.elements.rst deleted file mode 100644 index 370e66e78..000000000 --- a/docs/languages/de/modules/zend.form.elements.rst +++ /dev/null @@ -1,1042 +0,0 @@ -.. EN-Revision: none -.. _zend.form.elements: - -Erstellen von Form Elementen mit Hilfe von Zend\Form\Element -============================================================ - -Ein Formular ist aus Elementen gemacht, die typischerweise mit einer *HTML* Form Eingabe korrespondieren. -``Zend\Form\Element`` kapselt einzelne Formularelemente mit den folgenden Bereichen die erfüllt werden sollen: - -- Prüfung (ist der übertragene Wert gültig?) - - - Fangen von Fehlercodes und Nachrichten von Prüfungen - -- Filtern (wie wird das Element in Anführungsstriche gesetzt oder normalisiert bevor die Prüfung stattfinden - und/oder für die Ausgabe?) - -- Darstellung (wie wird das Element angezeigt?) - -- Metadaten und Attribute (welche Informationen qualifizieren das Element näher?) - -Die Basisklasse, ``Zend\Form\Element``, hat begründete Standardwerte für viele Fälle, aber es ist am besten die -Klasse zu erweitern für oft verwendete speziell benötigte Elemente. Zusätzlich wird Zend Framework mit einer -Anzahl an Standard *XHTML* Elementen ausgeliefert; über diese kann im :ref:`Kapitel über Standard Elemente -` nachgelesen werden. - -.. _zend.form.elements.loaders: - -Plugin Loader -------------- - -``Zend\Form\Element`` verwendet :ref:`Zend\Loader\PluginLoader ` um es Entwicklern zu -erlauben Orte für alternative Prüfungen, Filter und Dekoratoren zu definieren. Jeder hat seinen eigenen Plugin -Loader assoziiert, und generelle Zugriffspunkte werden verwendet um jeden zu empfangen oder zu ändern. - -Die folgenden Ladetypen werden mit den verschiedenen Plugin Loader Methoden verwendet: 'validate', 'filter', und -'decorator'. Die Typnamen sind unabhängig von der Schreibweise. - -Die Methoden die für die Interaktion mit Plugin Loadern verwendet werden, sind die folgenden: - -- ``setPluginLoader($loader, $type)``: ``$loader`` ist das Plugin Loader Objekt selbst, während ``$type`` eine der - oben spezifizierten Typen ist. Das setzt den Plugin Loader für den gegebenen Typ auf das neu spezifizierte - Loader Objekt. - -- ``getPluginLoader($type)``: Empfängt den mit ``$type`` assoziierten Plugin Loader. - -- ``addPrefixPath($prefix, $path, $type = null)``: Fügt eine Präfix/Pfad Assoziation hinzu, Wenn ``$type`` - ``FALSE`` ist, wird versucht den Pfad zu allen Loadern hinzuzufügen durch anhängen des Präfix von jedem - "\_Validate", "\_Filter", und "\_Decorator"; und anhängen des Pfades an "Validate/", "Filter/", und - "Decorator/". Wenn alle extra Formular Elementklassen unter einer üblichen Hirarchie stehen, ist das die - bequemste Methode für das Setzen von grundsätzlichen Präfixen. - -- ``addPrefixPaths(array $spec)``: Erlaubt es viele Pfade auf einmal zu einem oder mehreren Plugin Loadern - hinzuzufügen. Sie erwartet das jedes Arrayelement ein Array mit den Sclüsseln 'path', 'prefix' und 'type' ist. - -Eigene Prüfungen, Filter und Dekoratoren sind ein einfacher Weg um Funktionalität zwischen Forms zu teilen und -eigene Funktionalitäten zu kapseln. - -.. _zend.form.elements.loaders.customLabel: - -.. rubric:: Eigenes Label - -Ein üblicher Verwendungszweck ist es Ersetzungen für Standardklassen anzubieten. Zum Beispiel wenn man eine -andere Implementation des 'Label' Dekorators anbieten will -- zum Beispiel um immer einen Bindestrich anzufügen -- -dann könnte man einen eigenen 'Label' Dekorator mit einem eigenen Klassenpräfix erstellen, und diesen zum eigenen -Präfix Pfad hinzufügen. - -Beginnen wir mit einem eigenen Label Dekorator. Wir geben ihm den Klassenpräfix "My_Decorator", und die Klasse -selbst wird in der Datei "My/Decorator/Label.php" sein. - -.. code-block:: php - :linenos: - - class My_Decorator_Label extends Zend\Form\Decorator\Abstract - { - protected $_placement = 'PREPEND'; - - public function render($content) - { - if (null === ($element = $this->getElement())) { - return $content; - } - if (!method_exists($element, 'getLabel')) { - return $content; - } - - $label = $element->getLabel() . ':'; - - if (null === ($view = $element->getView())) { - return $this->renderLabel($content, $label); - } - - $label = $view->formLabel($element->getName(), $label); - - return $this->renderLabel($content, $label); - } - - public function renderLabel($content, $label) - { - $placement = $this->getPlacement(); - $separator = $this->getSeparator(); - - switch ($placement) { - case 'APPEND': - return $content . $separator . $label; - case 'PREPEND': - default: - return $label . $separator . $content; - } - } - } - -Jetzt kann dem Element mitgeteilt werden diesen Plugin Pfad zu verwenden wenn nach Dekoratoren gesucht wird: - -.. code-block:: php - :linenos: - - $element->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator'); - -Alternativ kann das bei der Form gemacht werden um sicherzustellen das alle Dekoratore diesen Pfad verwenden: - -.. code-block:: php - :linenos: - - $form->addElementPrefixPath('My_Decorator', 'My/Decorator/', 'decorator'); - -Wird dieser Pfad hinzugefügt, wenn ein Dekorator hinzugefügt wird, wird der Pfad 'My/Decorator/' zuerst -durchsucht um zu sehen ob der Dekorator dort existiert. Als Ergebnis wird 'My_Decorator_Label' jetzt verwendet wenn -der 'Labe' Dekorator angefragt wird. - -.. _zend.form.elements.filters: - -Filter ------- - -Es ist oft nützlich und/oder notwendig einige Normalisierungen an Eingaben vorzunehmen, bevor diese geprüft -werden - zum Beispiel kann es gewünscht sein alles an *HTML* zu entfernen, aber die Prüfungen auf dem -verbleibenden durchzuführen um sicherzustellen, dass die Übertragung gültig ist. Oder man will Leerzeichen bei -Eingaben entfernen, damit eine StringLength Prüfung kein falsches "Korrekt" zurückgibt. Diese Operationen können -durchgeführt werden indem ``Zend_Filter`` verwendet wird, und ``Zend\Form\Element`` unterstützt Filterketten, was -es erlaubt mehrere, sequentielle Filter zu spezifizieren und anzupassen. Das Filtern geschieht während der -Prüfung und wenn der Wert des Elements über ``getValue()`` geholt wird: - -.. code-block:: php - :linenos: - - $filtered = $element->getValue(); - -Filter können der Kette auf zwei Wegen hinzugefügt werden: - -- Übergabe einer konkreten Filterinstanz - -- Angabe eines kurzen Filternamens - -Sehen wir uns einige Beispiele an: - -.. code-block:: php - :linenos: - - // Konkrete Filterinstanz: - $element->addFilter(new Zend\I18n\Filter\Alnum()); - - // Kurzname des Filters: - $element->addFilter('Alnum'); - $element->addFilter('alnum'); - -Kurznamen sind typischerweise der Filtername ohne den Präfix. Im Standardfall bedeutet das keinen 'Zend_Filter\_' -Präfix. Zusätzlich muss der erste Buchstabe nicht großgeschrieben werden. - -.. note:: - - **Eigene Filterklassen verwenden** - - Wenn man sein eigenes Set an Filterklassen hat, kann man ``Zend\Form\Element`` mitteilen diese zu verwenden - indem ``addPrefixPath()`` verwendet wird. Wenn man zum Beispiel eigene Filter unter dem 'My_Filter' Präfix hat, - kann ``Zend\Form\Element`` dies auf dem folgenden Weg mitgeteilt werden: - - .. code-block:: php - :linenos: - - $element->addPrefixPath('My_Filter', 'My/Filter/', 'filter'); - - (Beachten Sie, dass das dritte Agument indiziert welcher Plugin Loader auf welcher Aktion durchgeführt werden - soll.) - -Wenn man zu irgendeiner Zeit den ungefilterten Wert benötigt, kann die ``getUnfilteredValue()`` Methode verwendet -werden: - -.. code-block:: php - :linenos: - - $unfiltered = $element->getUnfilteredValue(); - -Für weitere Informationen über Filter, siehe die :ref:`Dokumentation über Zend_Filter -`. - -Die Methoden die mit Filtern assoziiert sind, beinhalten: - -- ``addFilter($nameOfFilter, array $options = null)`` - -- ``addFilters(array $filters)`` - -- ``setFilters(array $filters)`` (Überschreibt alle Filter) - -- ``getFilter($name)`` (Empfängt ein Filterobjekt durch seinen Namen) - -- ``getFilters()`` (Empfängt alle Filter) - -- ``removeFilter($name)`` (Entfernt einen Filter durch seinen Namen) - -- ``clearFilters()`` (Entfernt alle Filter) - -.. _zend.form.elements.validators: - -Prüfungen ---------- - -Wenn man das Sicherheits-Mantra von "Eingabe filtern, Ausgabe escapen" unterschreibt dann wird man die Eingabe des -Formulars prüfen ("Eingabefilterung") wollen. In ``Zend_Form`` enthält jedes Element seine eigene Prüfkette, die -aus ``Zend\Validate\*`` Prüfungen besteht. - -Prüfungen können der Kette auf zwei Wegen hinzugefügt werden: - -- Übergabe einer konkreten Prüfinstanz - -- Anbieten eines kurzen Prüfnamens - -Einige Beispiele: - -.. code-block:: php - :linenos: - - // Konkrete Prüfinstanz: - $element->addValidator(new Zend\Validate\Alnum()); - - // Kurzer Prüfname: - $element->addValidator('Alnum'); - $element->addValidator('alnum'); - -Kurznamen sind typischerweise der Prüfname ohne den Präfix. Im Standardfall bedeutet das, keinen -'Zend_Validate\_' Präfix. Zusätzlich muss der erste Buchstabe nicht großgeschrieben werden. - -.. note:: - - **Eigene Prüfklassen verwenden** - - Wenn man sein eigenes Set an Prüfklassen hat, kann man ``Zend\Form\Element`` mitteilen diese zu verwenden indem - ``addPrefixPath()`` verwendet wird. Wenn man zum Beispiel eigene Prüfungen unter dem 'My_Validator' Präfix - hat, kann ``Zend\Form\Element`` dies auf dem folgenden Weg mitgeteilt werden: - - .. code-block:: php - :linenos: - - $element->addPrefixPath('My_Validator', 'My/Validator/', 'validate'); - - (Beachten Sie dass das dritte Agument zeigt welcher Plugin Loader auf welcher Aktion durchgeführt werden soll) - -Wenn eine bestimmte Prüfung fehlschlägt, und die Ausführung von späteren Prüfungen verhindert werden soll, -kann ein ``TRUE`` als zweiter Parameter übergeben werden: - -.. code-block:: php - :linenos: - - $element->addValidator('alnum', true); - -Wenn ein Stringname verwendet wird, um eine Prüfung hinzuzufügen und die Prüfklasse Argumente in ihrem -Konstruktor akzeptiert, können diese als dritter Parameter an ``addValidator()`` als Array übergeben werden: - -.. code-block:: php - :linenos: - - $element->addValidator('StringLength', false, array(6, 20)); - -Argumente die auf diesem Weg übergeben werden, sollten in der Reihenfolge sein in der sie im Konstruktor definiert -sind. Das obige Beispiel instanziert die ``Zend\Validate\StringLenth`` Klasse mit den ``$min`` und ``$max`` -Parametern: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(6, 20); - -.. note:: - - **Eigene Fehlermeldungen für Prüfungen anbieten** - - Einige Entwickler wollen eigene Fehlermeldungen für eine Prüfung anbieten. - ``Zend\Form\Element::addValidator()``'s ``$options`` Argument erlaubt es das zu tun, indem der Schlüssel - 'messages' angegeben wird und ein Array mit Schlüssel/Wert Paaren genutzt wird für das Setzen der Nachrichten - Templates. Man muss die Fehlermeldungen der betreffenden Prüfung für die verschiedenen Fehlertypen von - Prüfungen kennen. - - Eine bessere Option ist es ``Zend\Translator\Adapter`` in Formular zu verwenden. Fehlercodes werden automatisch - dem Adapter durch den Standardmäßigen Fehlerdekorator übergeben; man kann durch die Erstellung von - Übersetzungen eigene Fehlermeldungen für die verschiedenen Fehlercodes der Prüfung definieren. - -Es können auch viele Prüfungen auf einmal gesetzt werden, indem ``addValidators()`` verwendet wird. Die -grundsätzliche Verwendung ist es ein Array von Arrays zu übergeben, wobei jedes Array ein bis drei Werte -enthält, die dem Konstruktor von ``addValidator()`` entsprechen: - -.. code-block:: php - :linenos: - - $element->addValidators(array( - array('NotEmpty', true), - array('alnum'), - array('stringLength', false, array(6, 20)), - )); - -Wenn man wortreicher oder expliziter sein will, dann können die Arrayschlüssel 'validator', -'breakChainOnFailure', und 'options' verwendet werden: - -.. code-block:: php - :linenos: - - $element->addValidators(array( - array( - 'validator' => 'NotEmpty', - 'breakChainOnFailure' => true), - array('validator' => 'alnum'), - array( - 'validator' => 'stringLength', - 'options' => array(6, 20)), - )); - -Die Verwendung ist gut für die Illustration wie Prüfungen in einer Konfigurationsdatei definiert werden können: - -.. code-block:: ini - :linenos: - - element.validators.notempty.validator = "NotEmpty" - element.validators.notempty.breakChainOnFailure = true - element.validators.alnum.validator = "Alnum" - element.validators.strlen.validator = "StringLength" - element.validators.strlen.options.min = 6 - element.validators.strlen.options.max = 20 - -Es ist zu beachten, dass jedes Element einen Schlüssel hat, egal ob er benötigt wird oder nicht; das ist eine -Einschränkung bei der Verwendung von Konfigurationsdateien -- aber es macht auch klar, für was die Argumente -stehen. Es ist einfach zu beachten das jede Prüfungsoption in der richtigen Reihenfolge spezifiziert werden muss. - -Um ein Element zu prüfen, muss der Wert an ``isValid()`` übergeben werden: - -.. code-block:: php - :linenos: - - if ($element->isValid($value)) { - // gülig - } else { - // ungültig - } - -.. note:: - - **Die Prüfung findet an gefilterten Werte statt** - - ``Zend\Form\Element::isValid()`` filtert Werte durch die angegebene Filterkette vor der Überprüfung. Siehe das - :ref:`Kapitel über Filter ` für weitere Informationen. - -.. note:: - - **Prüfungskontext** - - ``Zend\Form\Element::isValid()`` unterstützt ein zusätzliches Argument ``$context``. ``Zend\Form\Form::isValid()`` - übergibt ein komplettes Array von Daten die bearbeitet werden an ``$context``, wenn ein Formular geprüft wird - und ``Zend\Form\Element::isValid()`` übergibt es an jede Prüfung. Das bedeutet, dass man Prüfungen schreiben - kann, die auf die Daten die an andere Formulare übergeben werden acht geben. Als Beispiel nehmen wir ein - Anmeldeformular, welches die Felder für Passwort und Passwort Wiederholung hat; eine Prüfung würde sein, dass - beide Felder den selben Wert beinhalten. So eine Prüfung könnte wie folgt aussehen: - - .. code-block:: php - :linenos: - - class My_Validate_PasswordConfirmation extends Zend\Validate\Abstract - { - const NOT_MATCH = 'notMatch'; - - protected $_messageTemplates = array( - self::NOT_MATCH => 'Die Passwortüberprüfung war nicht erfolgreich' - ); - - public function isValid($value, $context = null) - { - $value = (string) $value; - $this->_setValue($value); - - if (is_array($context)) { - if (isset($context['password_confirm']) - && ($value == $context['password_confirm'])) - { - return true; - } - } elseif (is_string($context) && ($value == $context)) { - return true; - } - - $this->_error(self::NOT_MATCH); - return false; - } - } - -Prüfungen werden in der Reihenfolge ausgeführt. Jede Prüfung wird ausgeführt solange bis eine Prüfung die mit -einem ``TRUE`` Wert für ``$breakChainOnFailure`` bei Ihrer Prüfung fehlschlägt. Man sollte sichergehen, dass -Prüfungen in einer begründeten Reihenfolge definiert werden. - -Nach einer fehlgeschlagenen Prüfung können Fehlercodes und Nachrichten von der Prüfkette empfangen werden: - -.. code-block:: php - :linenos: - - $errors = $element->getErrors(); - $messages = $element->getMessages(); - -(Achtung: zurückgegebene Fehlermeldungen sind ein assoziatives Array von Fehlercode/Fehlermeldung Paaren.) - -Zusätzlich zu Prüfungen, kann spezifiziert werden, dass ein Element benötigt wird, indem ``setRequired($flag)`` -verwendet wird. Standardmäßig ist dieses Flag ``FALSE``. In Kombination mit ``setAllowEmpty($flag)`` -(Standardmäßig ``TRUE``) und ``setAutoInsertNotEmptyValidator($flag)`` (standardmäßig ``TRUE``), kann das -Verhalten der Prüfkette auf unterschiedliche Art und Weise verändert werden: - -- Bei Verwendung der Standardwerte werden beim Prüfen eines Elements ohne der Übergabe eines Werts, oder der - Übergabe eines leeren Strings, alle Prüfungen übersprungen und ``TRUE`` zurückgegeben. - -- ``setAllowEmpty(false)`` prüft, wenn die anderen zwei erwähnten Flags unberührt bleiben, gegen die Prüfkette - welche für dieses Element definiert wurde, unabhängig von dem an ``isValid()`` übergebenen Wert. - -- ``setRequired(true)`` fügt, wenn die anderen zwei erwähnten Flags unberührt bleiben, eine 'NotEmpty' Prüfung - an den Beginn der Prüfkette (wenn nicht bereits eine gesetzt wurde) wobei das ``$breakChainOnFailure`` Flag - gesetzt wird. Das heißt, dass das Flag folgende semantische Bedeutung bekommt: Wenn kein Wert übergeben wird, - wird die Übertragung sofort ungülig und der Benutzer wird informiert, was die anderen Prüfungen davon abhält, - ausgeführt zu werden, auf Daten, von denen wir bereits wissen, dass sie ungültig sind. - - Wenn dieses Verhalten nicht gewünscht ist kann es durch die Übergabe eines ``FALSE`` Wert an - ``setAutoInsertNotEmptyValidator($flag)`` ausgeschaltet werden; das verhindert, dass ``isValid()`` die 'NotEmpty' - Prüfung in der Prüfkette platziert. - -Für weitere Informationen über Prüfungen kann in die :ref:`Zend_Validate Dokumentation -` gesehen werden. - -.. note:: - - **Verwenden von Zend\Form\Elements als generell-eingesetzte Prüfung** - - ``Zend\Form\Element`` implementiert ``Zend\Validate\Interface`` was bedeutet das ein Element auch als Prüfung - füreinander verwendet werden kann, bezüglich nicht-Formular Prüfketten. - -.. note:: - - **Wann wird ein Element als leer erkannt?** - - Wie erwähnt wird der 'NotEmpty' Prüfer verwendet um zu erkennen ob ein Element leer ist oder nicht. Aber - ``Zend\Validate\NotEmpty`` arbeitet standardmäßig nicht wie *PHP*'s ``empty()`` Methode. - - Das bedeutet, wenn ein Element ein Integer **0** oder einen **'0'** String enthält dann wird dieses Element als - nicht leer engesehen. Wenn man ein anderes Verhalten will, muss man seine eigene Instanz von - ``Zend\Validate\NotEmpty`` erstellen. Dort kann man das Verhalten dieser Prüfung definieren. Siehe - `Zend\Validate\NotEmpty`_ für Details. - -Die mit der Prüfung assoziierten Methoden sind: - -- ``setRequired($flag)`` und ``isRequired()`` erlauben es den Status des 'required' Flag zu setzen und zu - empfangen. Wenn der Wert auf ``TRUE`` gesetzt wird, erzwingt dieses Flag, dass das Element, in den Daten die von - ``Zend_Form`` bearbeitet werden, vorhanden ist. - -- ``setAllowEmpty($flag)`` und ``getAllowEmpty()`` erlauben es das Verhalten von optionalen Elementen (z.B. - Elementen in denen das 'required' Flag ``FALSE`` ist) zu ändern. Wenn das 'allowEmpty' Flag ``TRUE`` ist, werden - leere Werte nicht an die Prüfkette übergeben. - -- ``setAutoInsertNotEmptyValidator($flag)`` erlaubt es zu definieren ob eine 'NotEmpty' Prüfung der Prüfkette - vorangestellt wird wenn das Element benötigt wird. Standardmäßig ist dieses Flag ``TRUE``. - -- ``addValidator($nameOrValidator, $breakChainOnFailure = false, array $options = null)`` - -- ``addValidators(array $validators)`` - -- ``setValidators(array $validators)`` (Überschreibt alle Prüfer) - -- ``getValidator($name)`` (Empfängt ein Prüfobjekt durch seinen Namen) - -- ``getValidators()`` (Empfängt alle Prüfer) - -- ``removeValidator($name)`` (Entfernt einen Prüfer durch seinen Namen) - -- ``clearValidators()`` (Entfernt alle Prüfer) - -.. _zend.form.elements.validators.errors: - -Eigene Fehlermeldungen -^^^^^^^^^^^^^^^^^^^^^^ - -Von Zeit zu Zeit ist es gewünscht ein oder mehrere spezielle Fehlermeldungen zu spezifizieren, die statt der -Fehlermeldungen verwendet werden sollen, die von den Validatoren verwendet werden, die dem Element angehängt sind. -Zusätzlich will man von Zeit zu Zeit ein Element selbst als ungültig markieren. Ab Version 1.6.0 des Zend -Frameworks ist diese Funktionalität über die folgenden Methoden möglich. - -- ``addErrorMessage($message)``: Fügt eine Fehlermeldung hinzu, die bei Formular-Überprüfungs-Fehlern angezeigt - wird. Sie kann mehr als einmal aufgerufen werden, und neue Meldungen werden dem Stack angehängt. - -- ``addErrorMessages(array $messages)``: Fügt mehrere Fehlermeldungen hinzu, die bei - Formular-Überprüfungs-Fehlern angezeigt werden. - -- ``setErrorMessages(array $messages)``: Fügt mehrere Fehlermeldungen hinzu, die bei - Formular-Überprüfungs-Fehlern angezeigt werden, und überschreibt alle vorher gesetzten Fehlermeldungen. - -- ``getErrorMessages()``: Empfängt eine Liste von selbstdefinierten Fehlermeldungen, die vorher definiert wurden. - -- ``clearErrorMessages()``: Entfernt alle eigenen Fehlermeldungen, die vorher definiert wurden. - -- ``markAsError()``: Markiert das Element, wie, wenn die Überprüfung fehlgeschlagen wäre. - -- ``hasErrors()``: Erkennt, ob ein Element eine Überprüfung nicht bestanden hat oder, ob es als ungültig - markiert wurde. - -- ``addError($message)``: Fügt einen Fehler zum eigenen Stack der Fehlermeldungen hinzu und markiert das Element - als ungültig. - -- ``addErrors(array $messages)``: Fügt mehrere Nachrichten zum eigenen Stack der Fehlermeldungen hinzu und - markiert das Element als ungültig. - -- ``setErrors(array $messages)``: Überschreibt den eigenen Stack der Fehlermeldungen mit den angegebenen Meldungen - und markiert das Element als ungültig. - -Alle Fehler die auf diesem Weg gesetzt werden, können übersetzt werden. Zusätzlich kann der Platzhalter -"%value%" eingefügt werden um den Wert des Elements zu repräsentieren; dieser aktuelle Wert des Element wird -eingefügt wenn die Fehlermeldung empfangen wird. - -.. _zend.form.elements.decorators: - -Dekoratoren ------------ - -Ein möglicher Schmerzpunkt für viele Webentwickler, ist die Erstellung von *XHTML* Formularen selbst. Für jedes -Element muss der Entwickler das Markup für das Element selbst erstellen, typischerweise ein Label und, wenn sie -nett zu den Benutzern sind, das Markup für die Anzeige von Fehlermeldungen von Prüfungen. Je mehr Elemente auf -einer Seite sind, desto weniger trivial wird diese Aufgabe. - -``Zend\Form\Element`` versucht dieses Problem durch die Verwendung von "Dekoratoren" zu lösen. Dekoratoren sind -Klassen die Zugriff auf das Element haben und eine Methode zur Darstellung des Inhalts bieten. Für weitere -Informationen darüber wie Dekoratoren arbeiten, kann im Kapitel über :ref:`Zend\Form\Decorator -` eingesehen werden. - -Die von ``Zend\Form\Element`` verwendeten Standarddekoratoren sind: - -- **ViewHelper**: Spezifiziert einen View Helfer der verwendet wird, um das Element darzustellen. Das 'helper' - Attribut des Elements kann verwendet werden, um zu spezifizieren welcher View Helfer verwendet werden soll. - Standardmäßig spezifiziert ``Zend\Form\Element`` den 'formText' View Helfer, aber individuelle Unterklassen - spezifizieren unterschiedliche Helfer. - -- **Errors**: Fügt Fehlermeldungen an das Element an, indem es ``Zend\View\Helper\FormErrors`` verwendet. Wenn - keine vorhanden sind, wird nichts hinzugefügt. - -- **Description**: Fügt dem Element eine Beschreibung hinzu. Wenn keine vorhanden ist, wird nichts angehängt. - Standardmäßig wird die Beschreibung in einem

Tag dargestellt mit einer CSS Klasse namens 'description'. - -- **HtmlTag**: Umschliesst das Element und Fehler in einem *HTML*

Tag. - -- **Label**: Stellt ein Label vor das Element, indem es ``Zend\View\Helper\FormLabel`` verwendet, und umschliesst - es in einem
Tag. Wenn kein Label angegeben wurde, wird nur das
Tag dargestellt. - -.. note:: - - **Standard Dekoratoren müssen nicht geladen werden** - - Standardmäßig werden die Standarddekoratoren während der Initialisierung des Objekts geladen. Das kann durch - die Übergabe der 'disableLoadDefaultDecorators' Option an den Konstruktor ausgeschaltet werden: - - .. code-block:: php - :linenos: - - $element = new Zend\Form\Element('foo', - array('disableLoadDefaultDecorators' => - true) - ); - - Diese Option kann mit jeder anderen Option gemischt werden die übergeben wird, sowohl als Array Option oder in - einem ``Zend_Config`` Objekt. - -Da die Reihenfolge, in der die Dekoratoren registriert werden, von Bedeutung ist -- der zuerst registrierte -Dekorator wird als erstes ausgeführt -- muss man sicherstellen, dass eigene Dekoratoren in der richtigen -Reihenfolge registriert werden, oder sicherstellen, dass die Platzierungs-Optionen in einem ausgewogenen Weg -gesetzt werden. Um ein Beispiel zu geben, ist hier ein Code der den Standarddekorator registriert: - -.. code-block:: php - :linenos: - - $this->addDecorators(array( - array('ViewHelper'), - array('Errors'), - array('Description', array('tag' => 'p', 'class' => 'description')), - array('HtmlTag', array('tag' => 'dd')), - array('Label', array('tag' => 'dt')), - )); - -Der anfängliche Inhalt wird vom 'ViewHelper' Dekorator erstellt, welche das Formular Element selbst erstellt. Als -nächstes fängt der 'Errors' Dekorator Fehlermeldungen vom Element und, wenn welche vorhanden sind, übergibt er -sie an den 'FormErrors' View Helfer zur Darstellung. Wenn eine Beschreibung vorhanden ist, wird der 'Description' -Dekorator einen Paragraph der Klasse 'description' anhängen, der den beschreibenden Text für den betreffenden -Inhalt enthält. Der nächste Dekorator, 'HtmlTag', umschliesst das Element und die Fehler in ein *HTML*
Tag. -Letztendlich, empfängt der letzte Dekorator, 'label' das Label des Elements und übergibt es an den 'FormLabel' -View Helfer, und umschliesst es in einen *HTML*
Tag; der Wert wird dem Inhalt standardmäßig vorangestellt. -Die resultierende Ausgabe sieht grundsätzlich wie folgt aus: - -.. code-block:: html - :linenos: - -
-
- -
    -
  • "123" ist kein alphanumerischer Wert
  • -
-

- Das ist etwas beschreibender Text betreffend dem Element. -

-
- -Für weitere Informationen über Dekoratoren gibt es das :ref:`Kapitel über Zend\Form\Decorator -`. - -.. note:: - - **Mehrere Dekoratoren des gleichen Typs verwenden** - - Intern verwendet ``Zend\Form\Element`` eine Dekoratorklasse als Mechanismus für das Nachschauen wenn Dekoratore - empfangen werden. Als Ergebnis, können mehrere Dekratoren nicht zur gleichen Zeit registriert werden; - nachgeordnete Dekoratoren überschreiben jene, die vorher existiert haben. - - Um das zu umgehen, können **Aliase** verwendet werden. Statt der Übergabe eines Dekorators oder - Dekoratornamens als erstes Argument an ``addDecorator()``, kann ein Array mit einem einzelnen Element übergeben - werden, mit dem Alias der auf das Dekoratorobjekt oder -namen zeigt: - - .. code-block:: php - :linenos: - - // Alias zu 'FooBar': - $element->addDecorator(array('FooBar' => 'HtmlTag'), - array('tag' => 'div')); - - // Und es später erhalten: - $decorator = $element->getDecorator('FooBar'); - - In den ``addDecorators()`` und ``setDecorators()`` Methoden muss die 'decorator' Option im Array übergeben - werden, welche den Dekorator repräsentiert: - - .. code-block:: php - :linenos: - - // Zwei 'HtmlTag' Dekoratore hinzufügen, einen Alias auf 'FooBar' setzen: - $element->addDecorators( - array('HtmlTag', array('tag' => 'div')), - array( - 'decorator' => array('FooBar' => 'HtmlTag'), - 'options' => array('tag' => 'dd') - ), - ); - - // Und sie später empfangen: - $htmlTag = $element->getDecorator('HtmlTag'); - $fooBar = $element->getDecorator('FooBar'); - -Die folgenden Methoden sind mit Dekoratoren assoziiert: - -- ``addDecorator($nameOrDecorator, array $options = null)`` - -- ``addDecorators(array $decorators)`` - -- ``setDecorators(array $decorators)`` (Überschreibt alle Dekoratoren) - -- ``getDecorator($name)`` (Empfängt ein Dekoratorobjekt durch seinen Namen) - -- ``getDecorators()`` (Empfängt alle Dekoratoren) - -- ``removeDecorator($name)`` (Entfernt einen Dekorator durch seinen Namen) - -- ``clearDecorators()`` (Entfernt alle Dekoratoren) - -``Zend\Form\Element`` verwendet auch Überladung um die Darstellung von speziellen Dekoratoren zu erlauben. -``__call()`` interagiert mit Methoden auf mit dem Text 'render' anfangen und verwendet den Rest des Methodennamens -dazu um nach einen Dekorator zu suchen; wenn er gefunden wird, wird er diesen **einzelnen** Dekorator darstellen. -Jedes Argument das dem Methodenaufruf übergeben wird, wird als Inhalt für die Übergabe an die ``render()`` -Methode des Dekorators verwendet. Als Beispiel: - -.. code-block:: php - :linenos: - - // Stellt nur den ViewHelper Dekorator dar: - echo $element->renderViewHelper(); - - // Nur den HtmlTag Dekorator darstellen, und Inhalt übergeben: - echo $element->renderHtmlTag("Das ist der Inhalt des HTML Tags"); - -Wenn der Dekorator nicht existiert, wird eine Exception geworfen. - -.. _zend.form.elements.metadata: - -Metadaten und Attribute ------------------------ - -``Zend\Form\Element`` behandelt eine Vielzahl von Attributen und Metadaten des Elements. Basisattribute sind: - -- **name**: Der Name des Elements. Verwendet die Zugriffsmethoden ``setName()`` und ``getName()``. - -- **label**: Das Label des Elements. Verwendet die Zugriffsmethoden ``setLabel()`` und ``getLabel()``. - -- **order**: Der Index bei dem ein Element im Formular erscheinen soll. Verwendet die Zugriffsmethoden - ``setOrder()`` und ``getOrder()``. - -- **value**: Der aktuelle Wert des Elements. Verwendet die Zugriffsmethoden ``setValue()`` und ``getValue()``. - -- **description**: Eine Beschreibung des Elements; wird oft verwendet um Tooltips oder Javascript mäßige Hinweise - anzubieten die den Zweck des Elements beschreiben. Verwendet die Zugriffsmethoden ``setDescription()`` und - ``getDescription()``. - -- **required**: Ein Flag, das anzeigt ob ein Element benötigt wird wenn eine Prüfung des Formulars durchgeführt - wird, oder nicht. Verwendet die Zugriffsmethoden ``setRequired()`` und ``getRequired()``. Dieses Flag ist - standardmäßig ``FALSE``. - -- **allowEmpty**: Ein Flag, das indiziert ob ein nicht benötigtes (optionales) Element versuchen soll leere Werte - zu prüfen. Wenn es ``TRUE`` ist, und das 'required' Flag ``FALSE``, dann werden leere Werte nicht an die - Prüfkette übergeben, und es wird ``TRUE`` angenommen. Verwendet die Zugriffsmethoden ``setAllowEmpty()`` und - ``getAllowEmpty()``. Dieses Flag ist standardmäßig ``TRUE``. - -- **autoInsertNotEmptyValidator**: Ein Flag, das indiziert, ob eine 'NotEmpty' Prüfung eingefügt werden soll, - wenn das Element benötigt wird, oder nicht. Standardmäßig ist dieses Flag ``TRUE``. Das Flag kann mit - ``setAutoInsertNotEmptyValidator($flag)`` gesetzt und der Wert mit ``autoInsertNotEmptyValidator()`` ermittelt - werden. - -Formular Elemente können zusätzliche Metadaten benötigen. Für *XHTML* Form Elemente zum Beispiel, kann es -gewünscht sein, Attribute wie die Klasse oder die Id zu spezifizieren. Für die Durchführung gibt es ein Set von -Zugriffsmethoden: - -- **setAttrib($name, $value)**: Fügt ein Attribut hinzu - -- **setAttribs(array $attribs)**: Wie addAttribs(), aber überschreibend - -- **getAttrib($name)**: Empfägt einen einzelnen Attributwert - -- **getAttribs()**: Empfängt alle Attribute als Schlüssel/Wert Paare - -Die meiste Zeit kann auf sie, trotzdem, einfach als Objekteigenschaften zugegriffen werden, da -``Zend\Form\Element`` das Überladen realisiert und den Zugriff zu ihnen erlaubt: - -.. code-block:: php - :linenos: - - // Gleichbedeutend mit $element->setAttrib('class', 'text'): - $element->class = 'text; - -Standardmäßig werden alle Attribute, die an den View Helfer übergeben werden, auch vom Element während der -Darstellung verwendet, und als *HTML* Attribute des Element Tags dargestellt. - -.. _zend.form.elements.standard: - -Standard Elemente ------------------ - -``Zend_Form`` wird mit einer Anzahl an Standardelementen ausgeliefert; lesen Sie das Kapitel über :ref:`Standard -Elemente ` für vollständige Details. - -.. _zend.form.elements.methods: - -Zend\Form\Element Methoden --------------------------- - -``Zend\Form\Element`` hat viele, viele Methoden. Was folgt, ist eine kurze Zusammenfassung ihrer Signatur - -gruppiert nach Typ: - -- Konfiguration: - - - ``setOptions(array $options)`` - - - ``setConfig(Zend_Config $config)`` - -- I18n: - - - ``setTranslator(Zend\Translator\Adapter $translator = null)`` - - - ``getTranslator()`` - - - ``setDisableTranslator($flag)`` - - - ``translatorIsDisabled()`` - -- Eigenschaften: - - - ``setName($name)`` - - - ``getName()`` - - - ``setValue($value)`` - - - ``getValue()`` - - - ``getUnfilteredValue()`` - - - ``setLabel($label)`` - - - ``getLabel()`` - - - ``setDescription($description)`` - - - ``getDescription()`` - - - ``setOrder($order)`` - - - ``getOrder()`` - - - ``setRequired($flag)`` - - - ``getRequired()`` - - - ``setAllowEmpty($flag)`` - - - ``getAllowEmpty()`` - - - ``setAutoInsertNotEmptyValidator($flag)`` - - - ``autoInsertNotEmptyValidator()`` - - - ``setIgnore($flag)`` - - - ``getIgnore()`` - - - ``getType()`` - - - ``setAttrib($name, $value)`` - - - ``setAttribs(array $attribs)`` - - - ``getAttrib($name)`` - - - ``getAttribs()`` - -- Plugin Loader und Pfade: - - - ``setPluginLoader(Zend\Loader\PluginLoader\Interface $loader, $type)`` - - - ``getPluginLoader($type)`` - - - ``addPrefixPath($prefix, $path, $type = null)`` - - - ``addPrefixPaths(array $spec)`` - -- Prüfung: - - - ``addValidator($validator, $breakChainOnFailure = false, $options = array())`` - - - ``addValidators(array $validators)`` - - - ``setValidators(array $validators)`` - - - ``getValidator($name)`` - - - ``getValidators()`` - - - ``removeValidator($name)`` - - - ``clearValidators()`` - - - ``isValid($value, $context = null)`` - - - ``getErrors()`` - - - ``getMessages()`` - -- Filter: - - - ``addFilter($filter, $options = array())`` - - - ``addFilters(array $filters)`` - - - ``setFilters(array $filters)`` - - - ``getFilter($name)`` - - - ``getFilters()`` - - - ``removeFilter($name)`` - - - ``clearFilters()`` - -- Darstellung: - - - ``setView(Zend\View\Interface $view = null)`` - - - ``getView()`` - - - ``addDecorator($decorator, $options = null)`` - - - ``addDecorators(array $decorators)`` - - - ``setDecorators(array $decorators)`` - - - ``getDecorator($name)`` - - - ``getDecorators()`` - - - ``removeDecorator($name)`` - - - ``clearDecorators()`` - - - ``render(Zend\View\Interface $view = null)`` - -.. _zend.form.elements.config: - -Konfiguration -------------- - -Der Konstruktor von ``Zend\Form\Element`` akzeptiert entweder einen Array von Optionen oder ein ``Zend_Config`` -Objekt das Optionen enthält, und es kann auch durch Verwendung von ``setOptions()`` oder ``setConfig()`` -konfiguriert werden. Generell, werden die Schlüssel wie folgt benannt: - -- Wenn 'set' + Schlüssel auf eine ``Zend\Form\Element`` Methode zeigt, dann wird der angebotene Wert zu dieser - Methode übermittelt. - -- Andernfalls wird der Wert verwendet um ein Attribut zu setzen. - -Ausnahmen zu dieser Regel sind die folgenden: - -- ``prefixPath`` wird an ``addPrefixPaths()`` übergeben - -- Die folgenden Setzer können nicht auf diesem Weg gesetzt werden: - - - ``setAttrib`` (über ``setAttribs`` **wird** es funktionieren) - - - ``setConfig`` - - - ``setOptions`` - - - ``setPluginLoader`` - - - ``setTranslator`` - - - ``setView`` - -Als Beispiel ist hier eine Konfigurationsdatei die eine Konfiguration für jeden Typ von konfigurierbaren Daten -übergibt: - -.. code-block:: ini - :linenos: - - [element] - name = "foo" - value = "foobar" - label = "Foo:" - order = 10 - required = true - allowEmpty = false - autoInsertNotEmptyValidator = true - description = "Foo Elemente sind für Beispiele" - ignore = false - attribs.id = "foo" - attribs.class = "element" - ; Setzt das 'onclick' Attribut - onclick = "autoComplete(this, '/form/autocomplete/element')" - prefixPaths.decorator.prefix = "My_Decorator" - prefixPaths.decorator.path = "My/Decorator/" - disableTranslator = 0 - validators.required.validator = "NotEmpty" - validators.required.breakChainOnFailure = true - validators.alpha.validator = "alpha" - validators.regex.validator = "regex" - validators.regex.options.pattern = "/^[A-F].*/$" - filters.ucase.filter = "StringToUpper" - decorators.element.decorator = "ViewHelper" - decorators.element.options.helper = "FormText" - decorators.label.decorator = "Label" - -.. _zend.form.elements.custom: - -Eigene Elemente ---------------- - -Es können eigene Elemente durch die Erweiterung der ``Zend\Form\Element`` Klasse erstellt werden. Übliche Gründe -hierfür sind: - -- Elemente, die eine gemeinsame Prüfung und/oder Filter teilen - -- Elemente die eine eigene Dekoratoren Funktionalität haben - -Es gibt zwei Methoden die typischerweise verwendet werden, um ein Element zu erweitern: ``init()``, was verwendet -werden kannm um eine eigene Initialisierungs-Logik zum Element hinzuzufügen, und ``loadDefaultDecorators()``, was -verwendet werden kann um eine Liste von Standard Dekoratoren zu setzen, die vom Element verwendet werden sollen. - -Als Beispiel nehmen wir an, dass alle Text Elemente eines Formulars die erstellt werden mit ``StringTrim`` -gefiltert werden müssen, mit einem gemeinsamen Regulären Ausdruck und das ein eigener Dekorator -'My_Decorator_TextItem' verwendet werden soll, der für die Darstellung von ihnen erstellt wurde; zusätzlich gibt -es eine Anzahl an Standardattributen, wie 'size', 'maxLength', und 'class', die spezifiziert werden sollen. So ein -Element könnte wie folgt definiert werden: - -.. code-block:: php - :linenos: - - class My_Element_Text extends Zend\Form\Element - { - public function init() - { - $this->addPrefixPath('My_Decorator', 'My/Decorator/', 'decorator') - ->addFilters('StringTrim') - ->addValidator('Regex', false, array('/^[a-z0-9]{6,}$/i')) - ->addDecorator('TextItem') - ->setAttrib('size', 30) - ->setAttrib('maxLength', 45) - ->setAttrib('class', 'text'); - } - } - -Man könnte dann das Formular Objekt über den Präfix Pfad für diese Elemente informieren, und die Erstellung der -Elemente beginnen: - -.. code-block:: php - :linenos: - - $form->addPrefixPath('My_Element', 'My/Element/', 'element') - ->addElement('text', 'foo'); - -Das 'foo' Element wird vom Typ ``My_Element_Text`` sein, und dem beschriebenen Verhalten entsprechen. - -Eine andere Methode, die man überschreiben sollte, wenn ``Zend\Form\Element`` erweitert wird, ist die -``loadDefaultDecorators()`` Methode. Diese Methode lädt fallweise ein Set von Standarddekoratoren für das -Element; es kann gewünscht sein, eigene Dekoratoren in der erweiterten Klasse zu verwenden: - -.. code-block:: php - :linenos: - - class My_Element_Text extends Zend\Form\Element - { - public function loadDefaultDecorators() - { - $this->addDecorator('ViewHelper') - ->addDecorator('DisplayError') - ->addDecorator('Label') - ->addDecorator('HtmlTag', - array('tag' => 'div', 'class' => 'element')); - } - } - -Es gibt viele Wege, Elemente anzupassen; man sollte sicherstellen die *API* Dokumentation von ``Zend\Form\Element`` -zu lesen um alle vorhandenen Methoden zu kennen. - - - -.. _`Zend\Validate\NotEmpty`: zend.validate.set.notempty diff --git a/docs/languages/de/modules/zend.form.quick-start.rst b/docs/languages/de/modules/zend.form.quick-start.rst deleted file mode 100644 index 3268299c6..000000000 --- a/docs/languages/de/modules/zend.form.quick-start.rst +++ /dev/null @@ -1,504 +0,0 @@ -.. EN-Revision: none -.. _zend.form.quickstart: - -Schnellstart mit Zend_Form -========================== - -Diese Anleitung soll die Grundsätze der Erstellung, Validierung und Darstellung von Formularen mit ``Zend_Form`` -zeigen. - -.. _zend.form.quickstart.create: - -Ein Form Objekt erstellen -------------------------- - -Die Erstellung eines Formular Objektes ist sehr einfach: nur ``Zend_Form`` instanzieren: - -.. code-block:: php - :linenos: - - $form = new Zend_Form; - -Für fortgeschrittene Anwendungsfälle, kann man eine ``Zend_Form`` Unterklasse erstellen, aber für einfache -Formulare, kann ein Formular programmtechnisch mit einem ``Zend_Form`` erstellt werden. - -Wenn man bei einem Formular Aktion und Methode spezifizieren will (immer eine gute Idee), kann das mit den -``setAction()`` und ``setMethod()`` Methoden gemacht werden: - -.. code-block:: php - :linenos: - - $form->setAction('/resource/process') - ->setMethod('post'); - -Der obige Code setzt die Formular Aktion zu der partiellen *URL*"``/resource/process``" und die Formular Methode zu -*HTTP* *POST*. Das wird während der endgültigen Darstellung berücksichtigt. - -Man kann zusätzliche *HTML* Attribute für das **
** Tag setzen, indem die ``setAttrib()`` oder -``setAttribs()`` Methoden verwendet werden. Zum Beispiel wenn man die ID setzen will, setzt man das "``id``" -Attribut: - -.. code-block:: php - :linenos: - - $form->setAttrib('id', 'login'); - -.. _zend.form.quickstart.elements: - -Elemente einer Form hinzufügen ------------------------------- - -Ein Formular ist nichts ohne seine Elemente. ``Zend_Form`` kommt mit einigen Standardelementen die *XHTML* über -``Zend_View`` Helfer darstellen. Das sind die folgenden: - -- button - -- checkbox (oder viele Checkboxen auf einmal mit multiCheckbox) - -- hidden - -- image - -- password - -- radio - -- reset - -- select (beide, normale und Mehrfachauswahl Typen) - -- submit - -- text - -- textarea - -Es gibt zwei Optionen für das Hinzufügen von Elementen zu einem Formular: Man kann ein konkretes Element -instanzieren und dieses dem Objekt übergeben, oder man kann den Typ des Elements übergeben und ``Zend_Form`` ein -Objekt des richtigen Typs für einen instanzieren lassen. - -Einige Beispiele: - -.. code-block:: php - :linenos: - - // Ein Element instanzieren und an das Form Objekt übergeben: - $form->addElement(new Zend\Form\Element\Text('username')); - - // Den Fyp des Form Elements dem Form Objekt übergeben: - $form->addElement('text', 'username'); - -Standardmäßig haben diese Elemente keine Prüfer oder Filter. Das bedeutet, dass man eigene Elemente mit -minimalen Prüfern und potentiellen Filtern konfigurieren muss. Man kann das entweder (a) vor der Übergabe des -Elements an das Formular machen, (b) über Konfigurationsoptionen die bei der Erstellung des Elements über -``Zend_Form`` angegeben werden, oder (c), durch beziehen des Elements vom Formular Objekt und dessen Konfiguration -im nachhinein. - -Betrachten wir zuerst die Erstellung eines Prüfers für eine konkrete Instanz eines Elements. Es können entweder -``Zend\Validate\*`` Instanzen übergeben werden, oder der Name des Prüfers, der verwendet werden soll: - -.. code-block:: php - :linenos: - - $username = new Zend\Form\Element\Text('username'); - - // Ein Zend\Validate\* Objekt übergeben: - $username->addValidator(new Zend\Validate\Alnum()); - - // Den Namen des Prüfers übergeben: - $username->addValidator('alnum'); - -Wenn die zweite Option verwendet wird, kann, wenn der Prüfer Argumente im Konstruktor akzeptiert, diesem ein Array -als dritter Parameter übergeben werden: - -.. code-block:: php - :linenos: - - // Ein Pattern übergeben - $username->addValidator('regex', false, array('/^[a-z]/i')); - -(Der zweite Parameter wird verwendet um anzuzeigen, ob spätere Prüfer bei einem Fehler dieses Prüfers -ausgeführt werden sollen oder nicht; standardmäßig ist er ``FALSE``.) - -Es kann auch gewünscht sein, ein Element als benötigt zu spezifizieren. Das kann durch Verwendung eines Accessors -getan werden, oder durch die Übergabe einer Option bei der Erstellung des Elements. Im ersteren Fall: - -.. code-block:: php - :linenos: - - // Dieses Element als benötigt definieren: - $username->setRequired(true); - -Wenn ein Element benötigt wird, wird ein 'NotEmpty' Prüfer ganz oben in der Prüfkette definiert, um -sicherzustellen, dass dieses Element einen Wert hat wenn er benötigt wird. - -Filter werden grundsätzlich auf dem gleichen Weg, wie die Prüfer, definiert. Zu Anschauungszwecken, wird ein -Filter hinzugefügt, der den endgültigen Wert klein schreibt: - -.. code-block:: php - :linenos: - - $username->addFilter('StringtoLower'); - -Das endgültige Setup, des Elements, könnte wie folgt aussehen: - -.. code-block:: php - :linenos: - - $username->addValidator('alnum') - ->addValidator('regex', false, array('/^[a-z]/')) - ->setRequired(true) - ->addFilter('StringToLower'); - - // oder kompakter: - $username->addValidators(array('alnum', - array('regex', false, '/^[a-z]/i') - )) - ->setRequired(true) - ->addFilters(array('StringToLower')); - -So einfach das ist, ist das für jedes einzelne Elemet in einer Form sehr aufwendig. Versuchen wir es also mit -Option (b) von oben. Wenn wir ein neues Element erstellen wird ``Zend\Form\Form::addElement()`` als Factory verwendet, -und wir können optional Konfigurationsoptionen übergeben. Diese können Prüfer und Filter enthalten die -angepasst werden können. Um alles von oben implizit durchzuführen, versuchen wir folgendes: - -.. code-block:: php - :linenos: - - $form->addElement('text', 'username', array( - 'validators' => array( - 'alnum', - array('regex', false, '/^[a-z]/i') - ), - 'required' => true, - 'filters' => array('StringToLower'), - )); - -.. note:: - - Wenn man sieht, dass man Elemente welche die gleichen Optionen in vielen Plätzen verwenden, konfiguriert, kann - es gewünscht sein, eine eigene ``Zend\Form\Element`` Unterklasse zu erstellen und diese stattdessen anzupassen; - das spart viel Tipparbeit im weiteren Verlauf. - -.. _zend.form.quickstart.render: - -Ein Formular darstellen ------------------------ - -Die Darstellung eines Formulars ist einfach. Die meisten Elemente verwenden einen ``Zend_View`` Helfer, um sich -selbst darzustellen und benötigen deshalb ein View Objekt, um dargestellt zu werden. Dafür gibt es zwei -unterschiedliche Varianten: Die *render()* Methode des Formulare verwenden, oder ein einfaches *echo*. - -.. code-block:: php - :linenos: - - // Explizit render() aufrufen und ein optionales View Objekt übergeben: - echo $form->render($view); - - // Angenommen ein View Objekt wurde vorher über setView() gesetzt: - echo $form; - -Standardmäßig versuchen ``Zend_Form`` und ``Zend\Form\Element`` ein im ``ViewRenderer`` initialisiertes View -Objekt zu verwenden, was bedeutet, dass die View nicht manuell gesetzt werden muss, wenn das *MVC* des Zend -Frameworks verwendet wird. Die Darstellung eines Formulars in einem View Skript ist sehr einfach: - -.. code-block:: php - :linenos: - - form ?> - -Unter der Hand verwendet ``Zend_Form``"Dekoratoren" um die Darstellung durchzuführen. Diese Dekoratoren können -Inhalte ersetzen, anfügen oder voranstellen, und haben eine volle Introspektive des Elements das Ihnen übergeben -wurde. Als Ergebnis können mehrere Dekoratoren kombiniert werden, um eigene Effekte zu ermöglichen. -Standardmüßig kombiniert ``Zend\Form\Element`` View Dekoratoren um seine Ausgaben zu erstellen; das Setup sieht -ähnlich diesem aus: - -.. code-block:: php - :linenos: - - $element->addDecorators(array( - 'ViewHelper', - 'Errors', - array('HtmlTag', array('tag' => 'dd')), - array('Label', array('tag' => 'dt')), - )); - -(Wobei der Name des View Helfers ist der verwendet wird, und variiert basierend auf dem Element.) - -Das obige Beispiel erstellt eine Ausgabe, ähnlich der folgenden: - -.. code-block:: html - :linenos: - -
-
- -
    -
  • '123-abc' has not only alphabetic and digit characters
  • -
  • '123-abc' does not match against pattern '/^[a-z]/i'
  • -
-
- -(Wenngleich nicht mit der gleichen Formatierung.) - -Die Dekoratoren die von einem Element verwendet werden, können geändert werden, um eine andere Ausgabe zu -erzeugen; seihe dazu das :ref:`Kapitel über Dekoratoren ` für mehr Informationen. - -Das Formular selbst, geht alle Elemente durch, und fügt diese in eine *HTML* **** ein. Die Aktion und -Methode, die bei der Erstellung des Formulars angegeben wurden, werden dem **** Tag angegeben, wie wenn sie -Attribute wären, die über ``setAttribs()`` und ähnliche gesetzt werden. - -Elemente werden, entweder in der Reihenfolge in der sie registriert wurden durchlaufen, oder, wenn ein Element ein -'order' Attribut enthält, in dieser Reihenfolge. Die Reihenfolge eines Elements kann, wie folgt, gesetzt werden: - -.. code-block:: php - :linenos: - - $element->setOrder(10); - -Oder bei der Erstellung des Elements durch Übergabe als Option: - -.. code-block:: php - :linenos: - - $form->addElement('text', 'username', array('order' => 10)); - -.. _zend.form.quickstart.validate: - -Prüfen, ob ein Formular gültig ist ----------------------------------- - -Nachdem ein Formular übermittelt wurde, muss diese geprüft werden, um zu sehen ob sie alle Prüfungen besteht. -Jedes Element wird gegen die angegebenen Daten geprüft; wenn ein Schlüssel, der dem Elementnamen entspricht, -nicht vorhanden ist, und das Element als benötigt markiert ist, werden die Prüfungen mit einem ``NULL`` Wert -ausgeführt. - -Wo kommen die Daten her? Man kann ``$_POST`` oder ``$_GET`` verwenden, oder jede andere Datenquelle die man bei der -Hand hat (Web Service Anfragen zum Beispiel): - -.. code-block:: php - :linenos: - - if ($form->isValid($_POST)) { - // erfolgreich! - } else { - // fehlgeschlagen! - } - -Mit *AJAX* Anfragen kann man manchmal davon abweichen einzelne Elemente oder Gruppen von Elementen zu prüfen. -``isValidPartial()`` prüft einen Teil des Formulars. Anders, als ``isValid()``, werden, wenn ein spezieller -Schlüssel nicht vorhanden ist, Prüfungen für dieses spezielle Element nicht durchgeführt: - -.. code-block:: php - :linenos: - - if ($form->isValidPartial($_POST)) { - // Elemente hat alle Prüfungen bestanden - } else { - // Ein oder mehrere getestete Elemente haben die Prüfung nicht bestanden - } - -Eine zusätzliche Methode, ``processAjax()``, kann auch dafür verwendet werden, um Teilformen zu prüfen. Anders -als ``isValidPartial()``, gibt sie eine *JSON* formatierten Zeichenkette zurück, die bei einem Fehler, die -Fehlermeldungen enthält. - -Angenommen die Prüfungen sind durchgeführt worden, dann können jetzt die gefilterten Werte geholt werden: - -.. code-block:: php - :linenos: - - $values = $form->getValues(); - -Wenn an irgendeinem Punkt die ungefilterten Werte benötigt werden, kann man folgendes verwenden: - -.. code-block:: php - :linenos: - - $unfiltered = $form->getUnfilteredValues(); - -Wenn man andererseits alle gültigen und gefilterten Werte eines teilweise gültigen Formulars benötigt kann -folgendes aufgerufen werden: - -.. code-block:: php - :linenos: - - $values = $form->getValidValues($_POST); - -.. _zend.form.quickstart.errorstatus: - -Fehlerstatus holen ------------------- - -Das Formular hat die Prüfungen nicht bestanden? In den meisten Fällen, kann das Formular neu dargestellt werden, -und Fehler werden angezeigt wenn Standardekoratoren verwendet werden: - -.. code-block:: php - :linenos: - - if (!$form->isValid($_POST)) { - echo $form; - - // oder dem View Obejekt zuordnen und eine View darstellen... - $this->view->form = $form; - return $this->render('form'); - } - -Wenn die Fehler inspiziert werden sollen, gibt es zwei Methoden. ``getErrors()`` gibt ein assoziatives Array von -Elementnamen/Codes zurück (wobei Codes ein Array von Fehlercodes ist). ``getMessages()`` gibt ein assoziatives -Array von Elementnamen/Nachrichten zurück (wobei Nachrichten ein assoziatives Array von -Fehlercodes/Fehlernachrichten Paaren ist). Wenn ein gegebenes Element keinen Fehler hat, wird es dem Array nicht -angefügt. - -.. _zend.form.quickstart.puttingtogether: - -Alles zusammenfügen -------------------- - -Bauen wir also ein Login Formular. Es benötigt Elemente die folgendes repräsentieren: - -- username - -- password - -- submit - -Für unsere Zwecke nehmen wir an, dass ein gültiger Benutzername nur alphanumerische Zeichen enthalten soll und -mit einem Buchstaben beginnt, eine Mindestlänge von 6 und eine Maximallänge von 20 Zeichen hat; er wird zu -Kleinschreibung normalisiert. Passwörter müssen mindestens 6 Zeichen lang sein. Der submit Wert wird einfach -ignoriert wenn wir fertig sind, er kann also ungeprüft bleiben. - -Wir verwenden die Stärke von ``Zend_Form``'s Konfigurationsoptionen um die Form zu erstellen: - -.. code-block:: php - :linenos: - - $form = new Zend\Form\Form(); - $form->setAction('/user/login') - ->setMethod('post'); - - // Ein username Element erstellen und konfigurieren: - $username = $form->createElement('text', 'username'); - $username->addValidator('alnum') - ->addValidator('regex', false, array('/^[a-z]+/')) - ->addValidator('stringLength', false, array(6, 20)) - ->setRequired(true) - ->addFilter('StringToLower'); - - // Ein Passwort Element erstellen und konfigurieren: - $password = $form->createElement('password', 'password'); - $password->addValidator('StringLength', false, array(6)) - ->setRequired(true); - - // Elemente dem Formular hinzufügen: - $form->addElement($username) - ->addElement($password) - // addElement() als Factory verwenden um den 'Login' Button zu erstellen: - ->addElement('submit', 'login', array('label' => 'Login')); - -Als nächstes wird ein Controller erstellt der das Formular behandelt: - -.. code-block:: php - :linenos: - - class UserController extends Zend\Controller\Action - { - public function getForm() - { - // Formular, wie oben beschrieben, erstellen - return $form; - } - - public function indexAction() - { - // user/form.phtml darstellen - $this->view->form = $this->getForm(); - $this->render('form'); - } - - public function loginAction() - { - if (!$this->getRequest()->isPost()) { - return $this->_forward('index'); - } - $form = $this->getForm(); - if (!$form->isValid($_POST)) { - // Fehlgeschlagene Prüfung; Form wieder anzeigen - $this->view->form = $form; - return $this->render('form'); - } - - $values = $form->getValues(); - // Jetzt versuchen zu Authentifizieren... - } - } - -Und ein View Skript für die Darstellung des Formulars: - -.. code-block:: php - :linenos: - -

Bitte anmelden:

- form ?> - -Wie man im Controller Code sieht, gibt es mehr Arbeit zu tun: Während die Übertragung gültig sein muss, kann es -trotzdem notwendig sein, zum Beispiel, ein Authentifizierung mit Hilfe von ``Zend_Auth`` durchzuführen. - -.. _zend.form.quickstart.config: - -Ein Zend_Config Objekt verwenden --------------------------------- - -Alle ``Zend_Form``'s sind konfigurierbar, indem ``Zend_Config`` verwendet wird; es kann entweder ein -``Zend_Config`` Objekt an den Kontruktor oder über ``setConfig()`` übergeben werden. Sehen wir uns an, wie das -obige Formular erstellt werden kann, wenn wir eine *INI* Datei verwenden. Zuerst folgen wir den Notwendigkeiten und -platzieren die Konfigurationen in Sektionen, die den Ort des Releases reflektieren, und fokusieren auf die -'development' Sektion. Als nächstes wird eine Sektion für den gegebenen Controller ('user') definiert und ein -Schlüssel für das Formular ('login'): - -.. code-block:: ini - :linenos: - - [development] - ; general form metainformation - user.login.action = "/user/login" - user.login.method = "post" - - ; username element - user.login.elements.username.type = "text" - user.login.elements.username.options.validators.alnum.validator = "alnum" - user.login.elements.username.options.validators.regex.validator = "regex" - user.login.elements.username.options.validators.regex.options.pattern = "/^[a-z]/i" - user.login.elements.username.options.validators.strlen.validator = "StringLength" - user.login.elements.username.options.validators.strlen.options.min = "6" - user.login.elements.username.options.validators.strlen.options.max = "20" - user.login.elements.username.options.required = true - user.login.elements.username.options.filters.lower.filter = "StringToLower" - - ; password element - user.login.elements.password.type = "password" - user.login.elements.password.options.validators.strlen.validator = "StringLength" - user.login.elements.password.options.validators.strlen.options.min = "6" - user.login.elements.password.options.required = true - - ; submit element - user.login.elements.submit.type = "submit" - -Das kann dann an den Contruktor des Formulars übergeben werden: - -.. code-block:: php - :linenos: - - $config = new Zend\Config\Ini($configFile, 'development'); - $form = new Zend\Form\Form($config->user->login); - -und das komplette Formular wird definiert werden. - -.. _zend.form.quickstart.conclusion: - -Schlussfolgerung ----------------- - -Hoffentlich ist, mit dieser kleinen Anleitung der Weg klar, um die Leistung und Flexibilität von ``Zend_Form`` -einzusetzen. Für detailiertere Informationen lesen Sie weiter! - - diff --git a/docs/languages/de/modules/zend.gdata.auth-sub.rst b/docs/languages/de/modules/zend.gdata.auth-sub.rst deleted file mode 100644 index 85928cb87..000000000 --- a/docs/languages/de/modules/zend.gdata.auth-sub.rst +++ /dev/null @@ -1,118 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.authsub: - -Authentifizierung mit AuthSub -============================= - -Der AuthSub Mechanismum erlaubt es Web Anwendungen zu schreiben die einen authentifizierten Zugang zu Google Data -Services benötigen, ohne das Code geschrieben werden muß der Benutzerzugangsdaten behandelt. - -Siehe http://code.google.com/apis/accounts/AuthForWebApps.html für weitere Informationen über Google Data -AuthSub Authentifizierung. - -Die Google Dokumentation sagt das der ClientLogin Mechanismum ausreichend für "installierte Anwendungen" ist, und -der AuthSub Mechanismum für "Web Anwendungen". Der Unterschied ist das AuthSub Interaktion vom Benutzer benötigt, -und ein Browser Interface das auf Umleitungsanfragen reagieren kann. Die ClientLogin Lösung verwendet *PHP* Code -um die Benutzerzugangsdaten anzubieten; der Benutzer wird nicht benötigt um seine Zugangsdaten einzugeben. - -Die Zugangsdaten die über den AuthSub Mechanismum bereitgestellt werden, werden vom Benutzer über die Web -Anwendung eingegeben. Deswegen müssen es Zugangsdaten sein die dem Benutzer bekannt sind. - -.. note:: - - **Registrierte Anwendungen** - - ``ZendGData`` unterstützt aktuell die Verwendung von sicheren Tokens nicht, weil die AuthSub Authentifizierung - die Übergabe von Digitalen Zertifikaten, um ein sicheres Token zu erhalten, nicht unterstützt. - -.. _zend.gdata.authsub.login: - -Einen AuthSub authentifizierten Http Clienten erstellen -------------------------------------------------------- - -Die *PHP* Anwendung sollte einen Hyperlink zur Google *URL* bieten welche die Authentifizierung durchführt. Die -statische Funktion ``ZendGData\AuthSub::getAuthSubTokenUri()`` liefert die richtige *URL*. Die Argumente dieser -Funktion inkludieren die *URL* zur eigenen *PHP* Anwendung so das Google den Browser des Benutzers um zur eigenen -Anwendung zurück umleiten kann, nachdem die Benutzerdaten verifiziert wurden. - -Nachdem Google's Authentifizierungs Server den Browser des Benutzers zur aktuellen Anwendung umgeleitet haben, wird -eine ``GET`` Anfrageparameter gesetzt der **token** heißt. Der Wert dieses Parameters ist ein einmal-verwendbarer -Token der für authentifizierten Zugriff verwendet werden kann. Dieser Token kann in einen mehrfach-verwendbaren -Token konvertiert und in der eigenen Session gespeichert werden. - -Um den Token dann zu verwenden muß ``ZendGData\AuthSub::getHttpClient()`` aufgerufen werden. Diese Funktion gibt -eine Instanz von ``Zend\Http\Client`` zurück, mit gültigen Headern gesetzt, sodas eine nachfolgende Anfrage der -Anwendung, die diesen *HTTP* Clienten verwenden, auch authentifiziert sind. - -Nachfolgend ist ein Beispiel von *PHP* Code für eine Web Anwendung um eine Authentifizierung zu erlangen damit der -Google Calender Service verwendet werden kann, und der ein ``ZendGData`` Client Objekt erstellt das diesen -authentifizierten *HTTP* Client verwendet. - -.. code-block:: php - :linenos: - - $my_calendar = 'http://www.google.com/calendar/feeds/default/private/full'; - - if (!isset($_SESSION['cal_token'])) { - if (isset($_GET['token'])) { - // Ein einmal-verwendbarer Token kann in einen Session Token konvertiert werden - $session_token = - ZendGData\AuthSub::getAuthSubSessionToken($_GET['token']); - // Speichert den Session Token in der Session - $_SESSION['cal_token'] = $session_token; - } else { - // Zeigt einen Link zur Erstellung eines einmal-verwendbaren Tokens - $googleUri = ZendGData\AuthSub::getAuthSubTokenUri( - 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'], - $my_calendar, 0, 1); - echo "Klicke hier um diese Anwendung " . - "zu authorisieren."; - exit(); - } - } - - // Erstellt einen authentifizierten Http Client um mit Google zu sprechen - $client = ZendGData\AuthSub::getHttpClient($_SESSION['cal_token']); - - // Erstellt ein Gdara Objekt das den authentifizierten Http Client verwendet - $cal = new ZendGData\Calendar($client); - -.. _zend.gdata.authsub.logout: - -Beenden der AuthSub Authentifizierung -------------------------------------- - -Um den authentifizierten Status eines gegebenen Status zu beenden, kann die statische Funktion -``ZendGData\AuthSub::AuthSubRevokeToken()`` verwendet werden. Andernfalls bleibt der Token noch für einige Zeit -gültig. - -.. code-block:: php - :linenos: - - // Vorsichtig den Wert erstellen um Sicherheitsprobleme mit der Anwendung zu vermeiden - $php_self = htmlentities(substr($_SERVER['PHP_SELF'], - 0, - strcspn($_SERVER['PHP_SELF'], "\n\r")), - ENT_QUOTES); - - if (isset($_GET['logout'])) { - ZendGData\AuthSub::AuthSubRevokeToken($_SESSION['cal_token']); - unset($_SESSION['cal_token']); - header('Location: ' . $php_self); - exit(); - } - -.. note:: - - **Sicherheitshinweise** - - Das Vermeiden der ``$php_self`` Variable im obigen Beispiel ist eine generelle Sicherheits Richtlinie, die nicht - nur für ``ZendGData`` gilt. Inhalt der zu *HTTP* Headern ausgegeben wird sollte immer gefiltert werden. - - Betreffend der Beendigung des authentifizierten Tokens wird empfohlen dass dies gemacht wird, sobald der - Benutzer mit seiner Google Data Session fertig ist. Die Möglichkeit das jemand das Token herausfindet und für - seine eigenen miesen Zwecke verwendet ist sehr klein, aber trotzdem ist es eine gute Praxis einen - authentifizierten Zugriff auf jegliche Services zu beenden. - - - diff --git a/docs/languages/de/modules/zend.gdata.books.rst b/docs/languages/de/modules/zend.gdata.books.rst deleted file mode 100644 index c0142f95a..000000000 --- a/docs/languages/de/modules/zend.gdata.books.rst +++ /dev/null @@ -1,423 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.books: - -Die Buchsuche Daten API verwenden -================================= - -Die Buchsuche Daten *API* von Google erlaubt Client Anwendungen Inhalte von Buchsuchen zu sehen und in der Form von -Google Daten *API* Feeds zu aktualisieren. - -Die Client Anwendung kann die Buchsuche Daten *API* verwenden um Volltextsuchen nach Büchern durchzuführen und um -Standardinformationen von Büchern zu erhalten, diese zu bewerten und zu kommentieren. Man kann auch individuelle -`Sammlungen von Benutzerbibliotheken und öffentlichen Kommentaren`_. Letztendlich kann eine Anwendung -authentifizierte Anfragen abschicken um es Benutzern zu ermöglichen Bibliothekssammlungen zu erstellen, zu -modifizieren, zu bewerten, zu benennen, zu kommentieren und andere Accountspezifische Dinge zu erlauben. - -Für weitere Informationen über die Buchsuche Daten *API* referieren Sie bitte zum offiziellen `PHP Developer's -Guide`_ auf code.google.com. - -.. _zend.gdata.books.authentication: - -Beim Buchsuche Service authentifizieren ---------------------------------------- - -Man kann sowohl auf öffentliche als auch private Feeds zugreifen indem man die Buchsuche Daten *API* verwendet. -Öffentliche Feeds benötigen keine Authentifizierung, aber man kann Sie nur lesen. Wenn man Benutzerbibliotheken -verändern oder bewerden will, oder Label hinzufügen will muß der eigene Client authentifiziert werden bevor man -private Feeds anfragt. Er kann sich authentifizieren indem einer von zwei Möglichkeiten verwendet wird: AuthSub -Proxy Authentifizierung oder ClientLogin Benutzername/Passwort Authentifizierung. Bitte referieren Sie zum -`Authentifizierungs Kapitel im PHP Developer Guide`_ für weitere Details. - -.. _zend.gdata.books.searching_for_books: - -Nach Büchern suchen -------------------- - -Die Buchsuche Daten *API* bietet eine Anzahl an Feeds die Sammlungen von Büchern auflisten. - -Die am meisten übliche Aktion ist das empfangen von Bücherlisten die einer Suchanfrage entsprechen. Um das zu tun -muß ein ``VolumeQuery`` Objekt erstellt und an die ``Books::getVolumeFeed()`` Methode übergeben werden. - -Um zum Beispiel eine Schlüsselwortabfrage, mit einem Filter auf der Sichtbarkeit um die Ergebnisse auf partielle -oder komplette sichtbare Bücher zu gegrenzen, durchzuführen müssen die ``setMinViewability()`` und ``()`` -Methoden des ``VolumeQuery`` Objekts verwendet werden. Der folgende Codeschnipsel zeigt Titel und Sichtbarkeit -aller Volumes deren Metadaten oder Texte dem Suchbegriff "domino" entsprechen: - -.. code-block:: php - :linenos: - - $books = new ZendGData\Books(); - $query = $books->newVolumeQuery(); - - $query->setQuery('domino'); - $query->setMinViewability('partial_view'); - - $feed = $books->getVolumeFeed($query); - - foreach ($feed as $entry) { - echo $entry->getVolumeId(); - echo $entry->getTitle(); - echo $entry->getViewability(); - } - -Die ``Query`` Klasse, und Subklassen wie ``VolumeQuery``, sind dafür zuständig das Feed *URL* erzeugt werden. Der -VolumeQuery der vorher gezeigt wurde erzeugt eine *URL* die der folgenden entspricht: - -.. code-block:: php - :linenos: - - http://www.google.com/books/feeds/volumes?q=keyword&min-viewability=partial - -Beachte: Da die Ergebnisse von Buchsuchen öffentlich sind, können Buchsuche Abfragen ohne Authentifizierung -durchgeführt werden. - -Hier sind einige der üblichsten ``VolumeQuery`` Methoden für das Setzen von Suchparametern: - -``setQuery()``: Spezifiziert einen Suchabfragebegriff. Buchsuchen durchsuchen alle Metadaten der Bücher und des -kompletten Textes nach Büchern die dem Begriff entsprechen. Buchmetadaten enthalten Titel, Schlüsselwörter, -Beschreibungen, Namen von Autoren, und Untertitel. Es ist zu beachten das alle Leerzeichen, Hochkomma oder andere -Punktierungen im Parameterwert *URL*-escaped werden müssen. (Verwende ein Plus (**+**) für ein Leerzeichen.) Um -nach einer exakten Phrase zu suchen muß die Phrase in Hochkomma eingeschlossen werden. Um zum Beispiel nach einem -Buch zu suchen das der Phrase "spy plane" entspricht, muß der ``q`` Parameter auf ``%22spy+plane%22`` gesetzt -werden. Man kann jede der `zusätzlichen Suchoperatoren`_ verwenden die von der Buchsuche unterstützt werden. Zum -Beispiel gibt ``jane+austen+-inauthor:austen`` Entsprechungen zurück die Jane Austen erwähnen (aber nicht von Ihr -geschrieben wurden). - -``setStartIndex()``: Spezifiziert den Index des ersten passenden Ergebnisses das im Ergebnisset enthalten sein -sollte. Dieser Parameter verwendet einen eins-basierenden Index, was bedeutet dass das erste Ergebnis 1 ist, das -zweite Ergebnis 2 und so weiter. Dieser Parameter arbeitet in Verbindung mit dem max-results Parameter um -festzustellen welche Ergebnisse zurückzugeben sind. Um zum Beispiel das dritte Set von 10er Ergebnissen zu -erhalten, 21-30-set, muß der ``start-index`` Parameter auf **21** und der max-results Parameter auf **10** gesetzt -werden. Es ist zu beachten dass dies kein genereller Cursor Mechanismus ist. Wenn man zuerst eine Abfrage mit -``?start-index=1&max-results=10`` und anschließend eine andere Anfrage mit ``?start-index=11&max-results=10``, -kann der Service nicht garantieren das die Ergebnisse äquivalent sind, weil zwischen den zwei Anfragen -Einfügungen oder Löschungen durchgeführt worden sein können. - -``setMaxResults()``: Spezifiziert die maximale Anzahl an Ergebnissen die im Ergebnisset enthalten sein sollen. -Dieser Parameter arbeitet in Verbindung mit dem start-index Parameter um festzustellen welche Ergebnisse -zurückgegeben werden sollen. Der Standardwert dieses Parameters ist **10** und der Maximalwert ist **20**. - -``setMinViewability()``: Erlaubt es Ergebnisse entsprechend dem `Status der Sichtbarkeit`_ der Bücher zu filtern. -Dieser Parameter akzeptiert einen von drei Werten: **'none'** (der Standardwert, der alle passenden Bücher -zurückgibt Unabhängigkeit von der Sichtbarkeit), **'partial_view'** (was nur Bücher zurückgibt die der Benutzer -komplett oder teilweise sehen kann), oder **'full_view'** (was nur Bücher zurückgibt die der Benutzer in Ihrer -Komplettheit sehen kann). - -.. _zend.gdata.books.partner_restrict: - -Partner Co-Branded Suche -^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Google Buchsuche bietet eine `Co-Branded Suche`_ an, die Inhaltspartner erlaubt Volltextsuchen Ihrer Bücher -von deren Webseite anzubieten. - -Wenn man ein Partner ist der eine Co-Branded Suche durchführen will indem die Buchsuche Daten *API* verwendet -wird, kann man das tun indem die Feed *URL* von vorher so angepasst wird das Sie auf die eigene Co-Branded -Suchimplementation zeigt. Wenn zum Beispiel, eine Co-Branded Suche unter der folgenden *URL* vorhanden ist: - -.. code-block:: php - :linenos: - - http://www.google.com/books/p/PARTNER_COBRAND_ID?q=ball - -kann man die gleichen Ergebnisse erhalten indem die Buchsuche Daten *API* mit der folgenden *URL* verwendet wird: - -.. code-block:: php - :linenos: - - http://www.google.com/books/feeds/p/PARTNER_COBRAND_ID/volumes?q=ball+-soccer - -Um eine alternative *URL* zu spezifizieren wenn ein Volume Feed abgefragt wird, kann ein extra Parameter an -``newVolumeQuery()`` übergeben werden - -.. code-block:: php - :linenos: - - $query = - $books->newVolumeQuery('http://www.google.com/books/p/PARTNER_COBRAND_ID'); - -Für zusätzliche Informationen oder Support, sehen Sie in unser `Partner Help Center`_. - -.. _zend.gdata.books.community_features: - -Übliche Features verwenden --------------------------- - -.. _zend.gdata.books.adding_ratings: - -Eine Bewertung hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Ein Benutzer kann einem Buch eine Bewertung hinzufügen. Die Buchsuche verwendet eie 1-5 Bewertungssystem in dem 1 -die geringste Bewertung ist. Benutzer können Ihre Bewertungen nicht aktualisieren oder löschen. - -Um eine Bewertung hinzuzufügen, muß ein ``Rating`` an ``VolumeEntry`` hinzugefügt werden und an den -Anmerkungsfeed gesendet werden. Im unten gezeigten Beispiel starten wir von einem leeren ``VolumeEntry`` Objekt. - -.. code-block:: php - :linenos: - - $entry = new ZendGData\Books\VolumeEntry(); - $entry->setId(new ZendGData\App\Extension\Id(VOLUME_ID)); - $entry->setRating(new ZendGData\Extension\Rating(3, 1, 5, 1)); - $books->insertVolume($entry, ZendGData\Books::MY_ANNOTATION_FEED_URI); - -.. _zend.gdata.books.reviews: - -Reviews -^^^^^^^ - -Zusätzlich zu Bewertungen, können authentifizierte Benutzer Reviews übermitteln oder Ihre eigenen Reviews -bearbeiten. Für Informationen darüber wie vorher übermittelte Reviews angefragt werden können, siehe `Empfangen -von Anmerkungen`_. - -.. _zend.gdata.books.adding_review: - -Eine Review hinzufügen -^^^^^^^^^^^^^^^^^^^^^^ - -Um eine Review hinzuzufügen, muß man ein ``Review`` Objekt an ``VolumeEntry`` übergeben und es an den -Anmerkungsfeed übertragen. Im unteren Beispiel starten wir von einem bestehenden ``VolumeEntry`` Objekt. - -.. code-block:: php - :linenos: - - $annotationUrl = $entry->getAnnotationLink()->href; - $review = new ZendGData\Books\Extension\Review(); - - $review->setText("Dieses Buch ist aufregend!"); - $entry->setReview($review); - $books->insertVolume($entry, $annotationUrl); - -.. _zend.gdata.books.editing_review: - -Eine Review bearbeiten -^^^^^^^^^^^^^^^^^^^^^^ - -Um eine bestehende Review zu aktualisieren muß man zuerst die Review die bearbeitet werden soll empfangen, diese -modifizieren, und dann an den Anmerkungsfeed übertragen. - -.. code-block:: php - :linenos: - - $entryUrl = $entry->getId()->getText(); - $review = new ZendGData\Books\Extension\Review(); - - $review->setText("Dieses Buch ist leider nicht sehr gut!"); - $entry->setReview($review); - $books->updateVolume($entry, $entryUrl); - -.. _zend.gdata.books.labels: - -Labels -^^^^^^ - -Die Buchsuche Daten *API* kann verwendet werden um Volumes mit Label über Schlüsselwörtern zu versehen. Ein -Benutzer kann diese übertragen, empfangen und verändern. Siehe `Anmerkungen empfangen`_ dafür wie vorher -übertragene Label gelesen werden können. - -.. _zend.gdata.books.submitting_labels: - -Ein Set von Label übermitteln -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um Label zu übermitteln muß ein ``Category`` Objekt mit dem Schema ``LABELS_SCHEME`` an ``VolumeEntry`` -hinzugefügt und an den Anmerkungsfeed übergeben werden. - -.. code-block:: php - :linenos: - - $annotationUrl = $entry->getAnnotationLink()->href; - $category = new ZendGData\App\Extension\Category( - 'rated', - 'http://schemas.google.com/books/2008/labels'); - $entry->setCategory(array($category)); - $books->insertVolume($entry, ZendGData\Books::MY_ANNOTATION_FEED_URI); - -.. _zend.gdata.books.retrieving_annotations: - -Empfangen von Anmerkungen: Reviews, Bewertungen und Label -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Buchsuche Daten *API* kann verwendet werden um Anmerkungen zu empfangen die von einen angegebenen Benutzer -übermittelt wurden. Anmerkungen enthalten Reviews, Bewertungen und Label. Um irgendwelche Anmerkungen von -Benutzern zu empfangen muß eine nicht authentifizierte Anfrage gesendet werden die die BenutzerID des Benutzers -enthält. Um die Anmerkungen des authentifizierten Benutzers zu empfangen muß der Wert **me** als BenutzerID -verwendet werden. - -.. code-block:: php - :linenos: - - $feed = $books->getVolumeFeed( - 'http://www.google.com/books/feeds/users/USER_ID/volumes'); - (oder) - $feed = $books->getUserAnnotationFeed(); - - // Gibt Titel und Bewertungswerte aus - foreach ($feed as $entry) { - foreach ($feed->getTitles() as $title) { - echo $title; - } - if ($entry->getRating()) { - echo 'Bewertung: ' . $entry->getRating()->getAverage(); - } - } - -Für eine Liste an unterstützten Abfrageparametern, kann man in das Kapitel `Abfrageparameter`_ sehen. - -.. _zend.gdata.books.deleting_annotations: - -Anmerkungen löschen -^^^^^^^^^^^^^^^^^^^ - -Wenn man einen Anmerkungseintrag empfängt der Bewertungen, Reviews und/oder Label enthält können alle -Anmerkungen entfernt werden indem ``deleteVolume()`` an diesem Eintrag aufgerufen wird. - -.. code-block:: php - :linenos: - - $books->deleteVolume($entry); - -.. _zend.gdata.books.sharing_with_my_library: - -Büchersammlungen und My Library -------------------------------- - -Die Google Buchsuche bietet eine Anzahl von Benutzerspezifischen Buchsammlungen, jede mit Ihrem eigenen Feed. - -The wichtigste Sammlung ist die My Library des Benutzers, welche die Bücher repräsentiert die sich der Benutzer -merken, organisieren und mit anderen Teilen will. Das ist die Sammlung die der Benutzer sieht wenn er auf seine -oder ihre `My Library Seite`_ zugreift. - -.. _zend.gdata.books.retrieving_books_in_library: - -Bücher auf der Benutzerbibliothek erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die folgenden Kapitel beschreiben wie eine Liste von Büchern von der Bibliothek eines Benutzers, mit oder ohne -Abfrageparameter, empfangen werden können. - -Man kann den öffentlichen Feed einer Buchsuche ohne Authentifizierung abfragen. - -.. _zend.gdata.books.retrieving_all_books_in_library: - -Alle Bücher in einer Benutzerbibliothek empfangen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Bücher eines Benutzers zu empfangen muß eine Anfrage an den My Library Feed gesendet werden. Um die -Bibliothek des authentifizierten Benutzers zu erhalten muß **me** statt der ``USER_ID`` verwendet werden. - -.. code-block:: php - :linenos: - - $feed = $books->getUserLibraryFeed(); - -Es ist zu beachten das es sein kann das der Feed nicht alle Bücher des Benutzers enthält, weil es ein -Standardlimit der Anzahl der zurückgegebenen Ergebnisse gibt. Für weitere Information siehe den ``max-results`` -Abfrageparameter in `Suchen nach Büchern`_. - -.. _zend.gdata.books.retrieving_books_in_library_with_query: - -Nach Büchern in einer Benutzerbibliothek suchen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Genauso wie man `über alle Bücher suchen kann`_, kann man auch eine Volltextsuche über die Bücher in einer -Benutzerbibliothek durchführen. Um das zu tun müssen einfach die betreffenden Parameter am ``VolumeQuery`` Objekt -gesetzt werden. - -Zum Beispiel gibt die folgende Abfrage alle Bücher in der eigenen Bibliothek zurück die das Word "Bär" -enthalten: - -.. code-block:: php - :linenos: - - $query = $books->newVolumeQuery( - 'http://www.google.com/books/feeds/users/' . - 'USER_ID/collections/library/volumes'); - $query->setQuery('Bär'); - $feed = $books->getVolumeFeed($query); - -Für eine Liste von unterstützten Abfrageparametern können Sie in das Kapitel `Abfrageparameter`_ sehen. -Zusätzlich kann nach Büchern gesucht werden die `von einem Benutzer gelabelt wurden`_: - -.. code-block:: php - :linenos: - - $query = $books->newVolumeQuery( - 'http://www.google.com/books/feeds/users/' . - 'USER_ID/collections/library/volumes'); - $query->setCategory( - $query->setCategory('favorites'); - $feed = $books->getVolumeFeed($query); - -.. _zend.gdata.books.updating_library: - -Bücher in einer Benutzerbibliothek aktualisieren -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Buchsuche Daten *API* kann dazu verwendet werden um ein Buch einer Benutzerbibliothek hinzuzufügen oder es aus -Ihr zu entfernen. Bewertungen, Reviews und Label sind über alle Sammlungen eines Benutzers gültig, und können -deswegen bearbeitet werden indem der Anmerkungsfeed verwendet wird (siehe `Verwendung üblicher Features`_). - -.. _zend.gdata.books.library_book_add: - -Ein Buch zu einer Bibliothek hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Nach der Authentifizierung können Bucher zur aktuellen Benutzerbibliothek hinzugefügt werden. - -Man kann entweder einen Eintrag von Null auf erstellen wenn man die Volume ID weiß, oder einen Eintrag einfügen -wenn von irgendeinem Feed gelesen wird. - -Das folgende Beispiel erstellt einen neuen Eintrag und fügt Ihn der Bibliothek hinzu: - -.. code-block:: php - :linenos: - - $entry = new ZendGData\Books\VolumeEntry(); - $entry->setId(new ZendGData\App\Extension\Id(VOLUME_ID)); - $books->insertVolume( - $entry, - ZendGData\Books::MY_LIBRARY_FEED_URI - ); - -Das folgende Beispiel fügt ein bestehendes ``VolumeEntry`` Objekt in der Bibliothek hinzu: - -.. code-block:: php - :linenos: - - $books->insertVolume( - $entry, - ZendGData\Books::MY_LIBRARY_FEED_URI - ); - -.. _zend.gdata.books.library_book_remove: - -Ein Buch von einer Bibliothek entfernen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um ein Buch von einer Benutzerbibliothek zu entfernen, muß ``deleteVolume()`` auf dem ``VolumeEntry`` Objekt -aufgerufen werden. - -.. code-block:: php - :linenos: - - $books->deleteVolume($entry); - - - -.. _`Sammlungen von Benutzerbibliotheken und öffentlichen Kommentaren`: http://books.google.com/googlebooks/mylibrary/ -.. _`PHP Developer's Guide`: http://code.google.com/apis/books/gdata/developers_guide_php.html -.. _`Authentifizierungs Kapitel im PHP Developer Guide`: http://code.google.com/apis/books/gdata/developers_guide_php.html#Authentication -.. _`zusätzlichen Suchoperatoren`: http://books.google.com/advanced_book_search -.. _`Status der Sichtbarkeit`: http://code.google.com/apis/books/docs/dynamic-links.html#terminology -.. _`Co-Branded Suche`: http://books.google.com/support/partner/bin/answer.py?hl=en&answer=65113 -.. _`Partner Help Center`: http://books.google.com/support/partner/ -.. _`Empfangen von Anmerkungen`: #zend.gdata.books.retrieving_annotations -.. _`Anmerkungen empfangen`: #zend.gdata.books.retrieving_annotations -.. _`Abfrageparameter`: #zend.gdata.books.query_pParameters -.. _`My Library Seite`: http://books.google.com/books?op=library -.. _`Suchen nach Büchern`: #zend.gdata.books.searching_for_books -.. _`über alle Bücher suchen kann`: #zend.gdata.books.searching_for_books -.. _`von einem Benutzer gelabelt wurden`: #zend.gdata.books.labels -.. _`Verwendung üblicher Features`: #zend.gdata.books.community_features diff --git a/docs/languages/de/modules/zend.gdata.calendar.rst b/docs/languages/de/modules/zend.gdata.calendar.rst deleted file mode 100644 index 29b0deced..000000000 --- a/docs/languages/de/modules/zend.gdata.calendar.rst +++ /dev/null @@ -1,697 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.calendar: - -Google Kalender verwenden -========================= - -Die ``ZendGData\Calendar`` Klasse kann verwendet werden um Events im Online Google Kalender Service zu sehen, -erstellen, updaten und löschen. - -Siehe http://code.google.com/apis/calendar/overview.html für weitere Informationen über die Google Kalender -*API*. - -.. _zend.gdata.calendar.connecting: - -Zum Kalender Service verbinden ------------------------------- - -Die Google Kalender *API* basiert, wie alle GData *API*\ s, auf dem Atom Publishing Protocol (APP), einem *XML* -basierenden Format für gemanagte Web-basierte Ressourcen. Verkehr zwischen einem Client und den Google Kalender -Servern läuft über *HTTP* und erlaubt sowohl authentifizierte als auch unauthentifizierte Verbindungen. - -Bevor irgendeine Transaktion stattfinden kann, muß diese Verbindung erstellt werden. Die Erstellung einer -Verbindung zu den Kalender Server beinhaltet zwei Schritte: Erstellung eines *HTTP* Clients und das binden einer -``ZendGData\Calendar`` Instanz an diesen Client. - -.. _zend.gdata.calendar.connecting.authentication: - -Authentifizierung -^^^^^^^^^^^^^^^^^ - -Die Google Kalender *API* erlaubt den Zugriff auf beide, öffentliche und private, Kalender Feeds. Öfentliche -Foods benötigen keine Authentifizierung, aber sie können nur gelesen werden und bieten reduzierte -Funktionalitäten. Private Feeds bieten die kompletteste Funktionalität benötigen aber eine authentifizierte -Verbindung zu den Kalender Servern. Es gibt drei Authentifizierungs Schemas die von Google Kalender unterstützt -werden: - -- **ClientAuth** bietet direkte Benutzername/Passwort Authentifizierung zu den Kalender Servern. Da dieses Schema - erfordert das Benutzer die Anwendung mit Ihrem Passwort versorgen, ist diese Authentifizierung nur zu empfehlen - wenn andere Authentifizierungs Schemas nicht anwendbar sind. - -- **AuthSub** erlaubt die Authentifizierung zu den Kalender Servern über einen Google Proxy Server. Das bietet den - gleichen Level von Bequemlichkeit wie ClientAuth aber ohne die Sicherheits Risiken, was es zu einer idealen Wahl - für Web basierende Anwendungen macht. - -- **MagicCookie** erlaubt die Authentifizierung basieren auf einer semi-zufälligen *URL* von immerhalb des Google - Kalender Interfaces. Das ist das einfachste Authentifizierungs Schema das implmentiert werden kann, erzwingt aber - das Benutzer ihre Sicherheits *URL* manuell empfangen, bevor sie sich authentifizieren können, und ist limitiert - auf nur-lesenden Zugriff. - -Die ``ZendGData`` Bibliothek bietet Unterstützung für alle drei Authentifizierungs Schemas. Der Rest dieses -Kapitels nimmt an das die vorhandenen Authentifizierungs Schemas geläufig sind und wie eine korrekte -Authentifizierte Verbindung erstellt wird. Für weitere Details kann in die :ref:`Authentifizierungs Sektion -` dieses Handbuches, oder in die `Authentifizierungs Übersicht im Google -Data API Entwickler Guide`_ gesehen werden. - -.. _zend.gdata.calendar.connecting.service: - -Eine Service Instanz erstellen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um mit dem Google Kalender zu interagieren, bietet diese Bibliothek die ``ZendGData\Calendar`` Service Klasse. -Diese Klasse bietet ein übliches Interface zu den Google Data und Atom Publishing Protocol Modellen und assistiert -in der Behandlung der Anfragen zum und von den Kalender Servern. - -Sobald ein Authentifizierung Schema ausgewählt wurde, besteht der nächste Schritt darin eine Instanz von -``ZendGData\Calendar`` zu erstellen. Der Klassen Konstruktor nimmt eine Instanz von ``Zend\Http\Client`` als -einzelnes Argument. Das bietet ein Interface für AuthSub und ClientAuth Authentifizierungen, da beide von Ihnen -die Erstellung eines speziellen authentifizierten *HTTP* Clients benötigen. Wenn keine Argumente angegeben werden, -wird automatisch eine unauthentifizierte Instanz von ``Zend\Http\Client`` erstellt. - -Das folgende Beispiel zeigt wie man eine Kalender Service Klasse erstellt und dabei die ClientAuth -Authentifizierung verwendet: - -.. code-block:: php - :linenos: - - // Parameter für die ClientAuth Authentifizierung - $service = ZendGData\Calendar::AUTH_SERVICE_NAME; - $user = "sample.user@gmail.com"; - $pass = "pa$$w0rd"; - - // Erstellt einen authentifizierten HTTP Client - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - - // Erstellt eine Instanz des Kalender Services - $service = new ZendGData\Calendar($client); - -Ein Kalender Service der AuthSub verwendet, kann ähnlich erstellt werden, durch eine etwas längere Schreibweise: - -.. code-block:: php - :linenos: - - /* - * Empfängt die aktuelle URL so das der AuthSub Server weiß wohin er den - * Benutzer umleiten soll nachdem die Authentifizierung komplett ist. - */ - function getCurrentUrl() - { - global $_SERVER; - - // Filtert php_self um Sicherheitsprobleme zu vermeiden. - $php_request_uri = - htmlentities(substr($_SERVER['REQUEST_URI'], - 0, - strcspn($_SERVER['REQUEST_URI'], "\n\r")), - ENT_QUOTES); - - if (isset($_SERVER['HTTPS']) && - strtolower($_SERVER['HTTPS']) == 'on') { - $protocol = 'https://'; - } else { - $protocol = 'http://'; - } - $host = $_SERVER['HTTP_HOST']; - if ($_SERVER['HTTP_PORT'] != '' && - (($protocol == 'http://' && $_SERVER['HTTP_PORT'] != '80') || - ($protocol == 'https://' && $_SERVER['HTTP_PORT'] != '443'))) { - $port = ':' . $_SERVER['HTTP_PORT']; - } else { - $port = ''; - } - return $protocol . $host . $port . $php_request_uri; - } - - /** - * Einen AuthSub authentifizierten HTTP Client nehmen, der den Benutzer - * zum AuthSub Server zum Login umleitet wenn es notwendig ist. - */ - function getAuthSubHttpClient() - { - global $_SESSION, $_GET; - - // Wenn es keine AuthSub Session oder einmal-benutzbares Token gibt die auf - // uns warten, den Benutzer zum AuthSub Server umleiten um Ihn zu erhalten - if (!isset($_SESSION['sessionToken']) && !isset($_GET['token'])) { - // Parameter für den AuthSub Server - $next = getCurrentUrl(); - $scope = "http://www.google.com/calendar/feeds/"; - $secure = false; - $session = true; - - // Den Benutzer zum AuthSub server umleiten zur Anmeldung - - $authSubUrl = ZendGData\AuthSub::getAuthSubTokenUri($next, - $scope, - $secure, - $session); - header("HTTP/1.0 307 Temporary redirect"); - - header("Location: " . $authSubUrl); - - exit(); - } - - // Konvertiert ein AuthSub einmal-benutzbares Token in ein Session - // Token wenn das notwendig ist - if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) { - $_SESSION['sessionToken'] = - ZendGData\AuthSub::getAuthSubSessionToken($_GET['token']); - } - - // An diesem Punkt sind wir authentifiziert über AuthSub und können - // eine authentifizierte HTTP Client Instanz holen - - // Erstellt einen authentifizierte HTTP Client - $client = ZendGData\AuthSub::getHttpClient($_SESSION['sessionToken']); - return $client; - } - - // -> Skript Bearbeitung beginnt hier <- - - // Sicher stellen das der Benutzer eine gültige Session hat, sodas der - // AuthSub Session Token gespeichert werden kann sobald er vorhanden ist - session_start(); - - // Erstellt eine Instanz des Kalender Services, und leitet den Benutzer - // zum AuthSub Server um wenn das notwendig ist. - $service = new ZendGData\Calendar(getAuthSubHttpClient()); - -Schlußendlich, kann ein nicht authentifizierter Server erstellt werden um Ihn entweder mit öffentlichen Feeds -oder MagicCookie Authentifizierung zu verwenden: - -.. code-block:: php - :linenos: - - // Erstellt eine Instanz des Kalender Services wobei ein nicht - // authentifizierter HTTP Client verwendet wird - - $service = new ZendGData\Calendar(); - -Es ist zu beachten das die MagicCookie Authentifizierung nicht mit der *HTTP* Verbindung unterstützt wird, sonder -stattdessen wärend der gewählten Sichtbarkeit spezifiziert wird, wärend Anfragen abgeschickt werden. Siehe die -folgende Sektion über das Empfangen von Events für ein Beispiel. - -.. _zend.gdata.calendar_retrieval: - -Eine Kalender Liste empfangen ------------------------------ - -Der Kalender Service unterstützt den Empfang einer Liste von Kalendern für den authentifizierten Benutzer. Das -ist die gleiche Liste von Kalendern welche im Google Kalender UI angezeigt werden, ausser das jene die als -"**hidden**" markiert sind, auch vorhanden sind. - -Die Kalender Liste ist immer privat und es muß über eine authentifizierte Verbindung darauf zugegriffen werden. -Es ist nicht möglich eine Kalender Liste eines anderen Benutzers zu erhalten und es kann nicht darauf zugegriffen -werden wenn die MagicCookie Authentifizierung verwendet wird. Der Versuch auf eine Kalender Liste zuzugreifen ohne -das die notwendigen Zugriffsrechte vorhanden sind, wird fehlschlagen und in einem 401 (Authentifizierung benötigt) -Statuc Code resultieren. - -.. code-block:: php - :linenos: - - $service = ZendGData\Calendar::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Calendar($client); - - try { - $listFeed= $service->getCalendarListFeed(); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -Der Aufruf von ``getCalendarListFeed()`` erstellt eine neue Instanz von ``ZendGData\Calendar\ListFeed`` die jeden -vorhandenen Kalender als Instanz von ``ZendGData\Calendar\ListEntry`` enthält. Nachdem der Feed empfangen wurde, -können der Iterator und der Accessor die innerhalb des Feeds enthalten sind, verwendet werden um die enthaltenen -Kalender zu inspizieren. - -.. code-block:: php - :linenos: - - echo "

Kalender Feed Liste

"; - echo "
    "; - foreach ($listFeed as $calendar) { - echo "
  • " . $calendar->title . - " (Event Feed: " . $calendar->id . ")
  • "; - } - echo "
"; - -.. _zend.gdata.event_retrieval: - -Events erhalten ---------------- - -Wie die Liste der Kalender können auch die Events empfangen werden durch Verwendung der ``ZendGData\Calendar`` -Service Klasse. Die zurückgegebene Event Liste ist vom Typ ``ZendGData\Calendar\EventFeed`` und enthält jedes -Event als Instanz von ``ZendGData\Calendar\EventEntry``. Wie vorher, erlauben die in der Instanz des Event Feeds -enthaltenen Accessoren und der Iterator das individuelle Events inspiziert werden können. - -.. _zend.gdata.event_retrieval.queries: - -Abfragen -^^^^^^^^ - -Wenn Events mit der Kalender *API* empfangen werden, werden speziell erstellte Abfrage *URL*\ s verwendet um zu -beschreiben welche Events zurückgegeben werden sollten. Die ``ZendGData\Calendar\EventQuery`` Klasse vereinfacht -diese Aufgabe durch automatische Erstellung einer Abfrage *URL* basierend auf den gegebenen Parametern. Eine -komplette Liste dieser Parameter ist in der `Abfrage Sektion des Google Data API Protokoll Referenz`_ enthalten. -Trotzdem gibt es drei Parameter die es Wert sind speziell genannt zu werden: - -- **User** wird verwendet um den Benutzer zu spezifizieren dessen Kalender gesucht wird, und wird als EMail Adresse - spezifiziert. Wenn kein Benutzer angegeben wurde, wird stattdessen "default" verwendet um den aktuellen - authentifizierten Benutzer anzuzeigen (wenn er authentifiziert wurde). - -- **Visibility** spezifiziert ob der öffentliche oder private Kalender eines Benutzers gesucht werden soll. Wenn - eine nicht authentifizierte Session verwendet wird und kein MagicCookie vorhanden ist, ist nur der öffentliche - Feed vorhanden. - -- **Projection** spezifiziert wieviele Daten vom Server zurückgegeben werden sollen, und in welchem Format. In den - meisten Fällen wird man die komplette ("full") Projektion verwenden wollen. Auch die normale ("basic") - Projektion ist vorhanden, welche die meisten Meta-Daten in jedem Inhaltsfeld der Events als menschlich lesbaren - Text plaziert, und die kombinierte ("composite") Projketion welche den kompletten text für jedes Kommentar - entlang jedes Events inkludiert. Die kombinierte ("composite") Ansicht ist oft viel größer als die komplette - ("full") Ansicht. - -.. _zend.gdata.event_retrieval.start_time: - -Events in der Reihenfolge Ihres Startzeitpunktes erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Das folgende Beispiel zeigt die Verwendung der ``ZendGData\Query`` Klasse und spezifiziert den privat sichtbaren -Feed, welcher eine vorhandene authentifizierte Verbindung zu den Kalender Servern benötigt. Wenn ein MagicCookie -für die Authentifizierung verwendet wird, sollte die Sichtbarkeit zuerst auf "**private-magicCookieValue**" -gesetzt werden, sobei magicCookieValue der zufälliger String ist, der erhalten wird, wenn man die private *XML* -Adresse im Google Kalender UI betrachtet. Events werden chronologisch anhand des Startzeitpunktes angefragt und nur -Events die in der Zukunft stattfinden werden zurückgegeben. - -.. code-block:: php - :linenos: - - $query = $service->newEventQuery(); - $query->setUser('default'); - // Setze $query->setVisibility('private-magicCookieValue') wenn - // MagicCookie Authentifizierung verwendet wird - $query->setVisibility('private'); - $query->setProjection('full'); - $query->setOrderby('starttime'); - $query->setFutureevents('true'); - - // Empfängt die Event Liste vom Kalender Server - try { - $eventFeed = $service->getCalendarEventFeed($query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - - // Iteriere durch die Liste der Events und gib Sie als HTML Liste aus - echo "
    "; - foreach ($eventFeed as $event) { - echo "
  • " . $event->title . " (Event ID: " . $event->id . ")
  • "; - } - echo "
"; - -Zusätzliche Eigenschaften wie ID, Autor, Wann, Event Status, Sichtbarkeit, Web Inhalt, und Inhalt, sowie andere -sind innerhalb von ``ZendGData\Calendar\EventEntry`` vorhanden. Siehe die `Zend Framework API Dokumentation`_ und -die `Lalender Protokol Referenz`_ für eine komplette Liste. - -.. _zend.gdata.event_retrieval.date_range: - -Events in einem speziellen Datumsbereich empfangen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Events in einem gewünschten Bereich auszugeben, zum Beispiel vom 1. Dezember 2006 bis zum 15. Dezember -2006, müssen die folgenden zwei Zeilen im vorhergehenden Beispiel hinzugefügt werden. Es ist zu beachten das -"``$query->setFutureevents('true')``" entfernt werden muß, da ``futureevents`` die Werte von ``startMin`` und -``startMax`` überschreibt. - -.. code-block:: php - :linenos: - - $query->setStartMin('2006-12-01'); - $query->setStartMax('2006-12-16'); - -Es ist zu beachten das ``startMin`` inklusive ist, wobei ``startMax`` exklusive ist. Als Ergebnis, werden nur die -Events bis 2006-12-15 23:59:59 zurückgegeben. - -.. _zend.gdata.event_retrieval.fulltext: - -Events durch eine Volltext Abfrage erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Events auszugeben welche ein spezielles Wort, zum Beispiel "Hundefutter" enthalten, muß die ``setQuery()`` -Methode verwendet werden wenn die Abfrage erstellt wird. - -.. code-block:: php - :linenos: - - $query->setQuery("Hundefutter"); - -.. _zend.gdata.event_retrieval.individual: - -Individuelle Events erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Individuelle Events können empfangen werden indem deren Event ID als Teil der Abfrage spezifiziert wird. Statt -``getCalendarEventFeed()`` auszurufen, sollte ``getCalendarEventEntry()`` aufgerufen werden. - -.. code-block:: php - :linenos: - - $query = $service->newEventQuery(); - $query->setUser('default'); - $query->setVisibility('private'); - $query->setProjection('full'); - $query->setEvent($eventId); - - try { - $event = $service->getCalendarEventEntry($query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -In einer ähnlichen Weise kann Sie, wenn die Event *URL* bekannt ist, direkt an ``getCalendarEntry()`` übergeben -werden um ein spezielles Event zu erhalten. In diesem Fall wird kein Abfrage Objekt benötigt da die Event *URL* -alle notwendigen Informationen enthält um das Event zu erhalten. - -.. code-block:: php - :linenos: - - $eventURL = "http://www.google.com/calendar/feeds/default/private" - . "/full/g829on5sq4ag12se91d10uumko"; - - try { - $event = $service->getCalendarEventEntry($eventURL); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -.. _zend.gdata.calendar.creating_events: - -Events erstellen ----------------- - -.. _zend.gdata.calendar.creating_events.single: - -Ein einmal vorkommendes Event erstellen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Events werden einem Kalender hinzugefügt indem eine Instanz von ``ZendGData\EventEntry`` erstellt wird, und diese -mit den richtigen Daten bekanntgegeben wird. Die Kalender Service Instanz (``ZendGData\Calendar``) wird dann -verwendet um das Event transparent in *XML* zu konvertieren und diese an den Kalender Server zu senden. - -Mindestens die folgenden Attribute sollten gesetzt werden: - -- **Title** enthält die Kopfzeile die über jedem Event innerhalb der Google Kalender UI angezeigt wird. - -- **When** zeigt die Dauer des Events und, optional, jede Erinnerung die mit Ihm assoziiert ist. Siehe in die - nächste Sektion für mehr Informationen über dieses Attribut. - -Andere nützliche Attribute die optional gesetzt werden können sind unter anderem: - -- **Author** liefert Informationen über den Benutzer der das Event erstellt hat. - -- **Content** liefert zusätzliche Information über das Event und wird angezeigt wenn die Event Details innerhalb - des Google Kalenders angefragt werden. - -- **EventStatus** zeigt an ob ein Event bestätigt, in Wartestellung oder abgebrochen wurde. - -- **Hidden** entfernt das Event von der Google Kalender UI. - -- **Transparency** zeigt ob das Event Zeit auf der Frei/Belegt Liste des Benutzers benötigt. - -- **WebContent** erlaubt es externe Inhalte zu verlinken und innerhalb eines Events anzubieten. - -- **Where** indiziert den Ort des Events. - -- **Visibility** erlaubt es das Event vor der öffentlichen Event Liste zu verstecken. - -Für eine komplette Liste an Event Attributen, kann in die `Zend Framework API Documentation`_ und die `Kalender -Protokol Referenz`_ gesehen werden. Attribute die mehrfache Werte enthalten können, wo wie "where", sind als -Arrays implementiert und müssen korrekt erstellt werden. Es ist zu beachten das alle diese Attribute Objekte als -Parameter benötigen. Der Versuch diese stattdessen als Strings oder Primitivvariablen bekanntzugeben wird in einem -Fehler wärend der Konvertierung in *XML* führen. - -Sobald das Event bekanntgegeben wurde, kann es zum Kalender Server hochgeladen werden durch seine Übergabe als -Argument zur ``insertEvent()`` Funktion des Kalender Services. - -.. code-block:: php - :linenos: - - // Erstellt einen neuen Eintrag und verwendet die magische Factory - // Methode vom Kalender Service - $event= $service->newEventEntry(); - - // Gibt das Event bekannt mit den gewünschten Informationen - // Beachte das jedes Attribu als Instanz der zugehörenden Klasse erstellt wird - $event->title = $service->newTitle("Mein Event"); - $event->where = array($service->newWhere("Berg Ansicht, Kalifornien")); - $event->content = - $service->newContent(" Das ist mein super Event. RSVP benötigt."); - - // Setze das Datum und verwende das RFC 3339 Format. - $startDate = "2008-01-20"; - $startTime = "14:00"; - $endDate = "2008-01-20"; - $endTime = "16:00"; - $tzOffset = "-08"; - - $when = $service->newWhen(); - $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00"; - $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00"; - $event->when = array($when); - - // Das Event an den Kalender Server hochladen - // Eine Kopie des Events wird zurückgegeben wenn es am Server gespeichert wird - $newEvent = $service->insertEvent($event); - -.. _zend.gdata.calendar.creating_events.schedulers_reminders: - -Event Planungen und Erinnerungen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Startzeit und Dauer eines Events werden durch die Werte seiner ``when`` Eigenschaften, ``startTime``, -``endTime``, und ``valueString`` ermittelt. **StartTime** und **EndTime** kontrollieren die Dauer des Events, -wärend die ``valueString`` Eigenschaft aktuell nicht verwendet wird. - -Jeden Tag wiederkehrende Events können geplant werden indem nur das Datum spezifiziert und die Zeit ausgelassen -wird wenn ``startTime`` und ``endTime`` gesetzt werden. Genauso können Events die keine Dauer haben spezifiziert -werden indem ``endTime`` unterdrückt wird. In allen Fällen sollten Datums und Zeitwerte im `RFC3339`_ Format -angegeben werden. - -.. code-block:: php - :linenos: - - // Plane ein Event das am 05. Dezember 2007 um 14h PST stattfindet - // (UTC-8) mit der Dauer einer Stunde. - $when = $service->newWhen(); - $when->startTime = "2007-12-05T14:00:00-08:00"; - $when->endTime="2007-12-05T15:00:00:00-08:00"; - - // Die "when" Eigenschaft an das Event binden - $event->when = array($when); - -Das ``when`` Attribut kontrolliert auch wann Erinnerungen an einen Benutzer gesendet werden. Erinnerungen werden in -einem Array gespeichert und jedes Event kann abgefragt werden um die Erinnerungen herauszufinden die mit Ihm -verbunden sind. - -Damit ein **reminder** gültig ist, muß er zwei Attribute gesetzt haben: ``method`` und eine Zeit. **Method** -akzeptiert einen der folgenden Strings: "alert", "email" oder "sms". Die Zeit sollte als Integer eingegeben werden -und kann mit den Eigenschaften ``minutes``, ``hours``, ``days`` oder ``absoluteTime`` gesetzt werden. Trotzdem darf -eine gültige Anfrage nur eines dieser Attribute gesetzt haben. Wenn eine gemischte Zeit gewünscht wird, muß der -Wert in die am besten passende und vorhandene Einheit konvertiert werden. Zum Beispiel, 1 Stunde und 30 Minuten -sollten als 90 Minuten angegeben werden. - -.. code-block:: php - :linenos: - - // Erstellt ein Erinnerungs Objekt. Es sollte eine Email an den Benutzer - // senden, 10 Minuten vor dem Event. - $reminder = $service->newReminder(); - $reminder->method = "email"; - $reminder->minutes = "10"; - - // Die Erinnerung einem existierenden Event als "when" Eigenschaft hinzufügen - $when = $event->when[0]; - $when->reminders = array($reminder); - -.. _zend.gdata.calendar.creating_events.recurring: - -Wiederkehrende Events erstellen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wiederkehrende Events werden auf dem gleichen Weg erstellt wie einmal stattfindende Events, ausser das ein -Wiederholungs "recurrence" Attribut statt dem "where" Attribut angegeben werden muß. Das Wiederholungs Attribut -sollte einen String enthalten der das Wiederholungs Pattern des Events beschreibt und das mit Eigenschaften -definiert werden kann die im iCalender Standard (`RFC 2445`_) beschrieben sind. - -Ausnahmen im Wiederholungs Pattern werden normalerweise durch ein ausgeprägtes ``recurrenceException`` Attribut -spezifiziert. Trotzdem bietet der iCalender Standard ein zweites Format für die Definition von Wiederholungen, und -die Möglichkeit das jedes von Ihnen verwendet werden kann und für jedes davon muß das gehandhabt werden. - -Durch die Komplexität des analysierens des Wiederholungs Patterns, sind weitere Informationen hierüber ausserhalb -des Umfangs dieses Dokuments. Trotzdem können weitere Informationen im `Kapitel über normale Elemente des Google -Data API Entwickler Leitfadens`_ gefunden werden, sowie in der *RFC* 2445. - -.. code-block:: php - :linenos: - - // Erstelle einen neuen Eintrag und verwendet die magische - // Factory Methode des Kalender Services - $event= $service->newEventEntry(); - - // Gibt das Event mit den gewünschten Informationen bekannt - // Es ist zu beachten das jedes Attribut als Instanz - // der betreffenden Klasse erstellt wird - $event->title = $service->newTitle("Mein wiederkehrendes Event"); - $event->where = array($service->newWhere("Palo Alto, Kalifornien")); - $event->content = - $service->newContent('Das ist mein anderes super Event, ' . - 'das jeden Dienstag von 01.05.2007 bis ' . - '04.09.2007 stattfinden. Kein RSVP benötigt."); - - // Setzt Dauer und Frequenz durch Spezifizierung des Wiederholungs Patterns - - $recurrence = "DTSTART;VALUE=DATE:20070501\r\n" . - "DTEND;VALUE=DATE:20070502\r\n" . - "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n"; - - $event->recurrence = $service->newRecurrence($recurrence); - - // Das Event zum Kalender Server hochladen - // Eine Kopie des Events wird zurückgegeben, - // wenn es auf dem Server gespeichert wird - $newEvent = $service->insertEvent($event); - -.. _zend.gdata.calendar.creating_events.quickadd: - -QuickAdd verwenden -^^^^^^^^^^^^^^^^^^ - -QuickAdd ist ein Feature das es erlaubt Events zu erstellen indem ein frei definierter Texteintrag verwendet wird. -Zum Beispie lwürde der String "Abendessen bei Joe's Dinner am Dienstag" ein Event erstellen mit dem Titel -"Abendessen", dem Ort "Joe's Dinner", und dem Datum "Dienstag". Um die Vorteile von QuickAdd zu verwenden, muß -eine neue ``QuickAdd`` Eigenschaft erstellt, auf ``TRUE`` gesetzt und der frei definierbare Text als ``content`` -Eigenschaft gespeichert werden. - -.. code-block:: php - :linenos: - - // Erstelle einen neuen Eintrag und verwendet die magische - // Factory Methode des Kalender Services - $event= $service->newEventEntry(); - - // Gibt das Event mit den gewünschten Informationen bekannt - $event->content= $service->newContent("Dinner at Joe's Diner on Thursday"); - $event->quickAdd = $service->newQuickAdd("true"); - - // Das Event zum Kalender Server hochladen - // Eine Kopie des Events wird zurückgegeben, - // wenn es auf dem Server gespeichert wird - $newEvent = $service->insertEvent($event); - -.. _zend.gdata.calendar.modifying_events: - -Events bearbeiten ------------------ - -Sobald eine Instanz eines Events erstellt wurde, können die Attribute des Events lokal auf dem selben Weg wie bei -der Erstellung des Events geänder werden. Sobald alle Änderungen komplett sind, schickt der Aufruf der ``save()`` -Methode des Events die Änderungen an den Kalender Server und gibt eine Kopie des Events zurück wie es auf dem -Server erstellt wurde. - -Im Fall das ein anderer Benutzer das Event modifiziert hat seitdem die lokale Kopie empfangen wurde, wird die -``save()`` Methode fehlschlagen und einen 409 (Konflikt) Status Code zurück geben. Um das zu beheben muß eine -neue Kopie des Events vom Server empfangen werden bevor ein erneuter Versuch stattfindet die Änderungen wieder zu -speichern. - -.. code-block:: php - :linenos: - - // Das erste Event auf der Liste der Events eines Benutzers erhalten - $event = $eventFeed[0]; - - // Den Titel zu einem neuen Wert ändern - $event->title = $service->newTitle("Wuff!"); - - // Die Änderungen an den Server hochladen - try { - $event->save(); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -.. _zend.gdata.calendar.deleting_events: - -Events löschen --------------- - -Kalender Events können entweder durch den Aufruf der ``delete()`` Methode des Kalender Services, und des Angebens -der Bearbeitungs *URL* des Events durchgeführt werden, oder durch Aufruf der eigenen ``delete()`` Methode des -Events. - -In jedem Fall, wird das gelöschte Event trotzdem noch am Privaten Event Feed des Benutzers aufscheinen wenn ein -``updateMin`` Abfrage Parameter angegeben wurde. Gelöschte Events können von normalen Events unterschieden werden -weil Sie Ihre eigene ``eventStatus`` Eigenschaft auf "http://schemas.google.com/g/2005#event.canceled" gesetzt -haben. - -.. code-block:: php - :linenos: - - // Option 1: Events können direkt gelöscht werden - $event->delete(); - -.. code-block:: php - :linenos: - - // Option 2: Events können gelöscht werden indem die Bearbeitungs URL - // des Events zu diesem Kalender Service angegeben wird, wenn diese - // bekannt ist - $service->delete($event->getEditLink()->href); - -.. _zend.gdata.calendar.comments: - -Auf Event Kommentare zugreifen ------------------------------- - -Den die komplette Event Ansicht verwendet wird, werden Kommentare nicht direkt innerhalb eines Events gespeichert. -Stattdessen enthält jedes Event eine *URL* zum dazugehörigen Kommentar Feed welcher manuell angefragt werden -muß. - -Das Arbeiten mit Kommentaren ist fundamental ähnlich zum Arbeiten mit Events, mit dem einzigen signifikanten -Unterschied das eine andere Feed und Event Klasse verwendet werden sollte, und das die zusätzlichen Meta-Daten -für Events wie zum Beispiel "where" und "when" für Kommentare nicht existieren. Speziell wird der Author des -Kommentars in der ``author`` Eigenschaft und der Kommentar Text in der ``content`` Eigenschaft gespeichert. - -.. code-block:: php - :linenos: - - // Die normale URL vom ersten Event der Feed Liste des Benutzers extrahieren - $event = $eventFeed[0]; - $commentUrl = $event->comments->feedLink->url; - - // Die Kommentarliste für das Event erhalten - try { - $commentFeed = $service->getFeed($commentUrl); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - - // Jedes Kommentar als HTML Liste ausgeben - echo "
    "; - foreach ($commentFeed as $comment) { - echo "
  • Kommentar von: " . $comment->author->name "
    " . - $comment->content . "
  • "; - } - echo "
"; - - - -.. _`Authentifizierungs Übersicht im Google Data API Entwickler Guide`: http://code.google.com/apis/gdata/auth.html -.. _`Abfrage Sektion des Google Data API Protokoll Referenz`: http://code.google.com/apis/gdata/reference.html#Queries -.. _`Zend Framework API Dokumentation`: http://framework.zend.com/apidoc/core/ -.. _`Lalender Protokol Referenz`: http://code.google.com/apis/gdata/reference.html -.. _`Zend Framework API Documentation`: http://framework.zend.com/apidoc/core/ -.. _`Kalender Protokol Referenz`: http://code.google.com/apis/gdata/reference.html -.. _`RFC3339`: http://www.ietf.org/rfc/rfc3339.txt -.. _`RFC 2445`: http://www.ietf.org/rfc/rfc2445.txt -.. _`Kapitel über normale Elemente des Google Data API Entwickler Leitfadens`: http://code.google.com/apis/gdata/elements.html#gdRecurrence diff --git a/docs/languages/de/modules/zend.gdata.client-login.rst b/docs/languages/de/modules/zend.gdata.client-login.rst deleted file mode 100644 index c5c6ec315..000000000 --- a/docs/languages/de/modules/zend.gdata.client-login.rst +++ /dev/null @@ -1,82 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.clientlogin: - -Authentifizieren mit ClientLogin -================================ - -Der ClientLogin Mechanismus erlaubt es *PHP* Anwendungen zu schreiben die Authentifizierungs-zugriff zu Google -Services benötigen, durch die Spezifikation von Benutzer Zugangsdaten im *HTTP* Client. - -Siehe http://code.google.com/apis/accounts/AuthForInstalledApps.html für weitere Informationen über die Google -Data ClientLogin Authentifizierung. - -Die Google Dokumentation sagt das der ClientLogin Mechanismus genau richtig für "installierte Anwendungen" ist und -der AuthSub Mechanismus für "Web Anwendungen". Der Unterschied ist, das AuthSub Interaktion vom Benutzer -benötigt, und ein Browser Interface das auf Weiterleitungs Anfragen reagieren kann. Die ClientLogin Lösung -verwendet *PHP* Code um die Benutzer Zugangsdaten zu liefern; der Benutzer wird nicht benötigt um seine -Zugangsdaten interaktiv einzugeben. - -Die Account Zugangsdaten die über den ClientLogin Mechanismum geliefert werden müssen gültige Zugangsdaten für -Google Services sein, aber es müssen nicht die des Benutzers sein, der die *PHP* Anwendung verwendet. - -.. _zend.gdata.clientlogin.login: - -Erstellen eines ClientLogin autentifizierten Http Clienten ----------------------------------------------------------- - -Der Prozess der Erstellung eines autentifizierten *HTTP* Clients durch Verwendung des ClientLogin Mechanismus -besteht darin die statische Funktion ``ZendGData\ClientLogin::getHttpClient()`` aufzurufen und die Google Account -Zugangsdaten als reinen Text zu übergeben. Der Rückgabewert dieser Funktion ist ein Objekt der Klasse -``Zend\Http\Client``. - -Der optionale dritte Parameter ist der Name des Google Data Services. Zum Beispiel kann dieser 'cl' sein für -Google Calendar. Der Standardwert ist "xapi", welcher von den Google Data Servern als generischer Service Name -erkannt wird. - -Der optionale vierte Parameter ist eine Instanz von ``Zend\Http\Client``. Das erlaubt das Setzen von Optionen an -den Client, wie z.B. Proxy Server Einstellungen. Wenn für diesen Parameter ``NULL`` übergeben wird, wird ein -generisches ``Zend\Http\Client`` Objekt erstellt. - -Der optionale fünfte Parameter ist ein kurzer String den Google Data Server verwenden um die Client Anwendung für -logging Zwecke zu identifizieren. Standardmäßig ist dieser String "Zend-ZendFramework"; - -Der optionale sechste Parameter ist eine String ID für eine CAPTCHA(tm) Challenge die vom Server angefordert wird. -Er wird nur benötigt wenn eingeloggt werden soll nachdem eine CAPTCHA(tm) Challenge von einem vorhergehenden Login -Versuch empfangen wurde. - -Der optionale siebente Parameter ist die Antwort des Benutzer's zu einer CAPTCHA(tm) Challenge die von dem Server -angefordert wurde. Er wird nur benötigt wenn eingeloggt werden soll nachdem eine CAPTCHA(tm) Challenge von einem -vorhergehenden Login Versuch empfangen wurde. - -Anbei ist ein Beispiel in *PHP* Code für eine Web Anwendung die Authentifizierung benötigt um das Google Calendar -Service zu verwenden und ein ``ZendGData`` Client Objekt zu erstellen das diesen authentifizierten -``Zend\Http\Client`` verwendet. - -.. code-block:: php - :linenos: - - // Die Google Zugangdaten angeben - $email = 'johndoe@gmail.com'; - $passwd = 'xxxxxxxx'; - try { - $client = ZendGData\ClientLogin::getHttpClient($email, $passwd, 'cl'); - } catch (ZendGData\App\CaptchaRequiredException $cre) { - echo 'URL des CAPTCHA Bildes: ' . $cre->getCaptchaUrl() . "\n"; - echo 'Token ID: ' . $cre->getCaptchaToken() . "\n"; - } catch (ZendGData\App\AuthException $ae) { - echo 'Authentifizierungs Problem: ' . $ae->exception() . "\n"; - } - - $cal = new ZendGData\Calendar($client); - -.. _zend.gdata.clientlogin.terminating: - -Den über ClientLogin authentifizierten Http Client beenden ----------------------------------------------------------- - -Es gibt keine Methode um ClientLogin Authentifizierungen zu verwerfen da es eine AuthSub token-basierte Lösung -gibt. Die Zugangsdaten die in der ClientLogin Authentifizierung verwendet werden sind der Login und das Passwort zu -einem Google Account, und deshalb können diese wiederholend in der Zukunft verwendet werden. - - - diff --git a/docs/languages/de/modules/zend.gdata.docs.rst b/docs/languages/de/modules/zend.gdata.docs.rst deleted file mode 100644 index 3cdd2788e..000000000 --- a/docs/languages/de/modules/zend.gdata.docs.rst +++ /dev/null @@ -1,159 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.docs: - -Verwenden der Google Dokumente Listen Daten API -=============================================== - -Die Google Dokumente Listen Daten *API* erlaubt es Client Anwendungen Dokumente zu Google Dokumente hochzuladen und -diese in der Form von Google Daten *API* ("GData") Feeds aufzulisten. Die Client Anwendung kann eine Liste von -Benutzer Dokumenten anfragen, und den Inhalt in einem existierenden Dokument abfragen. - -Siehe http://code.google.com/apis/documents/overview.html für weitere Informationen über die Google Dokumente -Listen *API*. - -.. _zend.gdata.docs.listdocuments: - -Eine Liste von Dokumenten erhalten ----------------------------------- - -Man kann eine Liste von den Google Dokumenten für einen bestimmten Benutzer erhalten indem die -``getDocumentListFeed()`` Methode des Docs Services verwendet wird. Das Service gibt ein -``ZendGData\Docs\DocumentListFeed`` Objekt zurück das eine Liste von Dokumenten enthält die mit dem -authentifizierten Benutzer assoziiert sind. - -.. code-block:: php - :linenos: - - $service = ZendGData\Docs::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $docs = new ZendGData\Docs($client); - $feed = $docs->getDocumentListFeed(); - -Das sich ergebende ``ZendGData\Docs\DocumentListFeed`` Objekt repräsentiert die Antwort des Servers. Dieser Feed -enthält eine Liste von ``ZendGData\Docs\DocumentListEntry`` Objekten (``$feed->entries``), wobei jeder von Ihnen -ein einzelnes Google Dokument repräsentiert. - -.. _zend.gdata.docs.creating: - -Ein Dokument hochladen ----------------------- - -Man kann ein neues Google Dokument erstellen indem ein Wortverarbeitungs Dokument, eine Tabellenkalkulation oder -eine Präsentation hochgeladen wird. Dieses Beispiel ist vom interaktiven Docs.php Beispiel welches mit der -Bibliothek kommt. Es demonstriert das Hochladen einer Datei und das Ausdrucken der Information über das Ergebnis -vom Server. - -.. code-block:: php - :linenos: - - /** - * Ein spezielles Dokument hochladen - * - * @param ZendGData\Docs $docs Das Service Objekt das für die Kommunikation - * mit dem Google Dokument Service verwendet wird - * @param boolean $html True Wenn die Ausgabe für die Ausgabe in einem Web - * Browser formatiert sein soll - * @param string $originalFileName Der Name der Datei die hochgeladen werden - * soll. Der MIME-Typ dieser Datei wird von der - * Erweiterung des Dateinamens eruiert. Zum - * Beispiel wird test.csv als Komma geteilter - * Inhalt hochgeladen und in eine - * Tabellenkalkulation konvertiert - * @param string $temporaryFileLocation (Optional) Die Datei in der die Daten - * für das Dokument gespeichert werden. - * Das wird verwendet wenn die Datei von - * der Maschine des Clients zum Server - * hochgeladen und in einer temporären - * Datei gespeichert wurde die keine - * Erweiterung hat. Wenn dieser Parameter - * null ist, wird die Datei von - * originalFileName gelesen. - */ - function uploadDocument($docs, $html, $originalFileName, - $temporaryFileLocation) { - $fileToUpload = $originalFileName; - if ($temporaryFileLocation) { - $fileToUpload = $temporaryFileLocation; - } - - // Datei hochladen un in ein Google Dokument konvertieren Der originale - // Dateiname wird als Titel des Dokuments verwendet und der MIME Typ wird - // basieren auf der erweiterung des originalen Dateinamens eruiert. - $newDocumentEntry = $docs->uploadFile($fileToUpload, $originalFileName, - null, ZendGData\Docs::DOCUMENTS_LIST_FEED_URI); - - echo "Neuer Titel des Dokuments: "; - - if ($html) { - // Die URL der HTML Ansicht dieses Dokuments finden. - $alternateLink = ''; - foreach ($newDocumentEntry->link as $link) { - if ($link->getRel() === 'alternate') { - $alternateLink = $link->getHref(); - } - } - // Den Titellink zum dokument auf docs.google.com erstellen. - echo "\n"; - } - echo $newDocumentEntry->title."\n"; - if ($html) {echo "\n";} - } - -.. _zend.gdata.docs.queries: - -Den Dokumenten Feed durchsuchen -------------------------------- - -Die Dokumenten Liste kann durchsucht werden indem einer der `standardmäßigen Google Daten API Abfrageparameter`_ -verwendet wird. Kategorien werden verwendet um den Typ des Dokuments das zurückgegeben wird (Wortverarbeitungs -Dokument, Tabellenkalkulation) einzuschränken. Detailiertere Informationen über Parameter die speziell in der -Dokumenten Liste vorhanden sind können in der `Dokumenten Listen Daten API Referenz Anleitung`_ gefunden werden. - -.. _zend.gdata.docs.listwpdocuments: - -Eine Liste von Wortverarbeitungs Dokumenten erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Ein Feed der alle Dokumente eines speziellen Typs enthält kann auch angefragt werden. Um zum Beispiel eine Liste -von eigenen Wortverarbeitungs Dokumenten zu sehen, würde man eine Kategorieanfrage wie folgt durchführen. - -.. code-block:: php - :linenos: - - $feed = $docs->getDocumentListFeed( - 'http://docs.google.com/feeds/documents/private/full/-/document'); - -.. _zend.gdata.docs.listspreadsheets: - -Eine Liste von Tabellenkalkulationen erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um eine Liste aller eigenen Google Tabellenkalkulationen zu erhalten kann die folgende Abfrage verwendet werden: - -.. code-block:: php - :linenos: - - $feed = $docs->getDocumentListFeed( - 'http://docs.google.com/feeds/documents/private/full/-/spreadsheet'); - -.. _zend.gdata.docs.textquery: - -Eine Textabfrage durchführen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Der Inhalt von Dokumenten kann durch Verwendung von ``ZendGData\Docs\Query`` in der Abfrage durchsucht werden. Ein -Abfrage Objekt kann verwendet werden um eine Abfrage *URI* zu erstellen, wobei der Suchbegriff als Parameter -übergeben wird. Hier ist eine Beispielmethode welche die Dokumenten Liste nach Dokumenten abfrage die den -Suchstring enthalten: - -.. code-block:: php - :linenos: - - $docsQuery = new ZendGData\Docs\Query(); - $docsQuery->setQuery($query); - $feed = $client->getDocumentListFeed($docsQuery); - - - -.. _`standardmäßigen Google Daten API Abfrageparameter`: http://code.google.com/apis/gdata/reference.html#Queries -.. _`Dokumenten Listen Daten API Referenz Anleitung`: http://code.google.com/apis/documents/reference.html#Parameters diff --git a/docs/languages/de/modules/zend.gdata.exception.rst b/docs/languages/de/modules/zend.gdata.exception.rst deleted file mode 100644 index e7e722d61..000000000 --- a/docs/languages/de/modules/zend.gdata.exception.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.exception: - -Gdata Ausnahmen auffangen -========================= - -Die ``ZendGData\App\Exception`` Klasse ist eine Basis Klasse für Ausnahmen die durch ``ZendGData`` geworfen -werden. Man kann jede durch ``ZendGData`` geworfene Ausnahme auffangen indem ``ZendGData\App\Exception`` -aufgefangen wird. - -.. code-block:: php - :linenos: - - try { - $client = - ZendGData\ClientLogin::getHttpClient($username, $password); - } catch(ZendGData\App\Exception $ex) { - // Die Ausnahme an den Benutzer bekanntgeben - die($ex->getMessage()); - } - -Die folgenden Ausnahme Subklassen werden von ``ZendGData`` verwendet: - - - - - ``ZendGData\App\AuthException`` indiziert das die Benutzer Account Daten nicht gültig sind. - - - ``ZendGData\App\BadMethodCallException`` indiziert das eine Methode für ein Service aufgerufen wurde der - diese Methode nicht unterstützt. Zum Beispiel unterstützt der CodeSearch Service ``post()`` nicht. - - - ``ZendGData\App\HttpException`` indiziert das eine *HTTP* Anfrage nicht erfolgreich war. Bietet die - Möglichkeit das komplette ``Zend\Http\Request`` Objekt zu erhalten um den exakten Grund des Fehlers - festzustellen in den Fällen in denen ``$e->getMessage()`` nicht genug Details liefert. - - - ``ZendGData\App\InvalidArgumentException`` wird geworfen wenn eine Anwendung einen Wert bietet der in dem - gegebenen Kontext nicht gültig ist. Zum Beispiel wenn ein Kalender Sichtbarkeits Wert von "banana" - spezifiziert wird, oder ein Blogger Feed geholt werden soll ohne einen Blog Namen zu spezifizieren. - - - ``ZendGData\App\CaptchaRequiredException`` wird geworfen wenn ein ClientLogin Versuch stattfindet und eine - CAPTCHA(tm) Challenge vom Authentifikations Service empfangen wird. Diese Ausnahme enthält eine Token ID und - eine *URL* zu einem CAPTCHA(tm) Challenge Bild. Dieses Bild ist ein visuelles Puzzle das dem Benutzer - angezeigt werden sollte. Nachdem die Antwort des Benutzers auf dieses Challenge Bild gesammelt wurde, kann die - Antwort im nächsten ClientLogin Versuch inkludiert werden. Alternativ kann der Benutzer direkt zu dieser - Webseite geleitet werden: https://www.google.com/accounts/DisplayUnlockCaptcha Weitere Informationen - können in der :ref:`ClientLogin Dokumentation ` gefunden werden. - - - -Man kann diese Ausnahme Subklassen verwenden um spezielle Ausnahmen unterschiedlich zu handhaben. Siehe die *API* -Dokumentation für Informationen darüber welche Ausnahme Subklassen durch welche Methoden in ``ZendGData`` -geworfen werden. - -.. code-block:: php - :linenos: - - try { - $client = ZendGData\ClientLogin::getHttpClient($username, - $password, - $service); - } catch(ZendGData\App\AuthException $authEx) { - // Die Benutzer Account Daten sind nicht korrekt. - // Es wäre nett dem Benutzer einen zweiten Versuch zu geben. - ... - } catch(ZendGData\App\HttpException $httpEx) { - // Google Data Server konnten nicht erreicht werden. - die($httpEx->getMessage); - } - - - diff --git a/docs/languages/de/modules/zend.gdata.gapps.rst b/docs/languages/de/modules/zend.gdata.gapps.rst deleted file mode 100644 index b61da7955..000000000 --- a/docs/languages/de/modules/zend.gdata.gapps.rst +++ /dev/null @@ -1,1066 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.gapps: - -Google Apps Provisionierung verwenden -===================================== - -Google Apps ist ein Service der es Domain Administratoren erlaubt Ihren Benutzern einen gemanagten Zugriff auf -Google Services wie Mail, Kalender und Dokumente & Tabellenkalkulationen zu bieten. Die Provisionierungs *API* -bietet ein programmmäßiges Interface um dieses Service zu konfigurieren. Im speziellen erlaubt es diese *API* den -Administratoren Benutzerzugänge, Nicknamen, Gruppen und Email Listen zu erstellen, zu empfangen, zu verändern und -zu löschen. - -Diese Bibliothek implementiert die Version 2.0 der Provisionierungs *API*. Zugriff zum eigenen Konto über die -Provisionierungs *API* muß manuell für jede Domain aktiviert werden die das Google Apps Kontrollpanel verwendet. -Nur bestimmte Kontotpen sind fähig dieses Feature einzuschalten. - -Für weitere Information zur Google Apps Provisionierungs *API*, inklusive Anleitungen für das Einschalten des -*API* Zugriffs, kann in die `Provisionierungs API V2.0 Referenz`_ gesehen werden. - -.. note:: - - **Authentifizierung** - - Die Provisionierungs *API* unterstützt keine Authentifizierung über AuthSub und anonymer Zugriff ist nicht - gestattet. Alle *HTTP* Verbindungen müssen mit Hilfe der ClientAuth Authentifizierung authentifiziert werden. - -.. _zend.gdata.gapps.domain: - -Die aktuelle Domain setzen --------------------------- - -Um die Provisionierungs *API* zu verwenden muß die Domain, die administriert werden soll, in allen Anfrage *URI*\ -s spezifiziert werden. Um die Entwicklung zu vereinfachen, wird diese Information sowohl im Gapps Service und den -Abfrageklassen gespeichert um Sie zu verwenden wenn Abfragen erstellt werden. - -.. _zend.gdata.gapps.domain.service: - -Setzen der Domain für die Serviceklasse -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um die Domain für die von der Serviceklasse durchgeführten Anfragen zu setzen kann entweder ``setDomain()`` -aufgerufen oder die Domain bei der Instanzierung der Serviceklasse spezifiziert werden. Zum Beispiel: - -.. code-block:: php - :linenos: - - $domain = "example.com"; - $gdata = new ZendGData\Gapps($client, $domain); - -.. _zend.gdata.gapps.domain.query: - -Die Domain für die Abfrageklasse setzen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Das Setzen der Domain für Anfrage die durch die Abfrageklasse durchgeführt werden ist ähnlich dem setzen für -die Serviceklasse-entweder wird ``setDomain()`` aufgerufen, oder die Domain wird bei der Erstellung der Abfrage -angegeben. Zum Beispiel: - -.. code-block:: php - :linenos: - - $domain = "example.com"; - $query = new ZendGData\Gapps\UserQuery($domain, $arg); - -Wenn eine Serviceklassen Factorymethode verwendet wird um eine Abfrage zu erstellen, setzt die Serviceklasse die -Domain der Abfrage automatisch so das Sie ihrer eigenen Domain entspricht. Als Ergebnis ist es nicht notwendig die -Domain als Teil der Konstruktorargumente zu spezifizieren. - -.. code-block:: php - :linenos: - - $domain = "example.com"; - $gdata = new ZendGData\Gapps($client, $domain); - $query = $gdata->newUserQuery($arg); - -.. _zend.gdata.gapps.users: - -Interaktion mit Benutzern -------------------------- - -Jeder Benutzerzugang zu einer Google Apps gehosteten Domain wird als Instanz von ``ZendGData\Gapps\UserEntry`` -repräsentiert. Diese Klasse bietet Zugriff zu allen Zugangseigenschaften inklusive Name, Benutzername, Passwort, -Zugriffsrechte und aktuellen Quoten. - -.. _zend.gdata.gapps.users.creating: - -Erstellen eines Benutzerzugangs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Benutzerzugänge können durch den Aufruf der einfachen ``createUser()`` Methode erstellt werden: - -.. code-block:: php - :linenos: - - $gdata->createUser('foo', 'Random', 'User', '••••••••'); - -Benutzer können durch das Instanzieren eines UserEntry erstellt werden, indem ein Benutzername, ein Name, ein -Familienname und ein Passwort angegeben werden und anschließend ``insertUser()`` am Serviceobjekt aufgerufen wird -um den Eintrag zum Server zu laden. - -.. code-block:: php - :linenos: - - $user = $gdata->newUserEntry(); - $user->login = $gdata->newLogin(); - $user->login->username = 'foo'; - $user->login->password = '••••••••'; - $user->name = $gdata->newName(); - $user->name->givenName = 'Irgendwer'; - $user->name->familyName = 'Benutzer'; - $user = $gdata->insertUser($user); - -Das Passwort den Benutzers sollte normalerweise als Klartext angegeben werden. Operional kann das Passwort als -*SHA-1* Schlüssel angegeben werden wenn ``login->passwordHashFunction`` auf '``SHA-1``' gesetzt ist. - -.. _zend.gdata.gapps.users.retrieving: - -Einen Benutzerzugang erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Individuelle Benutzerzugänge kann man erhalten indem die einfache ``retrieveUser()`` Methode aufgerufen wird. Wenn -der Benutzer nicht gefunden wird, wird ``NULL`` zurückgegeben. - -.. code-block:: php - :linenos: - - $user = $gdata->retrieveUser('foo'); - - echo 'Benutzername: ' . $user->login->userName . "\n"; - echo 'Name: ' . $user->name->givenName . "\n"; - echo 'Familienname: ' . $user->name->familyName . "\n"; - echo 'Unterbrochen: ' . ($user->login->suspended ? 'Ja' : 'Nein') . "\n"; - echo 'Administrator: ' . ($user->login->admin ? 'Ja' : 'Nein') . "\n" - echo 'Muss das Passwort ändern: ' . - ($user->login->changePasswordAtNextLogin ? 'Ja' : 'Nein') . "\n"; - echo 'Hat den Regeln zugestimmt: ' . - ($user->login->agreedToTerms ? 'Ja' : 'Nein') . "\n"; - -Benutzer kann man auch erhalten indem eine Instanz von ``ZendGData\Gapps\UserQuery`` erstellt wird, und dessen -username Eigenschaft dem Benutzernamen des Benutzers entspricht den man erhalten will und ``getUserEntry()`` auf -einem Serviceobjekt mit dieser Abfrage aufruft. - -.. code-block:: php - :linenos: - - $query = $gdata->newUserQuery('foo'); - $user = $gdata->getUserEntry($query); - - echo 'Benutzername: ' . $user->login->userName . "\n"; - echo 'Name: ' . $user->login->givenName . "\n"; - echo 'Familien Name: ' . $user->login->familyName . "\n"; - echo 'Unterbrochen: ' . ($user->login->suspended ? 'Ja' : 'Nein') . "\n"; - echo 'Administrator: ' . ($user->login->admin ? 'Ja' : 'Nein') . "\n" - echo 'Muss das Passwort ändern: ' . - ($user->login->changePasswordAtNextLogin ? 'Ja' : 'Nein') . "\n"; - echo 'Hat den Regeln zugestimmt: ' . - ($user->login->agreedToTerms ? 'Ja' : 'Nein') . "\n"; - -Wenn der spezifizierte Benutzer nicht gefunden werden kann wird eine ServiceException mit einem Fehlercode von -``ZendGData\Gapps\Error::ENTITY_DOES_NOT_EXIST`` geworfen. ServiceExceptions werden in :ref:`dem Kapitel über -Exceptions ` behandelt. - -.. _zend.gdata.gapps.users.retrievingAll: - -Alle Benutzer in einer Domain erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Benutzer in einer Domäne zu erhalten kann die einfache ``retrieveAllUsers()`` Methode aufgerufen werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveAllUsers(); - - foreach ($feed as $user) { - echo " * " . $user->login->username . ' (' . $user->name->givenName . - ' ' . $user->name->familyName . ")\n"; - } - -Das wird ein ``ZendGData\Gapps\UserFeed`` Objekt erstellen welches jeden Benutzer dieser Domain enthält. - -Alternativ kann ``getUserFeed()`` ohne Optionen aufgerufen werden. Es ist zu beachten das dieser Feed bei -größeren Domains durch den Server in Seiten ausgegeben werden kann. Über weitere Informationen der Ausgabe in -Seiten siehe :ref:`das Kapitel über Seiten `. - -.. code-block:: php - :linenos: - - $feed = $gdata->getUserFeed(); - - foreach ($feed as $user) { - echo " * " . $user->login->username . ' (' . $user->name->givenName . - ' ' . $user->name->familyName . ")\n"; - } - -.. _zend.gdata.gapps.users.updating: - -Einen Benutzerzugang aktualisieren -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Der einfachste Weg um einen Benutzerzugang zu aktualisieren ist es den Benutzer wie in der vorherigen Sektion -beschrieben zu empfangen, jegliche gewünschte Änderungen durchzuführen und anschließend ``save()`` auf diesem -Benutzer aufzurufen. Jede gemachte Änderung wird an den Server weitergegeben. - -.. code-block:: php - :linenos: - - $user = $gdata->retrieveUser('foo'); - $user->name->givenName = 'Foo'; - $user->name->familyName = 'Bar'; - $user = $user->save(); - -.. _zend.gdata.gapps.users.updating.resettingPassword: - -Ein Benutzerpasswort zurücksetzen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Ein Benutzerpasswort kann auf einen neuen Wert zurückgesetzt werden indem die ``login->password`` Eigenschaft -aktualisiert wird. - -.. code-block:: php - :linenos: - - $user = $gdata->retrieveUser('foo'); - $user->login->password = '••••••••'; - $user = $user->save(); - -Es ist zu beachten das es nicht möglich ist ein Passwort auf diesem Weg wiederherzustellen da gespeicherte -Passwörter aus Sicherheitsgründern nicht über die Provisionierungs *API* verfügbar gemacht werden. - -.. _zend.gdata.gapps.users.updating.forcingPasswordChange: - -Einen Benutzer zwingen sein Passwort zu ändern -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Ein Benutzer kann dazu gezwungen werden sein Passwort bei seinem nächsten Login zu ändern, indem die -``login->changePasswordAtNextLogin`` Eigenschaft auf ``TRUE`` gesetzt wird. - -.. code-block:: php - :linenos: - - $user = $gdata->retrieveUser('foo'); - $user->login->changePasswordAtNextLogin = true; - $user = $user->save(); - -Genauso kann das rückgängig gemacht werden indem die ``login->changePasswordAtNextLogin`` Eigenschaft auf -``FALSE`` gesetzt wird. - -.. _zend.gdata.gapps.users.updating.suspendingAccount: - -Einen Benutzerzugang unterbrechen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Benutzer können daran gehindert werden sich anzumelden ohne das Ihr Benutzerzugang gelöscht wird indem Ihr -Benutzerzugang **unterbrochen** wird. Zugänge können unterbrochen oder wiederhergestellt werden indem die -einfachen ``suspendUser()`` und ``restoreUser()`` Methoden verwendet werden: - -.. code-block:: php - :linenos: - - $gdata->suspendUser('foo'); - $gdata->restoreUser('foo'); - -Alternativ kann die Eigenschaft ``login->suspended`` des Benutzerzugangs auf ``TRUE`` gesetzt werden. - -.. code-block:: php - :linenos: - - $user = $gdata->retrieveUser('foo'); - $user->login->suspended = true; - $user = $user->save(); - -Um den Benutzerzugang wiederherzustellen muß die ``login->suspended`` Eigenschaft auf ``FALSE`` gesetzt werden. - -.. _zend.gdata.gapps.users.updating.grantingAdminRights: - -Administrative Rechte vergeben -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Benutzern kann die Möglichkeit gegeben werden die Domain zu verwalten durch das setzen Ihrer ``login->admin`` -Eigenschaft auf ``TRUE``. - -.. code-block:: php - :linenos: - - $user = $gdata->retrieveUser('foo'); - $user->login->admin = true; - $user = $user->save(); - -Und wie erwartet, entfernt das Setzen der Eigenschaft ``login->admin``, des Benutzers auf ``FALSE``, dessen -administrative Rechte. - -.. _zend.gdata.gapps.users.deleting: - -Löschen eines Benutzerzugangs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Einen Benutzerzugang zu löschen zu dem man bereits ein UserEntry hat, ist so einfach wie der Aufruf von -``delete()`` auf diesem Eintrag. - -.. code-block:: php - :linenos: - - $user = $gdata->retrieveUser('foo'); - $user->delete(); - -Wenn man keinen Zugriff auf ein UserEntry Objekt für einen Zugang hat, kann die einfache ``deleteUser()`` Methode -verwendet werden. - -.. code-block:: php - :linenos: - - $gdata->deleteUser('foo'); - -.. _zend.gdata.gapps.nicknames: - -Mit Spitznamen interagieren ---------------------------- - -Spitznamen arbeiten als Email Aliase für bestehende Benutzer. Jeder Spitzname enthält genau zwei -Schlüsseleigenschaften: Seinen Namen und seinen Eigentümer. Jede Email die zu einem Spitznamen adressiert wurde -wird zu dem Benutzer weitergeleitet der diesen Spitznamen besitzt. - -Spitznamen werden repräsentiert als Instanz von ``ZendGData\Gapps\NicknameEntry``. - -.. _zend.gdata.gapps.nicknames.creating: - -Erstellen eines Spitznamens -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Spitznamen können durch den Aufruf der einfachen ``createNickname()`` Methode erstellt werden: - -.. code-block:: php - :linenos: - - $gdata->createNickname('foo', 'bar'); - -Spitznamen können auch durch das instanzieren eines NichnameEntry erstellt werden, wobei der Spitzname mit einem -Namen und einem Eigentümer ausgestattet wird, und dann ``insertNickname()`` auf einem Service Objekt aufgerufen -wird, um den Eintrag zu einem Server hochzuladen. - -.. code-block:: php - :linenos: - - $nickname = $gdata->newNicknameEntry(); - $nickname->login = $gdata->newLogin('foo'); - $nickname->nickname = $gdata->newNickname('bar'); - $nickname = $gdata->insertNickname($nickname); - -.. _zend.gdata.gapps.nicknames.retrieving: - -Einen Spitznamen empfangen -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Spitznamen können durch den Aufruf der bequemen ``retrieveNickname()`` Methode empfangen werden. Sie gibt ``NULL`` -zurück wenn der Benutzer nicht gefunden wurde. - -.. code-block:: php - :linenos: - - $nickname = $gdata->retrieveNickname('bar'); - - echo 'Spitzname: ' . $nickname->nickname->name . "\n"; - echo 'Eigentümer: ' . $nickname->login->username . "\n"; - -Individuelle Spitznamen können durch Erstellung einer ``ZendGData\Gapps\NicknameQuery`` Instanz erhalten werden, -indem dessen nickname Eigenschaft dem Spitznamen gleichgesetzt wird der empfangen werden soll, und -``getNicknameEntry()`` auf einem Server Objekt mit dieser Abfrage aufgerufen wird. - -.. code-block:: php - :linenos: - - $query = $gdata->newNicknameQuery('bar'); - $nickname = $gdata->getNicknameEntry($query); - - echo 'Spitzname: ' . $nickname->nickname->name . "\n"; - echo 'Eigentümer: ' . $nickname->login->username . "\n"; - -Genau wie bei den Benutzern wird eine ServiceException geworfen wenn kein entsprechender Spitzname gefunden wurde -und ein Fehlercode von ``ZendGData\Gapps\Error::ENTITY_DOES_NOT_EXIST`` zurückgegeben. Auch das wird in :ref:`dem -Kapitel über Exceptions ` beschrieben. - -.. _zend.gdata.gapps.nicknames.retrievingUser: - -Alle Spitznamen eines Benutzers erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Spitznamen zu erhalten die einem angegebenen Benutzer assoziiert sind, kann die bequeme -``retrieveNicknames()`` Methode aufgerufen werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveNicknames('foo'); - - foreach ($feed as $nickname) { - echo ' * ' . $nickname->nickname->name . "\n"; - } - -Das erzeugt ein ``ZendGData\Gapps\NicknameFeed`` Objekt welches jeden mit dem spezifizierten Benutzer assoziierten -Spitznamen enthält. - -Alternativ setzt das Erstellen einer neuen ``ZendGData\Gapps\NicknameQuery`` dessen username Eigenschaft auf den -gewünschten Benutzer, und überträgt die Abfrage durch den Aufruf von ``getNicknameFeed()`` auf dem Service -Objekt. - -.. code-block:: php - :linenos: - - $query = $gdata->newNicknameQuery(); - $query->setUsername('foo'); - $feed = $gdata->getNicknameFeed($query); - - foreach ($feed as $nickname) { - echo ' * ' . $nickname->nickname->name . "\n"; - } - -.. _zend.gdata.gapps.nicknames.retrievingAll: - -Empfangen aller Spitznamen in einer Domain -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Spitznamen in einerm Feed zu empfangen, muß einfach die bequeme Methode ``retrieveAllNicknames()`` -aufgerufen werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveAllNicknames(); - - foreach ($feed as $nickname) { - echo ' * ' . $nickname->nickname->name . ' => ' . - $nickname->login->username . "\n"; - } - -Das wird ein ``ZendGData\Gapps\NicknameFeed`` Objekt erstellen welches jeden Spitznamen in der Domain enthält. - -Alternativ kann ``getNicknameFeed()`` auf einem Service Objekt ohne Argumente aufgerufen werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->getNicknameFeed(); - - foreach ($feed as $nickname) { - echo ' * ' . $nickname->nickname->name . ' => ' . - $nickname->login->username . "\n"; - } - -.. _zend.gdata.gapps.nicknames.deleting: - -Löschen eines Spitznamens -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um einen Spitznamen zu löschen zu dem man bereits einen NicknameEntry hält muß einfach nur ``delete()`` auf -diesem Eintrag aufgerufen werden. - -.. code-block:: php - :linenos: - - $nickname = $gdata->retrieveNickname('bar'); - $nickname->delete(); - -Für Spitznamen zu denen man keinen NicknameEntry hält, kann die bequeme ``deleteNickname()`` Methode verwendet -werden. - -.. code-block:: php - :linenos: - - $gdata->deleteNickname('bar'); - -.. _zend.gdata.gapps.groups: - -Mit Gruppen interagieren ------------------------- - -Google Gruppen erlauben es Personen Nachrichten zu senden so wie eine Email Liste. Google missbilligt die *API* der -Email Listen. Google Gruppen bieten einige nette Features wie verschachtelte Gruppen und Gruppen Besitzer. Wenn man -mit einer neuen Email Liste beginnen will, ist es empfehlenswert statt dessen Google Gruppen zu verwenden. Google's -Email Liste ist nicht mit Google Gruppen kompatibel. Wenn man also eine Email Liste erstellt, scheint Sie nicht als -Gruppe auf. Das Gegenteil ist natürlich genauso wahr. - -Jede Gruppe an einer Domain wird als Instanz von ``ZendGData\Gapps\GroupEntry`` repräsentiert. - -.. _zend.gdata.gapps.groups.creating: - -Erstellen einer Gruppe -^^^^^^^^^^^^^^^^^^^^^^ - -Gruppen können erstellt werden indem die bequeme Methode ``createGroup()`` aufgerufen wird: - -.. code-block:: php - :linenos: - - $gdata->createGroup('friends', 'Freundeskreis'); - -Gruppen können erstellt werden indem GroupEntry instanziert wird, eine Gruppen ID und ein Name für die Gruppe -angegeben wird, und dann ``insertGroup()`` auf dem Service Objekt aufgerufen wird um den Eintrag zum Server -hochzuladen. - -.. code-block:: php - :linenos: - - $group = $gdata->newGroupEntry(); - - $properties[0] = $this->newProperty(); - $properties[0]->name = 'groupId'; - $properties[0]->value = 'friends'; - $properties[1] = $this->newProperty(); - $properties[1]->name = 'groupName'; - $properties[1]->value = 'Freundeskreis'; - - $group->property = $properties; - - $group = $gdata->insertGroup($group); - -.. _zend.gdata.gapps.groups.retrieveGroup: - -Eine individuelle Gruppe empfangen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um eine individuelle Gruppe zu erhalten, muss die bequeme Methode ``retrieveGroup()`` aufgerufen werden: - -.. code-block:: php - :linenos: - - $entry = $gdata->retrieveGroup('friends'); - - foreach ($entry->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - -Das erstellt ein ``ZendGData\Gapps\GroupEntry`` Objekt welches die Eigenschaften der Gruppe enthält. - -Alternativ kann ein neuer ``ZendGData\Gapps\GroupQuery`` erstellt, seine groupId Eigenschaft auf die gewünschte -Gruppen Id gesetzt werden, und die Abfrage übermittelt werden indem ``getGroupEntry()`` auf dem Service Objekt -aufgerufen wird. - -.. code-block:: php - :linenos: - - $query = $gdata->newGroupQuery(); - $query->setGroupId('friends'); - $entry = $gdata->getGroupEntry($query); - - foreach ($entry->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - -.. _zend.gdata.gapps.groups.retrievingAll: - -Alle Gruppen einer Domäne empfangen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Gruppen in einer Domäne zu erhalten muss die bequeme Methode ``retrieveAllGroups()`` aufgerufen werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveAllGroups(); - - foreach ($feed->entry as $entry) { - foreach ($entry->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - echo "\n\n"; - } - -Dies erstellt ein ``ZendGData\Gapps\GroupFeed`` Objekt welches jede Gruppe der Domain enthält. - -Alternativ kann ``getGroupFeed()`` auf einem Service Objekt ohne Argumente aufgerufen werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->getGroupFeed(); - - foreach ($feed->entry as $entry) { - foreach ($entry->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - echo "\n\n"; - } - -.. _zend.gdata.gapps.groups.deleting: - -Eine Gruppe löschen -^^^^^^^^^^^^^^^^^^^ - -Um eine Gruppe zu löschen kann die bequeme Methode ``deleteGroup()`` aufgerufen werden: - -.. code-block:: php - :linenos: - - $gdata->deleteGroup('friends'); - -.. _zend.gdata.gapps.groups.updating: - -Eine Gruppe aktualisieren -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Gruppen können aktualisiert werden indem die bequeme Methode ``updateGroup()`` aufgerufen wird: - -.. code-block:: php - :linenos: - - $gdata->updateGroup('group-id-here', 'Name der Gruppe hier'); - -Der erste Parameter wird benötigt. Der zweite, dritte und vierte Parameter welche den Namen der Gruppe, die -Beschreibung der Gruppe und die Email Erlaubnis repräsentieren, sind alle Optional. Wenn eine dieser optionalen -Parameter auf null gesetzt wird, dann wird dieses Element nicht aktualisiert. - -.. _zend.gdata.gapps.groups.retrieve: - -Empfangen aller Gruppen bei denen eine Person Mitglied ist -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Gruppen zu erhalten bei denen eine Spezielle Person Mitglied ist, kann die bequeme Methode -``retrieveGroups()`` aufgerufen werden: - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveGroups('baz@somewhere.com'); - - foreach ($feed->entry as $entry) { - foreach ($entry->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - echo "\n\n"; - } - -Dies erstellt ein ``ZendGData\Gapps\GroupFeed`` Objekt welches jede Gruppe enthält die mit dem spezifizierten -Mitglied assoziiert ist. - -Alternativ kann eine neue ``ZendGData\Gapps\GroupQuery`` erstellt werden, die Eigenschaft member auf die -gewünschte Email Adresse gesetzt, und die Abfrage durch Aufruf von ``getGroupFeed()`` auf dem Service Objekt -übermittelt werden. - -.. code-block:: php - :linenos: - - $query = $gdata->newGroupQuery(); - $query->setMember('baz@somewhere.com'); - $feed = $gdata->getGroupFeed($query); - - foreach ($feed->entry as $entry) { - foreach ($entry->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - echo "\n\n"; - } - -.. _zend.gdata.gapps.groupMembers: - -Mit Gruppenmitgliedern interagieren ------------------------------------ - -Jedes Mitglied welches bei einer Gruppe eingeschrieben ist wird durch eine Instanz von -``ZendGData\Gapps\MemberEntry`` repräsentiert. Durch diese Klasse können individuelle Empfänger bei Gruppen -hinzugefügt und gelöscht werden. - -.. _zend.gdata.gapps.groupMembers.adding: - -Ein Mitglied zu einer Gruppe hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um ein Mitglied zu einer Gruppe hinzuzufügen muss einfach die bequeme Methode ``addMemberToGroup()`` aufgerufen -werden: - -.. code-block:: php - :linenos: - - $gdata->addMemberToGroup('bar@somewhere.com', 'friends'); - -.. _zend.gdata.gapps.groupMembers.check: - -Prüfen um zu sehen ob ein Mitglied einer Gruppe angehört -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um zu prüfen ob ein Mitglied einer Gruppe angehört, muss einfach die bequeme Methode ``isMember()`` aufgerufen -werden: - -.. code-block:: php - :linenos: - - $isMember = $gdata->isMember('bar@somewhere.com', 'friends'); - var_dump($isMember); - -Die Methode gibt einen Boolschen Wert zurück. Wenn das Mitglied der spezifizierten Gruppe angehört, gibt die -Methode ein true zurück, andernfalls gibt Sie ein false zurück. - -.. _zend.gdata.gapps.groupMembers.removing: - -Ein Mitglied von einer Gruppe entfernen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um ein Mitglied von einer Gruppe zu entfernen muss die bequeme Methode ``removeMemberFromGroup()`` aufgerufen -werden: - -.. code-block:: php - :linenos: - - $gdata->removeMemberFromGroup('baz', 'friends'); - -.. _zend.gdata.gapps.groupMembers.retrieving: - -Die Liste der Mitglieder einer Gruppe erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die bequeme Methode ``retrieveAllMembers()`` kann verwendet werden um die Liste der Mitglieder einer Gruppe zu -erhalten: - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveAllMembers('friends'); - - foreach ($feed as $member) { - foreach ($member->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - } - -Alternativ kann ein neuer MemberQuery erstellt, dessen Eigenschaft groupId auf die passende und gewünschte Gruppen -Id gesetzt und ``getMemberFeed()`` auf einem Service Objekt aufgerufen werden. - -.. code-block:: php - :linenos: - - $query = $gdata->newMemberQuery(); - $query->setGroupId('friends'); - $feed = $gdata->getMemberFeed($query); - - foreach ($feed as $member) { - foreach ($member->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - } - -Das erstellt ein ``ZendGData\Gapps\MemberFeed`` Objekt welches jedes Mitglied der ausgewählten Gruppe enthält. - -.. _zend.gdata.gapps.groupOwners: - -Mit Gruppen Eigentümern interagieren ------------------------------------- - -Jeder Eigentümer der mit einer Gruppe assoziiert ist wird durch eine Instanz von ``ZendGData\Gapps\OwnerEntry`` -repräsentiert. Durch diese Klasse können individuelle Eigentümer hinzugefügt und von Gruppen entfernt werden. - -.. _zend.gdata.gapps.groupOwners.adding: - -Einen Eigentümer einer Gruppe hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um einer Gruppe einen Eigentümer hinzuzufügen muss einfach die bequeme Methode ``addOwnerToGroup()`` aufgerufen -werden: - -.. code-block:: php - :linenos: - - $gdata->addOwnerToGroup('bar@somewhere.com', 'friends'); - -.. _zend.gdata.gapps.groupOwners.retrieving: - -Die Liste der Eigentümer einer Gruppe erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die bequeme Methode ``retrieveGroupOwners()`` kann verwendet werden um die Liste der Eigentümer einer Gruppe zu -erhalten: - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveGroupOwners('friends'); - - foreach ($feed as $owner) { - foreach ($owner->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - } - -Alternativ kann ein neuer OwnerQuery erstellt, seine Eigenschaft groupId auf die passende und gewünschte Gruppen -Id gesetzt und ``getOwnerFeed()`` auf einem Service Objekt aufgerufen werden. - -.. code-block:: php - :linenos: - - $query = $gdata->newOwnerQuery(); - $query->setGroupId('friends'); - $feed = $gdata->getOwnerFeed($query); - - foreach ($feed as $owner) { - foreach ($owner->property as $p) { - echo "Name der Eigenschaft: " . $p->name; - echo "\nWert der Eigenschaft: " . $p->value . "\n\n"; - } - } - -Das erstelle ein ``ZendGData\Gapps\OwnerFeed`` Objekt welches jedes Mitglied der ausgewählten Gruppe enthält. - -.. _zend.gdata.gapps.groupOwners.check: - -Prüfen um zu sehen ob ein Email der Eigentümer einer Gruppe ist -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um zu prüfen ob ein Email der Eigentümer einer Gruppe ist, kann einfach die bequeme Methode ``isOwner()`` -aufgerufen werden: - -.. code-block:: php - :linenos: - - $isOwner = $gdata->isOwner('bar@somewhere.com', 'friends'); - var_dump($isOwner); - -Die Methode gibt einen boolschen Wert zurück. Wenn die Email der Eigentümer der spezifizierten Gruppe ist, gibt -die Methode true zurück, andernfalls gibt sie false zurück. - -.. _zend.gdata.gapps.groupOwners.removing: - -Einen Eigentümer von einer Gruppe entfernen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um einen Eigentümer von einer Gruppe zu entfernen kann die bequeme Methode ``removeOwnerFromGroup()`` aufgerufen -werden: - -.. code-block:: php - :linenos: - - $gdata->removeOwnerFromGroup('baz@somewhere.com', 'friends'); - -.. _zend.gdata.gapps.emailLists: - -Mit Email Listen interagieren ------------------------------ - -Email Listen erlauben verschiedenen Benutzern Emails zu empfangen die zu einer einzelnen Email Adresse adressiert -sind. Benutzer müssen keine Teilnehmer dieser Domain sein um sich in eine Email Liste einzuschreiben, wen deren -komplette Email Adresse (inklusive Domain) verwendet wird. - -Jede Email Liste einer Domain wird als Instanz von ``ZendGData\Gapps\EmailListEntry`` repräsentiert. - -.. _zend.gdata.gapps.emailLists.creating: - -Erstellen einer Email Liste -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Email Listen können durch den Aufruf der bequemen ``createEmailList()`` Methode erstellt werden: - -.. code-block:: php - :linenos: - - $gdata->createEmailList('friends'); - -Email Listen können auch durch die Instanzierung von EmailListEntry erstellt werden, indem ein Name für die Liste -angegeben wird, und anschließend ``insertEmailList()`` auf dem Service Objekt aufgerufen wird um den Eintrag zum -Server hochzuladen. - -.. code-block:: php - :linenos: - - $list = $gdata->newEmailListEntry(); - $list->emailList = $gdata->newEmailList('friends'); - $list = $gdata->insertEmailList($list); - -.. _zend.gdata.gapps.emailList.retrieve: - -Empfangen aller Email Listen bei denen ein Empfänger eingeschrieben ist -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Email Lsiten zu denen ein spezieller Empfänger eingeschrieben ist zu empfangen, muß die bequeme -``retrieveEmailLists()`` Methode aufgerufen werden: - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveEmailLists('baz@somewhere.com'); - - foreach ($feed as $list) { - echo ' * ' . $list->emailList->name . "\n"; - } - -Das erstellt ein ``ZendGData\Gapps\EmailListFeed`` Objekt welches jede Email Liste enthält die mit dem speziellen -Empfänger assoziiert ist. - -Alternativ kann ein neues ``ZendGData\Gapps\EmailListQuery`` erstellt werden, dessen recipient Eigenschaft auf die -gewünschte Email Adresse gesetzt werden, und die Abfrage durch den Aufruf von ``getEmailListFeed()`` auf dem -Service Objekt übermittelt werden. - -.. code-block:: php - :linenos: - - $query = $gdata->newEmailListQuery(); - $query->setRecipient('baz@somewhere.com'); - $feed = $gdata->getEmailListFeed($query); - - foreach ($feed as $list) { - echo ' * ' . $list->emailList->name . "\n"; - } - -.. _zend.gdata.gapps.emailLists.retrievingAll: - -Empfangen aller Email Listen in einer Domain -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um alle Email Listen in einer Domain zu erhalten, muß die bequeme ``retrieveAllEmailLists()`` Methode aufgerufen -werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveAllEmailLists(); - - foreach ($feed as $list) { - echo ' * ' . $list->emailList->name . "\n"; - } - -Das erzeugt ein ``ZendGData\Gapps\EmailListFeed`` Objekt welches jede Email Liste der Domain enthält. - -Alternativ kann ``getEmailListFeed()`` auf dem Service Objekt ohne Argumente aufgerufen werden. - -.. code-block:: php - :linenos: - - $feed = $gdata->getEmailListFeed(); - - foreach ($feed as $list) { - echo ' * ' . $list->emailList->name . "\n"; - } - -.. _zend.gdata.gapps.emailList.deleting: - -Löschen einer Email Liste -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um eine Email Liste zu löschen, muß die bequeme ``deleteEmailList()`` Methode aufgerufen werden: - -.. code-block:: php - :linenos: - - $gdata->deleteEmailList('friends'); - -.. _zend.gdata.gapps.emailListRecipients: - -Mit den Empfängern von Email Listen interagieren ------------------------------------------------- - -Jeder Empfänger der bei einer Email Liste eingeschrieben ist, wird durch eine Instanz von -``ZendGData\Gapps\EmailListRecipient`` repräsentiert. Durch diese Klasse können individuelle Empfänger -hinzugefügt und von Email Listen entfernt werden. - -.. _zend.gdata.gapps.emailListRecipients.adding: - -Einen Empfängern zu einer Email Liste hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um einen Empfänger zu einer Email Liste hinzuzufügen, muß einfach die bequeme ``addRecipientToEmailList()`` -Methode aufgerufen werden: - -.. code-block:: php - :linenos: - - $gdata->addRecipientToEmailList('bar@somewhere.com', 'friends'); - -.. _zend.gdata.gapps.emailListRecipients.retrieving: - -Eine Liste von Empfängern einer Email Liste erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die bequeme ``retrieveAllRecipients()`` Methode kann verwendet werden um die Liste der Empfänger einer Email Liste -zu erhalten: - -.. code-block:: php - :linenos: - - $feed = $gdata->retrieveAllRecipients('friends'); - - foreach ($feed as $recipient) { - echo ' * ' . $recipient->who->email . "\n"; - } - -Alternativ kann ein neuer EmailListRecipientQuery erstellt werdne, dessen emailListName Eigenschaft auf die -gewünschte Email Liste gesetzt werden, und ``getEmailListRecipientFeed()`` auf dem Service Objekt aufgerufen -werden. - -.. code-block:: php - :linenos: - - $query = $gdata->newEmailListRecipientQuery(); - $query->setEmailListName('friends'); - $feed = $gdata->getEmailListRecipientFeed($query); - - foreach ($feed as $recipient) { - echo ' * ' . $recipient->who->email . "\n"; - } - -Das Erstellt ein ``ZendGData\Gapps\EmailListRecipientFeed`` Objekt welche jeden Empfänger für die ausgewählte -Email Liste enthält. - -.. _zend.gdata.gapps.emailListRecipients.removing: - -Einen Empfänger von einer Email Liste entfernen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um einen Empfänger von einer Email Liste zu entfernen, muß die bequeme ``removeRecipientFromEmailList()`` Methode -aufgerufen werden: - -.. code-block:: php - :linenos: - - $gdata->removeRecipientFromEmailList('baz@somewhere.com', 'friends'); - -.. _zend.gdata.gapps.exceptions: - -Fehler handhaben ----------------- - -Zusätzlich zur Standardsuite von Ausnahmen die von ``ZendGData`` geworfen werden, können Anfragen welche die -Provisionierungs *API* verwenden auch eine ``ZendGData\Gapps\ServiceException`` werfen. Diese Ausnahme zeigt das -ein *API* spezieller Fehler aufgetreten ist welche verhindert das die Anfrage fertiggestellt werden kann. - -Jede ServiceException Instanz kann einen oder mehrere Fehler Objekte enthalten. Jedes dieser Objekte enthalten -einen Fehlercode, Grund und (optional) die Eingave welche die Ausnahme getriggert hat. Eine komplette Liste von -bekannten Fehlercodes wird in der Zend Framework *API* Dokumentation unter ``ZendGData\Gapps\Error`` angeboten. -Zusätzlich ist die maßgebliche Fehlerliste online unter `Google Apps Provisioning API V2.0 Reference: Appendix -D`_ vorhanden. - -Wärend die komplette Liste von Fehler die empfangen wurden in ServiceException als Array vorhanden sind das man -durch den Aufruf von ``getErrors()`` erhalten kann, ist es oft bequemer zu wissen ob ein spezieller Fehler -aufgetreten ist. Für diese Fälle kann das Vorhandensein eines Fehler durch den Aufruf von ``hasError()`` erkannt -werden. - -Das folgende Beispiel demonstriert wie erkannt werden kann ob eine angefragte Ressource nicht existiert und der -Fehler korrekt behandelt werden kann: - -.. code-block:: php - :linenos: - - function retrieveUser ($username) { - $query = $gdata->newUserQuery($username); - try { - $user = $gdata->getUserEntry($query); - } catch (ZendGData\Gapps\ServiceException $e) { - // Den Benutzer auf null setzen wen er nicht gefunden wurde - if ($e->hasError(ZendGData\Gapps\Error::ENTITY_DOES_NOT_EXIST)) { - $user = null; - } else { - throw $e; - } - } - return $user; - } - - - -.. _`Provisionierungs API V2.0 Referenz`: http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html -.. _`Google Apps Provisioning API V2.0 Reference: Appendix D`: http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_d diff --git a/docs/languages/de/modules/zend.gdata.introduction.rst b/docs/languages/de/modules/zend.gdata.introduction.rst deleted file mode 100644 index b5a1a1883..000000000 --- a/docs/languages/de/modules/zend.gdata.introduction.rst +++ /dev/null @@ -1,476 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.introduction: - -Einführung -========== - -Die *API*\ s von Google Data bieten ein programmtechnisches Interface zu einigen von Google's Online Services. Das -Google Data Protokoll basiert auf dem `Atom Publishing Protokoll`_ und erlaubt Client Anwendungen das Empfangen von -passenden Anfragen zu Daten, senden von Daten, modifizieren von Daten und löschen von Daten wobei Standard *HTTP* -und das Atom Syndication Format verwendet wird. Die ``ZendGData`` Komponente ist ein *PHP* 5 Interface für den -Zugriff auf Daten von Google von *PHP* aus. Die ``ZendGData`` Komponente unterstützt auch den Zugriff auf andere -Services die das Atom Publishing Protokoll implementieren. - -Siehe http://code.google.com/apis/gdata/ für mehr Informationen über die Google Data *API*. - -Die Services auf die durch ``ZendGData`` zugegriffen werden kann beinhalten unter anderem: - - - - - :ref:`Google Kalender ` ist eine populäre online Kalender Anwendung. - - - :ref:`Google Tabellenkalkulation ` bietet ein gemeinschaftliches online - Tabellenkalkulations Tool welches als einfacher Datenspeicher für eigene Anwendungen verwendet werden kann. - - - :ref:`Google Dokumenten Liste ` bietet eine online Liste von allen Tabellenkalkulationen, - Wortbearbeitungs Dokumenten, und Präsentationen die in einem Google Account gespeichert sind. - - - :ref:`Google Versorgung ` bietet die Möglichkeit Benutzerdaten, Spitznamen, Gruppen und - Emaillisten auf einer Google Apps gehosten Domain zu erstellen, erhalten, aktualisieren und zu löschen. - - - :ref:`YouTube ` bietet die Möglichkeit Videos, Kommentare, Favoriten, Einschreibungen, - Benutzerprofile und vieles mehr zu Suchen und zu Empfangen. - - - :ref:`Picasa Web Album ` bietet eine online Photo Sharing Anwendung. - - - `Google Blogger`_ ist ein populärer Internet Provider von "push-button Veröffentlichung" und Verbreitung. - - - Google CodeSearch erlaubt das Suchen von öffentlichem Source Code für viele Projekte. - - - Google Notebook erlaubt das sehen von veröffentlichten Notebook Inhalten. - - - -.. note:: - - **Nicht unterstützte Services** - - ``ZendGData`` bietet kein Interface zu irgendwelchen anderen Google Services wie Search, Gmail, Translation - oder Maps. Nur Services die das Google Data *API* unterstützen werden unterstützt. - -.. _zend.gdata.introduction.structure: - -Struktur von ZendGData ------------------------ - -``Zend_Gata`` besteht aus verschiedenen Typen von Klassen: - - - - - Service Klassen - abgeleitet von ``ZendGData\App``. Diese beinhalten auch andere Klassen wie ``ZendGData``, - ``ZendGData\Spreadsheeps``, usw. Diese Klassen erlauben die Interaktion mit APP oder GData Services und - bieten die Möglichkeit Feeds und Einträge zu empfangen, Einträge zu senden, zu aktualisieren und zu - löschen. - - - Abfrage Klassen - abgeleitet von ``ZendGData\Query``. Diese beinhalten auch andere Klassen für spezielle - Services, wie ``ZendGData\Spreadsheet\ListQuery`` und ``ZendGData\Spreadsheets\CellQuery``. Abfrage Klassen - bieten Methoden die verwendet werden können um Abfragen für Daten zu erstellen die von GData Services - empfangen werden. Die Methoden inkludieren Getter und Setter wie ``setUpdatedMin()``, ``setStartIndex()``, und - ``getPublishedMin()``. Die Abfrage Klassen haben auch eine Methode um eine *URL* zu erhalten welche die - erstellte Abfrage repräsentieren. --``getQueryUrl()``. Alternativ kann man die Abfrage String Komponente der - *URL* erhalten indem die ``getQueryString()`` Methode verwendet wird. - - - Feed Klassen - abgeleitet von ``ZendGData\App\Feed``. Diese beinhalten auch andere Klassen wie - ``ZendGData\Feed``, ``ZendGData\Spreadsheets\SpreadsheetFeed``, und ``ZendGData\Spreadsheets\ListFeed``. - Diese Klassen repräsentieren Feeds von Einträgen die von Services empfangen wurden. Sie werden primär - verwendet um Daten die von Services zurückgegeben werden zu erhalten. - - - Eingabe Klassen - abgeleitet von ``ZendGData\App\Entry``. Diese beinhalten auch andere Klassen wie - ``ZendGData\Entry``, und ``ZendGData\Spreadsheets\ListEntry``. Diese Klassen repräsentieren Einträge die - von Services empfangen oder für die Erstellung von Daten, die an Services geschickt werden, verwendet werden. - Zusätzlich zur Möglichkeit die Eigenschaften eines Eintrages (wie den Zellen Wert der Tabellenkalkulation) - zu setzen, kann das Objekt des Eintrages verwendet werden um Aktualisierungs- oder Löschanfragen an ein - Service zu senden. Zum Beispiel kann ``$entry->save()`` aufgerufen werden um Änderungen die an einem Eintrage - durchgeführt wurden zu einem Service zurück zu Speichern von welche der Eintrag initiiert wurde, oder - ``$entry->delete()`` um einen Eintrag von einem Server zu Löschen. - - - Andere Daten Modell Klassen - abgeleitet von ``ZendGData\App\Extension``. Diese beinhalten Klassen wie - ``ZendGData\App\Extension\Title`` (repräsentiert das atom:title *XML* Element), - ``ZendGData\Extension\When`` (repräsentiert das gd:when *XML* Element das von dem GData Event "Kind" - verwendet wird), und ``ZendGData\Extension\Cell`` (repräsentiert das gs:cell *XML* Element das von Google - Tabellenkalkulation verwendet wird). Diese Klassen werden pur verwendet um von den Server zurückgegebene - Daten zu speichern und für die Erstellung von Daten die an Services gesendet werden. Diese beinhalten Getter - und Setter wie ``setText()`` um den Kindtext Node eines Elements zu setzen, ``getText()`` um den Text Node - eines Elements zu erhalten, ``getStartTime()`` um das Startzeit Attribut eines When Elements oder anderen - ähnlichen Methoden zu empfangen. Die Daten Modell Klassen beinhalten auch Methoden wie ``getDOM()`` um eine - DOM Repräsentation des Elements und aller Kinder zu erhalten, und ``transferFromDOM()`` um eine Daten Modell - Repräsentation des DOM Baumes zu erstellen. - - - -.. _zend.gdata.introduction.services: - -Mit Google Services interagieren --------------------------------- - -Google Daten Services basieren auf dem Atom Publishing Protokoll (APP) und dem Atom Syndication Format. Um mit APP -oder den Google Services zu interagieren indem ``ZendGData`` verwendet wird, müssen Service Klassen wie -``ZendGData\App``, ``ZendGData``, ``ZendGData\Spreadsheets``, usw. verwendet werden. Diese Service Klassen -bieten Methoden um Daten von Services als Feeds zu empfangen, neue Einträge in Feeds einzufügen, Einträge zu -aktuslieieren und Einträge zu löschen. - -Achtung: Ein komplettes Beispiel davon wie mit ``ZendGData`` gearbeitet werden kann ist im ``demos/Zend/Gdata`` -Verzeichnis vorhanden. Dieses Beispiel läuft von der Kommandozeile aus, aber die enthaltenen Methoden sind einfach -in einem Web Anwendung zu portieren. - -.. _zend.gdata.introduction.magicfactory: - -Instanzen von ZendGData Klassen erhalten ------------------------------------------ - -Der Zend Framework Namensstandard erzwingt das alle Klassen nach der Verzeichnis Struktur benannt werden in welcher -sie vorhanden sind. Zum Beispiel eine Erweiterung die zu Tabellenkalkulation gehört und in -``Zend/Gdata/Spreadsheets/Extension/...`` gespeichert ist, muß als Ergebnis -``ZendGData\Spreadsheets\Extension\...`` benannt werden. Das verursacht eine Menge an Tipparbeit wenn versucht -wird eine neue Instanz eines Zellen Elements zu erstellen! - -Wir haben eine magische Fabriksmethode in alle Service Klassen (wie ``ZendGData\App``, ``ZendGData``, -``ZendGData\Spreadsheets``) implementiert welche die Erstellung neuer Instanzen von Daten Modellen, Abfragen und -anderen Klassen viel einfacher macht. Diese magische Fabriksmethode ist durch die Verwendung der magischen -``__call()`` Methode implementiert um auf alle Versuche ``$service->newXXX(arg1, arg2, ...)`` aufzurufen, -angewendet zu werden. Basieren auf dem Wert von XXX, wird eine Suche in allen registrierten 'Paketen', für die -gewünschte Klasse, durchgeführt. Hier sind einige Beispiele: - -.. code-block:: php - :linenos: - - $ss = new ZendGData\Spreadsheets(); - - // Erstellt ein ZendGData\App\Spreadsheets\CellEntry - $entry = $ss->newCellEntry(); - - // Erstellt ein ZendGData\App\Spreadsheets\Extension\Cell - $cell = $ss->newCell(); - $cell->setText('Mein Zellenwert'); - $cell->setRow('1'); - $cell->setColumn('3'); - $entry->cell = $cell; - - // ... $entry kann dann verwendet werden um eine Aktualisierung - // an eine Google Tabellenkalkulation zu senden - -Jede Service Klasse im abgeleiteten Baum ist dafür verantwortlich das die richtigen 'Pakete' (Verzeichnisse) -registriert werden, in welchen dann durch den Aufruf der matischen Fabriksmethode, gesucht wird. - -.. _zend.gdata.introduction.authentication: - -Google Data Client Authentifizierung ------------------------------------- - -Die meisten Google Daten Services erfordern das sich die Client Anwendung auf dem Google Server authentifiziert -bevor auf private Daten zugegriffen, oder Daten gespeichert oder gelöscht werden können. Es gibt zwei -Implementationen der Authentifizierung für Google Daten: :ref:`AuthSub ` und :ref:`ClientLogin -`. ``ZendGData`` bietet Klassen Interfaces für beide dieser Methoden. - -Die meisten anderen Typen von Abfragen auf Google Daten Servicen benötigen keine Authentifizierung. - -.. _zend.gdata.introduction.dependencies: - -Abhängigkeiten --------------- - -``ZendGData`` verwendet :ref:`Zend\Http\Client ` um Anfragen an google.com zu senden und -Ergebnisse zu erhalten. Die Antworter der meisten Google Data Anfragen werden als Subklasse von -``ZendGData\App\Feed`` oder ``ZendGData\App\Entry`` Klassen zurückgegeben. - -``ZendGData`` nimmt an das die *PHP* Anwendung auf einem Host läuft der eine direkte Verbindung zum Internet hat. -Der ``ZendGData`` Client arbeitet indem er zu Google Daten Servern Kontakt aufnimmt. - -.. _zend.gdata.introduction.creation: - -Erstellen eines neuen Gdata Klienten ------------------------------------- - -Man muß ein neues Objekt der Klasse ``ZendGData\App``, ``ZendGData``, oder einer dessen Subklassen erstellen die -Helfer Methoden für servicespezifische Verhaltensweisen anbieten. - -Der einzige optionale Parameter für den Konstruktor von ``ZendGData\App`` ist eine Instanz von -:ref:`Zend\Http\Client `. Wenn dieser Parameter nicht übergeben wird, erstellt ``ZendGData`` -ein standardmäßiges ``Zend\Http\Client`` Objekt, welches keine Zugangsdaten zugeordnet hat um auf private Feeds -zugreifen zu können. Die Spezifizierung des ``Zend\Http\Client`` Objektes erlaubt es auch Konfigurationsoptionen -an das Client Objekt zu übergeben. - -.. code-block:: php - :linenos: - - $client = new Zend\Http\Client(); - $client->setConfig( ...options... ); - - $gdata = new ZendGData\Gdata($client); - -Beginnend mit Zend Framework 1.7, wurde die Unterstützung für die Versionierung des Protkolls hinzugefügt. Das -erlaut dem Client und Server neue Fesatures zu unterstützen, wärend die Rückwärts Kompatibilität gewahrt -bleibt. Wärend die meisten Services das für dich selbst durchführen, wenn man eine ``ZendGData`` Instanz direkt -erstellt (als Gegensatz zu einer Ihrer Unterklassen), kann es sein das man die gewünschte Version des Protokolls -spezifizieren will um auf spezielle Serverfunktionalitäten zugreifen zu können. - -.. code-block:: php - :linenos: - - $client = new Zend\Http\Client(); - $client->setConfig( ...options... ); - - $gdata = new ZendGData\Gdata($client); - $gdata->setMajorProtocolVersion(2); - $gdata->setMinorProtocolVersion(null); - -Siehe auch die Sektion über Authentifizierung für Methoden, um ein authentifiziertes ``Zend\Http\Client`` Objekt -zu erstellen. - -.. _zend.gdata.introduction.parameters: - -Übliche Abfrage Parameter -------------------------- - -Es können Parameter spezifiziert werden um Abfragen mit ``ZendGData`` anzupassen. Abfrageparameter werden -spezifiziert indem Subklassen von ``ZendGData\Query`` verwendet werden. Die ``ZendGData\Query`` Klasse beinhaltet -Methoden um alle Abfrageparameter zu setzen die von Gdata Services verwendet werden. Individuelle Services, wie -Tabellenkalkulationen, bieten auch Abfrageklassen zu definierten Parametern welche an das spezielle Service und die -Feeds angepasst sind. Tabellenkalkulationen beinhalten eine CellQuery Klasse um den Zellen Feed abzufragen und eine -ListQuery Klasse um den Listen Feed abzufragen, da verschiedene Abfrageparameter für jeder dieser Feedtypen -möglich sind. Die GData-weiten Parameter werden anbei beschrieben. - -- Der ``q`` Parameter spezifiziert eine komplette Textabfrage. Der Wert dieses Parameters ist ein String. - - Dieser Parameter kann mit der ``setQuery()`` Methode gesetzt werden. - -- Der ``alt`` Parameter spezifiziert den Feed Typ. Der Wert dieses Parameters kann ``atom``, ``rss``, ``json``, - oder ``json-in-script`` sein. Wenn dieser Parameter nicht spezifiziert wird, ist der Standard Feedtyp ``atom``. - ``Zend\Http\Client`` könnte verwendet werden um Feeds in anderen Formaten zu empfangen, indem die von der - ``ZendGData\Query`` Klasse oder deren Subklassen erzeugten Abfrage *URL*\ s verwendet werden. - - Dieser Parameter kann mit der ``setAlt()`` Methode gesetzt werden. - -- Der ``maxResults`` Parameter begrenzt die Anzahl an Einträgen im Feed. Der Wert dieses Parameters ist ein - Integer. Die zurückgegebene Anzahl an Einträgen im Feed wird diesen Wert nicht überschreiten. - - Dieser Parameter kann mit der ``setMaxResults()`` Methode gesetzt werden. - -- Der ``startIndex`` Parameter spezifiziert die ordinale Nummer des ersten Eintrags der im Feed zurückgegeben - wird. Einträge vor dieser Nummer werden übergangen. - - Dieser Parameter kann mit der ``setStartIndex()`` Methode gesetzt werden. - -- Die Parameter ``updatedMin`` und ``updatedMax`` spezifizieren Grenzen für das Datum der Einträge. Wenn ein Wert - für ``updatedMin`` spezifiziert wird, werden keine Einträge die vor dem spezifizierten Datum aktualisiert - wurden, im Feed inkludiert. Genauso werden keine Einträge inkludiert die nach einem Datum aktualisiert wurden - wenn ``updatedMax`` spezifiziert wird. - - Es können nummerische Zeitstempel, oder eine Variation von Datum/Zeit String Repräsentationen als Wert für - diese Parameter verwendet werden. - - Diese Parameter kkönnen mit den ``setUpdatedMin()`` und ``setUpdatedMax()`` Methoden gesetzt werden. - -Es gibt eine ``get*()`` Funktion für jede ``set*()`` Funktion. - -.. code-block:: php - :linenos: - - $query = new ZendGData\Query(); - $query->setMaxResults(10); - echo $query->getMaxResults(); // gibt 10 zurück - -Die ``ZendGData`` Klasse implementiert auch "magische" Getter und Setter Methoden, es kann also der Name des -Parameters als virtuelles Mitglied der Klasse verwendet werden. - -.. code-block:: php - :linenos: - - $query = new ZendGData\Query(); - $query->maxResults = 10; - echo $query->maxResults; // gibt 10 zurück - -Es können alle Parameter mit der ``resetParameters()`` Funktion gelöscht werden. Das ist nützlich wenn ein -``ZendGData`` Objekt für mehrfache Abfragen wiederverwendet werden soll. - -.. code-block:: php - :linenos: - - $query = new ZendGData\Query(); - $query->maxResults = 10; - // ...den Feed empfangen... - - $query->resetParameters(); // löscht alle Parameter - // ...einen anderen Feed empfangen... - -.. _zend.gdata.introduction.getfeed: - -Einen Feed empfangen --------------------- - -Die ``getFeed()`` Funktion kann verwendet werden um einen Feed von einer spezifizierten *URI* zu empfangen. Diese -Funktion gibt eine Instanz der Klasse, die als zweites Argument an getFeed übergeben wurde, zurück, welche -standardmäßig ZendGData\Feed ist. - -.. code-block:: php - :linenos: - - $gdata = new ZendGData\Gdata(); - $query = new ZendGData\Query( - 'http://www.blogger.com/feeds/blogID/posts/default'); - $query->setMaxResults(10); - $feed = $gdata->getFeed($query); - -Siehe spätere Sektionen für spezielle Funktionen in jeder Helfer Klasse für Google Daten Services. Diese -Funktionen helfen Feeds von einer *URI* zu empfangen die für das angeforderte Service zuständig ist. - -.. _zend.gdata.introduction.paging: - -Mit Mehrfach-Seiten Feeds arbeiten ----------------------------------- - -Wenn man einen Feed empfängt der eine große Anzahl an Einträgen enthält, kann dieser Feed in viele kleinere -"Seiten" von Feeds gebrochen werden. Wenn das passiert, enthält jede Seite einen Link zur nächsten Seite der -Serie. Auf diesen Link kann mit Hilfe von ``getLink('next')`` zugegriffen werden. Das folgende Beispiel zeigt wie -auf die nächste Seite eines Feeds empfangen werden kann: - -.. code-block:: php - :linenos: - - function getNextPage($feed) { - $nextURL = $feed->getLink('next'); - if ($nextURL !== null) { - return $gdata->getFeed($nextURL); - } else { - return null; - } - } - -Wenn man es vorzieht nicht mit Seiten in der eigenen Anwendung zu arbeiten, kann die erste Seite des Feeds an -``ZendGData\App::retrieveAllEntriesForFeed()`` übergeben werden, welche alle Einträge von jeder Seite in einen -einzelnen Feed zusammenfasst. Dieses Beispiel zeigt wie diese Funktion verwendet werden kann: - -.. code-block:: php - :linenos: - - $gdata = new ZendGData\Gdata(); - $query = new ZendGData\Query( - 'http://www.blogger.com/feeds/blogID/posts/default'); - $feed = $gdata->retrieveAllEntriesForFeed($gdata->getFeed($query)); - -Es gilt zu beachten das wenn diese Funktion aufgerufen wird, dies eine sehr lange Zeit benötigen kann im große -Feeds zu komplettieren. Es kann notwendig sein *PHP*'s Limit der Ausführungszeit zu vergrößern mithilfe von -``set_time_limit()`` zu vergrößern. - -.. _zend.gdata.introduction.usefeedentry: - -Arbeiten mit Daten in Feeds und Einträgen ------------------------------------------ - -Nachdem ein Feed empfangen wurde, können die Daten von dem Feed oder den Einträgen die in dem Feed enthalten -sind, gelesen werden, indem entweder die in jeder Daten Modell Klasse definierten Zugriffsmethoden oder die -magischen Zugriffsmethoden verwendet werden. Hier ist ein Beispiel: - -.. code-block:: php - :linenos: - - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $gdata = new ZendGData\Gdata($client); - $query = new ZendGData\Query( - 'http://www.blogger.com/feeds/blogID/posts/default'); - $query->setMaxResults(10); - $feed = $gdata->getFeed($query); - foreach ($feed as $entry) { - // Die magischen Zugriffsmethoden verwenden - echo 'Titel: ' . $entry->title->text; - // Die definierten Zugriffsmethoden verwenden - echo 'Inhalt: ' . $entry->getContent()->getText(); - } - -.. _zend.gdata.introduction.updateentry: - -Einträge aktualisieren ----------------------- - -Nachdem ein Eintrag empfangen wurde, kann dieser Eintrag aktualisiert und die Änderungen an den Server zurück -gespeichert werden. Hier ist ein Beispiel: - -.. code-block:: php - :linenos: - - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $gdata = new ZendGData\Gdata($client); - $query = new ZendGData\Query( - 'http://www.blogger.com/feeds/blogID/posts/default'); - $query->setMaxResults(10); - $feed = $gdata->getFeed($query); - foreach ($feed as $entry) { - // Dem Titel 'NEU' hinzufügen - echo 'Alter Titel: ' . $entry->title->text; - $entry->title->text = $entry->title->text . ' NEU'; - - // Den Eintrag auf dem Server aktualisieren - $newEntry = $entry->save(); - echo 'New Title: ' . $newEntry->title->text; - } - -.. _zend.gdata.introduction.post: - -Einträge an Google Server schicken ----------------------------------- - -Das ``ZendGData`` Objekt hat eine ``insertEntry()`` Funktion mit der man Daten hochladen kann um neue Einträge in -Google Data Services zu speichern. - -Die Daten Modell Klassen jedes Services kann verwendet werden um einen entsprechenden Eintrag zu erstellen und an -Google's Services zu schicken. Die ``insertEntry()`` Funktion akzeptiert ein Kind von ``ZendGData\App\Entry`` als -Daten die an den Service geschickt werden. Die Methode gibt ein Kind von ``ZendGData\App\Entry`` zurück welches -den Status des Eintrages repräsentiert der vom Server zurückgegeben wurde. - -Alternativ, kann die *XML* Struktur eines Eintrages als String konstruiert und dieser String an die -``insertEntry()`` Funktion übergeben werden. - -.. code-block:: php - :linenos: - - $gdata = new ZendGData\Gdata($authenticatedHttpClient); - - $entry = $gdata->newEntry(); - $entry->title = $gdata->newTitle('Füßball im Park spielen'); - $content = - $gdata->newContent('Wir besuchen den Part und spielen Fußball'); - $content->setType('text'); - $entry->content = $content; - - $entryResult = $gdata->insertEntry($entry, - 'http://www.blogger.com/feeds/blogID/posts/default'); - - echo 'Die des resultierenden Eintrages ist: ' . $entryResult->id->text; - -Um Einträge zu senden, muß ein authentifizierter ``Zend\Http\Client`` verwendet werden der mit Hilfe der -``ZendGData\AuthSub`` oder ``ZendGData\ClientLogin`` Klassen erstellt wurde. - -.. _zend.gdata.introduction.delete: - -Einträge auf einem Google Server löschen ----------------------------------------- - -Option 1: Das ``ZendGData`` Objekt hat eine ``delete()`` Funktion mit der Einträge von Google Daten Services -gelöscht werden können. Der bearbeitete *URL* Wert eines Feed Eintrages kann der ``delete()`` Methode übergeben -werden. - -Option 2: Alternativ kann ``$entry->delete()`` an einem Eintrag der von einem Google Service empfangen wurde, -aufgerufen werden. - -.. code-block:: php - :linenos: - - $gdata = new ZendGData\Gdata($authenticatedHttpClient); - // ein Google Daten Feed - $feedUri = ...; - $feed = $gdata->getFeed($feedUri); - foreach ($feed as $feedEntry) { - // Option 1 - den Eintrag direkt löschen - $feedEntry->delete(); - // Option 2 - den eintrag durch Übergabe der bearbeiteten URL an - // $gdata->delete() löschen - // $gdata->delete($feedEntry->getEditLink()->href); - } - -Um Einträge zu löschen, muß ein authentifizierter ``Zend\Http\Client`` verwendet werden der mit Hilfe der -``ZendGData\AuthSub`` oder ``ZendGData\ClientLogin`` Klassen erstellt wurde. - - - -.. _`Atom Publishing Protokoll`: http://ietfreport.isoc.org/idref/draft-ietf-atompub-protocol/ -.. _`Google Blogger`: http://code.google.com/apis/blogger/developers_guide_php.html diff --git a/docs/languages/de/modules/zend.gdata.photos.rst b/docs/languages/de/modules/zend.gdata.photos.rst deleted file mode 100644 index f70d9923f..000000000 --- a/docs/languages/de/modules/zend.gdata.photos.rst +++ /dev/null @@ -1,765 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.photos: - -Picasa Web Alben verwenden -========================== - -Picasa Web Alben ist ein Service der es Benutzer erlaubt Alben von Ihren eigenen Bildern zu verwalten, und die -Alben und Bilder von anderen anzusehen. Die *API* bietet ein programmtechnisches Interface für diesen Service, der -es Benutzer erlaubt hinzuzufügen, zu aktualisieren, und von Ihren Alben zu löschen, genauso wie die Möglichkeit -Tags und Kommentare auf Fotos zu gestatten. - -Der Zugriff auf öffentliche Alben und Photos ist nicht durch einen Zugang beschränkt. Trotzdem muß ein Benutzer -angemeldet sein für einen nicht-nur-lesenden Zugriff. - -Für weitere Informationen über die *API*, inklusive Anleitungen für das Aktivieren des *API* Zugriffs, sollte in -die `Picasa Web Alben Daten API Übersicht`_ gesehen werden. - -.. note:: - - **Authentifizierung** - - Die *API* bietet Authentifizierung über AuthSub (vorgeschlagen) und ClientAuth. *HTTP* Verbindungen müssen - für einen Lesezugriff authentifiziert sein, aber nicht-authentifizierte Verbindungen haben nur-lesenden - Zugriff. - -.. _zend.gdata.photos.connecting: - -Zum Service verbinden ---------------------- - -Die Picasa Web Album *API* basiert, wie alle GData *API*\ s, auf dem Atom Publishing Protokoll (APP), einem *XML* -basierenden Format für gemanagte web-basierende Ressourcen. Der Verkehr zwischen Client und den Servers tritt -über *HTTP* auf, und erlaubt sowohl authentifizierte als auch nicht authentifizierte Verbindungen. - -Bevor irgendeine Transaktion stattfinden kann muß diese Verbindung hergestellt werden. Die Erstellung einer -Verbindung zum Picasa Servern beinhaltet zwei Schritte: Erstellung eines *HTTP* Clients und Binden einer -``ZendGData\Photos`` Instanz an diesen Client. - -.. _zend.gdata.photos.connecting.authentication: - -Authentifikation -^^^^^^^^^^^^^^^^ - -Die Google Picasa *API* erlaubt erlaubt den Zugriff sowohl auf öffentliche als auch auf private Kalender Feeds. -Öffentliche Feeds benötigen keine Authentifizierung sind aber nur-lesend und bieten eine reduzierte -Funktionalität. Private Feeds bieten die kompletteste Funktionalität benötigen aber eine authentifizierte -Verbindung zum Picasa Server. Es gibt drei Authentifizierungs Schemata die von Google Picasa unterstützt werden: - -- **ClientAuth** bietet direkte Benutzername/Passwort Authentifizierung zu den Picasa Servern. Da dieses Schema - erfordert das Benutzer die Anwendung mit Ihrem Passwort versorgen, ist diese Authentifizierung nur zu empfehlen - wenn andere Authentifizierungs Schemas nicht anwendbar sind. - -- **AuthSub** erlaubt die Authentifizierung zu den Picasa Servern über einen Google Proxy Server. Das bietet den - gleichen Level von Bequemlichkeit wie ClientAuth aber ohne die Sicherheits Risiken, was es zu einer idealen Wahl - für Web basierende Anwendungen macht. - -Die ``ZendGData`` Bibliothek bietet Unterstützung für beide Authentifizierungs Schemas. Der Rest dieses Kapitels -nimmt an das die vorhandenen Authentifizierungs Schemas geläufig sind und wie eine korrekte Authentifizierte -Verbindung erstellt wird. Für weitere Details kann in die :ref:`Authentifizierungs Sektion -` dieses Handbuches, oder in die `Authentifizierungs Übersicht im Google -Data API Entwickler Guide`_ gesehen werden. - -.. _zend.gdata.photos.connecting.service: - -Erstellen einer Service Instanz -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um mit den Servern zu interagieren, bietet diese Bibliothek die ``ZendGData\Photos`` Service Klasse. Diese Klasse -bietet ein übliches Interface zu den Google Data und Atom Publishing Protocol Modellen und assistiert in der -Behandlung der Anfragen zum und von den Kalender Servern. - -Sobald ein Authentifizierung Schema ausgewählt wurde, besteht der nächste Schritt darin eine Instanz von -``ZendGData\Photos`` zu erstellen. Der Klassen Konstruktor nimmt eine Instanz von ``Zend\Http\Client`` als -einzelnes Argument. Das bietet ein Interface für AuthSub und ClientAuth Authentifizierungen, da beide von Ihnen -die Erstellung eines speziellen authentifizierten *HTTP* Clients benötigen. Wenn keine Argumente angegeben werden, -wird automatisch eine unauthentifizierte Instanz von ``Zend\Http\Client`` erstellt. - -Das folgende Beispiel zeigt wie man eine Service Klasse erstellt und dabei die ClientAuth Authentifizierung -verwendet: - -.. code-block:: php - :linenos: - - // Parameter für die ClientAuth Authentifizierung - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $user = "sample.user@gmail.com"; - $pass = "pa$$w0rd"; - - // Erstellt einen authentifizierten HTTP Client - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - - // Erstellt eine Instanz des Kalender Services - $service = new ZendGData\Photos($client); - -Eine Service Instanz die AuthSub verwendet, kann ähnlich erstellt werden, aber durch eine etwas längere -Schreibweise: - -.. code-block:: php - :linenos: - - session_start(); - - /** - * Gibt die komplette URL der aktuellen Seite zurück, basierend auf den env Variablen - * - * Verwendete Env Variablen: - * $_SERVER['HTTPS'] = (on|off|) - * $_SERVER['HTTP_HOST'] = Wert des Hosts: header - * $_SERVER['SERVER_PORT'] = Port Nummer (nur verwendet wenn nicht http/80,https/443) - * $_SERVER['REQUEST_URI'] = Die URI nach der Methode der HTTP Anfrage - * - * @return string Current URL - */ - function getCurrentUrl() - { - global $_SERVER; - - /** - * php_self filtern um Sicherheits Lücken zu vermeiden. - */ - $php_request_uri = htmlentities(substr($_SERVER['REQUEST_URI'], 0, - strcspn($_SERVER['REQUEST_URI'], "\n\r")), ENT_QUOTES); - - if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') { - $protocol = 'https://'; - } else { - $protocol = 'http://'; - } - $host = $_SERVER['HTTP_HOST']; - if ($_SERVER['SERVER_PORT'] != '' && - (($protocol == 'http://' && $_SERVER['SERVER_PORT'] != '80') || - ($protocol == 'https://' && $_SERVER['SERVER_PORT'] != '443'))) { - $port = ':' . $_SERVER['SERVER_PORT']; - } else { - $port = ''; - } - return $protocol . $host . $port . $php_request_uri; - } - - /** - * Gibt die AuthSub URL zurück welche der Benutzer besuchen muß um Anfrage - * dieser Anwendung zu authentifizieren - * - * Verwendet getCurrentUrl() um die nächste URL zu erhalten zu welcher der - * Benutzer weitergeleitet wird nachdem er - * sich erfolgreich beim Google Service authentifiziert hat. - * - * @return string AuthSub URL - */ - function getAuthSubUrl() - { - $next = getCurrentUrl(); - $scope = 'http://picasaweb.google.com/data'; - $secure = false; - $session = true; - return ZendGData\AuthSub::getAuthSubTokenUri($next, $scope, $secure, - $session); - } - - /** - * Gibt ein HTTP Client Objekt mit den richtigen Headern für die Kommunikation - * with Google zurück wobei - * AuthSub Authentifizierung verwendet wird - * - * Verwendet $_SESSION['sessionToken'] um das AuthSub Session Token zu - * speichern nachdem es erhalten wurde. - * Das einmal verwendbare Token das in der URL bei der Umleitung angeboten wird - * nachdem der Benutzer auf - * Google erfolgreich authentifiziert wurde, wird von der $_GET['token'] - * Variable empfangen. - * - * @return Zend\Http\Client - */ - function getAuthSubHttpClient() - { - global $_SESSION, $_GET; - if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) { - $_SESSION['sessionToken'] = - ZendGData\AuthSub::getAuthSubSessionToken($_GET['token']); - } - $client = ZendGData\AuthSub::getHttpClient($_SESSION['sessionToken']); - return $client; - } - - /** - * Erstellt eine neue Instant des Services und leitet den Benutzer zum AuthSub - * Server um wenn das notwendig ist. - */ - $service = new ZendGData\Photos(getAuthSubHttpClient()); - -Zuletzt kann ein nicht authentifizierter Server für die Verwendung mit öffentlichen Feeds erstellt werden: - -.. code-block:: php - :linenos: - - // Erstellt eine Instanz des Services und verwendet einen nicht authentifizierten HTTP Client - $service = new ZendGData\Photos(); - -.. _zend.gdata.photos.queries: - -Verstehen und Erstellen von Abfragen ------------------------------------- - -Die primäre Methode um Daten vom Service anzufragen ist die Erstellung einer Abfrage. Es gibt Abfrage Klassen für -jede der folgenden Typen: - -- **User** wird verwendet um den Benutzer zu spezifizieren dessen Daten gesucht werden, und wird als EMail Adresse - spezifiziert. Wenn kein Benutzer angegeben wurde, wird stattdessen "default" verwendet um den aktuellen - authentifizierten Benutzer zu bezeichnen (wenn er authentifiziert wurde). - -- **Album** wird verwendet um das Album zu spezifizieren das gesucht werden soll, und wird entweder als ID oder als - Name des Albums spezifiziert. - -- **Photo** wird verwendet um das Photo zu spezifizieren das gesucht werden soll, und wird als ID spezifiziert. - -Eine neue ``UserQuery`` kann wie folgt erstellt werden: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\UserQuery(); - $query->setUser("sample.user"); - -Für jede Abfrage kann eine Anzahl an Parameter, welche die Suche limitieren, abgefragt, oder mit get(Parameter) -und set(Parameter) spezifiziert werden. Diese sind wie folgt: - -- **Projection** setzt das Format der im Feed zurückgegebenen Daten entweder "api" oder "base". Normal wird "api" - gewählt. "api" ist auch der Standardwert. - -- **Type** setzt den Typ der Elemente die zurückgegeben werden, entweder "feed" oder "entry". Der Standardwert ist - "feed". - -- **Access** setzt die Sichtbarkeit von Teilen die zurückgegeben werden, mit "all", "public", oder "private". Der - Standardwert ist "all". Nicht-öffentliche Elemente werden nur zurückgegeben wenn die Abfrage durch - authentifizierte Benutzer gesucht wird. - -- **Tag** setzt einen Tag Filter für zurückgegebenen Teile. Wenn ein Tag gesetzt ist werden nur Teile mit so - einem Tag im Wert zurückgegeben. - -- **Kind** setzt die Art von Elementen die zurückgegeben wird. Wenn eine Art spezifiziert wird, werden nur - Einträge zurückgegeben die auf diesen Wert passen. - -- **ImgMax** setzt das Maximum der Bildgröße für zurückgegebene Einträge. Nur Bildeinträge die kleiner als - dieser Wert sind werden zurückgegeben. - -- **Thumbsize** setzt die Vorschaugröße von Einträgen die zurückgegeben werden. Jeder empfangene Eintrag wird - eine Vorschaugröße haben die diesem Wert entspricht. - -- **User** setzt den Benutzer nach dessen Daten gesucht werden soll. Der Standardwert ist "default". - -- **AlbumId** setzt die ID des Albums nachdem gesucht wird. Dieses Element ist nur für Album und Photo Abfragen - gültig. Im Fall von Photo Abfragen spezifiziert dieser Wert das Album das die angefragten Photos enthält. Die - Album ID schließt sich gegenseitig mit dem Album Namen aus. Das Setzen des einen Entfernt den anderen. - -- **AlbumName** setzt den Namen des Albums nachdem gesucht wird. Dieses Element ist nur für Album und Photo - Abfragen gültig. Im Fall von Photo Abfragen spezifiziert dieser Wert das Album das die angefragten Photos - enthält. Der Album Name schließt sich gegenseitig mit der Album ID aus. Das Setzen des einen Entfernt den - anderen. - -- **PhotoId** setzt die ID des Photos nachdem gesucht wird. Dieses Element ist nur für Photo Abfragen gültig. - -.. _zend.gdata.photos.retrieval: - -Feeds und Einträge erhalten ---------------------------- - -Das Service besitzt Funktionen um einen Feed oder individuelle Einträge für Benutzer, Alben, und individuelle -Photos zu erhalten. - -.. _zend.gdata.photos.user_retrieval: - -Einen Benutzer erhalten -^^^^^^^^^^^^^^^^^^^^^^^ - -Dieser Service unterstützt das Erhalten eines Benutzer Feeds und Listen von Benutzer Inhalten. Wenn der abgefragte -Benutzer auch der authentifizierter Benutzer ist, werden auch Einträge die als "**hidden**" markiert sind, -zurückgegeben. - -Auf den Benutzer Feed kann durch die Übergabe eines Benutzernamens an die ``getUserFeed()`` Methode zugegriffen -werden: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - try { - $userFeed = $service->getUserFeed("sample.user"); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -Oder, der auf den Feed kann zugegriffen werden indem zuerst eine Abfrage erstellt wird: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\UserQuery(); - $query->setUser("sample.user"); - - try { - $userFeed = $service->getUserFeed(null, $query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -Die Erstellung einer Abfrage bietet auch die Möglichkeit ein Benutzer Eintrags Objekt abzufragen: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\UserQuery(); - $query->setUser("sample.user"); - $query->setType("entry"); - - try { - $userEntry = $service->getUserEntry($query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -.. _zend.gdata.photos.album_retrieval: - -Ein Album erhalten -^^^^^^^^^^^^^^^^^^ - -Der Service unterstützt auch das erhalten eines Album Feeds und von Listen des Inhalts von Alben. - -Auf einen Album Feed wird durch die Erstellung eines Abfrage Objekts zugegriffen und dessen Übergabe an -``getAlbumFeed()``: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\AlbumQuery(); - $query->setUser("sample.user"); - $query->setAlbumId("1"); - - try { - $albumFeed = $service->getAlbumFeed($query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -Alternativ kann dem Abfrage Objekt ein Album Name mit ``setAlbumName()`` angegeben werden. Das Setzen des Album -Namens schließt sich gegenseitig mit der Album ID aus und das Setzen des einen entfernt den anderen Wert. - -Die Erstellung einer Abfragen bietet auch die Möglichkeit ein Album Eintrags Objekt abzufragen: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\AlbumQuery(); - $query->setUser("sample.user"); - $query->setAlbumId("1"); - $query->setType("entry"); - - try { - $albumEntry = $service->getAlbumEntry($query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -.. _zend.gdata.photos.photo_retrieval: - -Ein Photo erhalten -^^^^^^^^^^^^^^^^^^ - -Der Service unterstützt auch das erhalten eines Photo Feeds und von Listen von zugeordneten Kommentaren und Tags. - -Auf einen Photo Feed wird durch die Erstellung eines Abfrage Objekts zugegriffen und dessen Übergabe an -``getPhotoFeed()``: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\PhotoQuery(); - $query->setUser("sample.user"); - $query->setAlbumId("1"); - $query->setPhotoId("100"); - - try { - $photoFeed = $service->getPhotoFeed($query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -Die Erstellung einer Abfragen bietet auch die Möglichkeit ein Photo Eintrags Objekt abzufragen: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\PhotoQuery(); - $query->setUser("sample.user"); - $query->setAlbumId("1"); - $query->setPhotoId("100"); - $query->setType("entry"); - - try { - $photoEntry = $service->getPhotoEntry($query); - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -.. _zend.gdata.photos.comment_retrieval: - -Ein Kommentar erhalten -^^^^^^^^^^^^^^^^^^^^^^ - -Der Service unterstützt den Erhalt von Kommentaren von einem Feed eines anderen Typs. Durch das Setzen der Abfrage -das eine Art von "Kommentar" zurückgegeben wird, kann eine Feed Anfrage mit einem speziellen Benutzer, Album oder -Photo assoziierte Kommentare zurückgeben. - -Die Durchführung von Aktionen auf jedem der Kommentare eines gegebenen Photos kann die folgt vollendet werden: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\PhotoQuery(); - $query->setUser("sample.user"); - $query->setAlbumId("1"); - $query->setPhotoId("100"); - $query->setKind("comment"); - - try { - $photoFeed = $service->getPhotoFeed($query); - - foreach ($photoFeed as $entry) { - if ($entry instanceof ZendGData\Photos\CommentEntry) { - // Mach irgendwas mit dem Kommentar - } - } - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -.. _zend.gdata.photos.tag_retrieval: - -Ein Tag erhalten -^^^^^^^^^^^^^^^^ - -Der Service unterstützt den Erhalt von Tags von einem Feed eines anderen Typs. Durch das Setzen der Abfrage das -eine Art von "Tag" zurückgegeben wird, kann eine Feed Anfrage mit einem speziellen Photo assoziierte Tags -zurückgeben. - -Das Ausführen einer Aktrion auf jedem Tag an gegebenen Photos kann wie folgt durchgeführt werden: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $query = new ZendGData\Photos\PhotoQuery(); - $query->setUser("sample.user"); - $query->setAlbumId("1"); - $query->setPhotoId("100"); - $query->setKind("tag"); - - try { - $photoFeed = $service->getPhotoFeed($query); - - foreach ($photoFeed as $entry) { - if ($entry instanceof ZendGData\Photos\TagEntry) { - // Mach irgendwas mit dem Tag - } - } - } catch (ZendGData\App\Exception $e) { - echo "Fehler: " . $e->getMessage(); - } - -.. _zend.gdata.photos.creation: - -Einträge erstellen ------------------- - -Der Service hat Funktionen für die Erstellung von Alben, Photos, Kommentaren und Tags. - -.. _zend.gdata.photos.album_creation: - -Ein Album erstellen -^^^^^^^^^^^^^^^^^^^ - -Der Service unterstützt die Erstellung eines neues Albums für authentifizierte Benutzer: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $entry = new ZendGData\Photos\AlbumEntry(); - $entry->setTitle($service->newTitle("test album")); - - $service->insertAlbumEntry($entry); - -.. _zend.gdata.photos.photo_creation: - -Ein Photo erstellen -^^^^^^^^^^^^^^^^^^^ - -Der Service unterstützt die Erstellung eines neuen Photos für authentifizierte Benutzer: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - // $photo ist der Name der Datei die durch ein HTML Formular hochgeladen wurde - - $fd = $service->newMediaFileSource($photo["tmp_name"]); - $fd->setContentType($photo["type"]); - - $entry = new ZendGData\Photos\PhotoEntry(); - $entry->setMediaSource($fd); - $entry->setTitle($service->newTitle($photo["name"])); - - $albumQuery = new ZendGData\Photos\AlbumQuery; - $albumQuery->setUser("sample.user"); - $albumQuery->setAlbumId("1"); - - $albumEntry = $service->getAlbumEntry($albumQuery); - - $service->insertPhotoEntry($entry, $albumEntry); - -.. _zend.gdata.photos.comment_creation: - -Erstellen eines Kommentars -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Das Service unterstützt die Erstellung von neuen Kommentaren für ein Photo: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $entry = new ZendGData\Photos\CommentEntry(); - $entry->setTitle($service->newTitle("comment")); - $entry->setContent($service->newContent("comment")); - - $photoQuery = new ZendGData\Photos\PhotoQuery; - $photoQuery->setUser("sample.user"); - $photoQuery->setAlbumId("1"); - $photoQuery->setPhotoId("100"); - $photoQuery->setType('entry'); - - $photoEntry = $service->getPhotoEntry($photoQuery); - - $service->insertCommentEntry($entry, $photoEntry); - -.. _zend.gdata.photos.tag_creation: - -Erstellen eines Tags -^^^^^^^^^^^^^^^^^^^^ - -Das Service unterstützt die Erstellung von neuen Tags für ein Photo: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $entry = new ZendGData\Photos\TagEntry(); - $entry->setTitle($service->newTitle("tag")); - - $photoQuery = new ZendGData\Photos\PhotoQuery; - $photoQuery->setUser("sample.user"); - $photoQuery->setAlbumId("1"); - $photoQuery->setPhotoId("100"); - $photoQuery->setType('entry'); - - $photoEntry = $service->getPhotoEntry($photoQuery); - - $service->insertTagEntry($entry, $photoEntry); - -.. _zend.gdata.photos.deletion: - -Einträge löschen ----------------- - -Der Service hat Funktionen um Alben, Photos, Kommentare und Tags zu löschen. - -.. _zend.gdata.photos.album_deletion: - -Ein Album löschen -^^^^^^^^^^^^^^^^^ - -Der Service unterstützt das Löschen von Alben für authentifizierte Benutzer: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $albumQuery = new ZendGData\Photos\AlbumQuery; - $albumQuery->setUser("sample.user"); - $albumQuery->setAlbumId("1"); - $albumQuery->setType('entry'); - - $entry = $service->getAlbumEntry($albumQuery); - - $service->deleteAlbumEntry($entry, true); - -.. _zend.gdata.photos.photo_deletion: - -Löschen eines Photos -^^^^^^^^^^^^^^^^^^^^ - -Der Service unterstützt das Löschen von Photos für authentifizierte Benutzer: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $photoQuery = new ZendGData\Photos\PhotoQuery; - $photoQuery->setUser("sample.user"); - $photoQuery->setAlbumId("1"); - $photoQuery->setPhotoId("100"); - $photoQuery->setType('entry'); - - $entry = $service->getPhotoEntry($photoQuery); - - $service->deletePhotoEntry($entry, true); - -.. _zend.gdata.photos.comment_deletion: - -Ein Kommentar löschen -^^^^^^^^^^^^^^^^^^^^^ - -Der Service unterstützt das Löschen von Kommentaren für authentifizierte Benutzer: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $photoQuery = new ZendGData\Photos\PhotoQuery; - $photoQuery->setUser("sample.user"); - $photoQuery->setAlbumId("1"); - $photoQuery->setPhotoId("100"); - $photoQuery->setType('entry'); - - $path = $photoQuery->getQueryUrl() . '/commentid/' . "1000"; - - $entry = $service->getCommentEntry($path); - - $service->deleteCommentEntry($entry, true); - -.. _zend.gdata.photos.tag_deletion: - -Ein Tag löschen -^^^^^^^^^^^^^^^ - -Das Service unterstützt das Löschen eines Tags für authentifizierte Benutzer: - -.. code-block:: php - :linenos: - - $service = ZendGData\Photos::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $service = new ZendGData\Photos($client); - - $photoQuery = new ZendGData\Photos\PhotoQuery; - $photoQuery->setUser("sample.user"); - $photoQuery->setAlbumId("1"); - $photoQuery->setPhotoId("100"); - $photoQuery->setKind("tag"); - $query = $photoQuery->getQueryUrl(); - - $photoFeed = $service->getPhotoFeed($query); - - foreach ($photoFeed as $entry) { - if ($entry instanceof ZendGData\Photos\TagEntry) { - if ($entry->getContent() == $tagContent) { - $tagEntry = $entry; - } - } - } - - $service->deleteTagEntry($tagEntry, true); - -.. _zend.gdata.photos.optimistic_concurrenty: - -Optimistische Gleichzeitigkeit (Notizen für das Löschen) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -GData Feeds, inklusive denen des Picasa Web Album Services, implementieren optimistische Gleichzeitigkeit, ein -Versionsverwaltungs System das vermeidet das Benutzer irrtümlich Änderungen überschreiben. Wenn ein Eintrag -durch die Service Klasse gelöscht wird, wenn der Eintrag geändert wurde seit er zuletzt geholt wurde, wird eine -Ausnahme geworfen, solange das nicht explizit anders gesetzt wurde (in diesem Fall wird die Löschung auf dem -aktualisierten Eintrag durchgeführt). - -Ein Beispiel davon wie die Versionierung wärend einer Löschung handzuhaben ist wird durch ``deleteAlbumEntry()`` -gezeigt: - -.. code-block:: php - :linenos: - - // $album ist ein albumEntry der gelöscht werden soll - try { - $this->delete($album); - } catch (ZendGData\App\HttpException $e) { - if ($e->getMessage->getStatus() === 409) { - $entry = - new ZendGData\Photos\AlbumEntry($e->getMessage()->getBody()); - $this->delete($entry->getLink('edit')->href); - } else { - throw $e; - } - } - - - -.. _`Picasa Web Alben Daten API Übersicht`: http://code.google.com/apis/picasaweb/overview.html -.. _`Authentifizierungs Übersicht im Google Data API Entwickler Guide`: http://code.google.com/apis/gdata/auth.html diff --git a/docs/languages/de/modules/zend.gdata.spreadsheets.rst b/docs/languages/de/modules/zend.gdata.spreadsheets.rst deleted file mode 100644 index d07c3b342..000000000 --- a/docs/languages/de/modules/zend.gdata.spreadsheets.rst +++ /dev/null @@ -1,316 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.spreadsheets: - -Google Tabellenkalkulation verwenden -==================================== - -Die Google Tabellenkalkulations Daten *API* erlaubt es Client Anwendungen Inhalte von Tabellenkalkulationen zu -sehen und Inhalte von Tabellenkalkulationen in der form von Google Daten *API* Feeds zu aktualisieren. Die eigene -Client Anwendung kann eine Liste von Tabellenkalkulationen eines Benutzer anfragen, Inhalte eines bestehenden -Arbeitsblatts der Tabellenkalkulation bearbeiten oder löschen, und den Inhalt eines bestehenden Arbeitsblatt der -Tabellenkalkulation abfragen. - -Siehe http://code.google.com/apis/spreadsheets/overview.html für weitere Informationen über die Google's -Tabellenkalkulations *API*. - -.. _zend.gdata.spreadsheets.creating: - -Eine Tabellenkalkulation erstellen ----------------------------------- - -Die Tabellenkalkulations Daten *API* bietet aktuell noch keinen Weg um eine Tabellenkalkulation programmtechnisch -zu erstellen oder zu löschen. - -.. _zend.gdata.spreadsheets.listspreadsheets: - -Eine Liste von Tabellenkalkulationen erhalten ---------------------------------------------- - -Man kann eine Liste von Tabellenkalkulationen für einen bestimmten Benutzer erhalten indem die -``getSpreadsheetFeed()`` Methode des Tabellenkalkulationsservices verwendet wird. Der Service wird ein -``ZendGData\Spreadsheets\SpreadsheetFeed`` Objekt zurückgeben das eine Liste von Tabellenkalkulationen enthält -die mit dem authentifizierten Benutzer authentifiziert sind. - -.. code-block:: php - :linenos: - - $service = ZendGData\Spreadsheets::AUTH_SERVICE_NAME; - $client = ZendGData\ClientLogin::getHttpClient($user, $pass, $service); - $spreadsheetService = new ZendGData\Spreadsheets($client); - $feed = $spreadsheetService->getSpreadsheetFeed(); - -.. _zend.gdata.spreadsheets.listworksheets: - -Eine Liste von Arbeitsblättern erhalten ---------------------------------------- - -Eine gegebene Tabellenkalkulation kann mehrere Arbeitsblätter enthalten. Für jedes Arbeitsblass gibt es einen -Arbeitsblatt Metafeed der alle Arbeitsblätter in dieser Tabellenkalkulation auflistet. - -Mit der Schlüssel der Tabellenkalkulation von der des ``ZendGData\Spreadsheets\SpreadsheetEntry`` Objekts -das man bereits empfangen hat, kann mein einen Feed holen der eine Liste von Arbeitsblättern enthält die mit -dieser Tabellenkalkulation assoziiert sind. - -.. code-block:: php - :linenos: - - $query = new ZendGData\Spreadsheets\DocumentQuery(); - $query->setSpreadsheetKey($spreadsheetKey); - $feed = $spreadsheetService->getWorksheetFeed($query); - -Der sich ergebende ``ZendGData\Spreadsheets\WorksheetFeed`` Objektfeed repräsentiert die Antwort des Servers. -Neben anderen Dingen enthält dieser Feed eine Liste von ``ZendGData\Spreadsheets\WorksheetEntry`` Objekten -(``$feed->entries``), wobei jedes ein einzelnes Arbeitsblatt repräsentiert. - -.. _zend.gdata.spreadsheets.listfeeds: - -Mit listen-basierenden Feeds interagieren ------------------------------------------ - -Ein gegebenes Arbeitsblatt enthält generell mehrere Zeilen, wobei jede mehrere Zellen enthält. Man kann Daten vom -Arbeitsblatt entweder als listen-basierenden Feed anfragen, in dem jeder Eintrag eine Zeile repräsentiert, oder -als zellen-basierenden Feed, in dem jeder Eintrag eine einzelne Zelle repräsentiert. Für Informationen über -zellen-basierende Feeds kann auch unter :ref:`Interaktion mit zellen-basierenden Feeds -` nachgesehen werden. - -Die folgenden Sektionen beschreiben wie man einen Listen basierender Feed erhält, eine Zeile zu einem Arbeitsblatt -hinzufügt, und Abfragen mit verschiedenen Abfrage Parametern sendet. - -Der Listenfeed macht einige Annahmen darüber wie die Daten in der Tabellenkalkulation ausgelegt sind. - -Im speziellen, behandelt der Listenfeed die erste Zeile des Arbeitsblattes als Kopfzeile; Tabellenkalkulationen -erstellen dynamisch *XML* Elemente welche nach dem Inhalt der Kopfzeilen-Zellen benannt sind. Benutzer welche Gdata -Feeds anbieten wollen, sollten keine andere Daten als Spaltenheader in der ersten Zeile eines Arbeitsblattes -ablegen. - -Der Listenfeed enthält alle Zeilen nach der ersten Zeile bis zur ersten leeren Zeile. Die erste leere Zeile -terminiert das Datenset. Wenn angenommene Daten nicht in einem Feed erscheinen, muß das Arbeitsblatt manuell -darauf geprüft werden ob eine unerwartete leere Zeile in der Mitte der Daten vorhanden ist. Im speziellen wird der -Listenfeed, wenn die zweite Zeile der Tabellenkalkulation leer ist, keine Daten enthalten. - -Eine Zeile in einem Listenfeed ist soviele Spalten breit wie das Arbeitsblatt selbst. - -.. _zend.gdata.spreadsheets.listfeeds.get: - -Einen listen-basierenden Feed erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um einen Listenfeed eines Arbeitsblattes zu erhalten, kann die ``getListFeed()`` Methode des Tabellenkalkulations -Services verwendet werden. - -.. code-block:: php - :linenos: - - $query = new ZendGData\Spreadsheets\ListQuery(); - $query->setSpreadsheetKey($spreadsheetKey); - $query->setWorksheetId($worksheetId); - $listFeed = $spreadsheetService->getListFeed($query); - -Das sich ergebende ``ZendGData\Spreadsheets\ListFeed`` Objekt ``$listfeed`` repräsentiert eine Antwort vom -Server. Neben anderen Dingen enthält dieser Feed ein Array von ``ZendGData\Spreadsheets\ListEntry`` Objekten -(``$listFeed->entries``), wobei jedes eine einzelne Zeile in einem Arbeitsblatt repräsentiert. - -Jeder ``ZendGData\Spreadsheets\ListEntry`` enthält ein Array, ``custom``, welches die Daten für die Zeile -enthält. Dieses Array kann extrahiert und angezeigt werden: - -.. code-block:: php - :linenos: - - $rowData = $listFeed->entries[1]->getCustom(); - foreach ($rowData as $customEntry) { - echo $customEntry->getColumnName() . " = " . $customEntry->getText(); - } - -Eine alternative Version dieses Arrays, ``customByName``, erlaubt den direkten Zugriff zu dem Eintrag einer Zelle -durch den Namen. Das ist üblich, wenn man versucht auf einen speziellen Header zuzugreifen: - -.. code-block:: php - :linenos: - - $customEntry = $listFeed->entries[1]->getCustomByName('my_heading'); - echo $customEntry->getColumnName() . " = " . $customEntry->getText(); - -.. _zend.gdata.spreadsheets.listfeeds.reverse: - -Umgekehrt-sortierte Zeilen -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Standardmäßig werden die Zeilen im Feed in der gleichen Reihenfolge angezeigt wie in den entsprechenden Zeilen im -GUI; das ist die Reihenfolge anhand der Zeilennummer. Um Zeilen in einer umgekehrten Reihenfolge zu erhalten, muß -die reverse Eigenschaft des ``ZendGData\Spreadsheets\ListQuery`` Objektes auf ``TRUE`` gesetzt werden: - -.. code-block:: php - :linenos: - - $query = new ZendGData\Spreadsheets\ListQuery(); - $query->setSpreadsheetKey($spreadsheetKey); - $query->setWorksheetId($worksheetId); - $query->setReverse('true'); - $listFeed = $spreadsheetService->getListFeed($query); - -Es ist zu beachten, das wenn nach einer speziellen Spalte sortiert (oder umgekehrt sortiert) werden soll, statt -nach der Position im Arbeitsblatt, kann der ``orderby`` Wert des ``ZendGData\Spreadsheets\ListQuery`` Objekts auf -**column:** gesetzt werden. - -.. _zend.gdata.spreadsheets.listfeeds.sq: - -Eine strukturierte Abfrage senden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Der ``sq`` Wert von ``ZendGData\Spreadsheets\ListQuery`` kann gesetzt werden um einen Feed mit Einträgen zu -erzeugen die ein spezielles Kriterium erfüllen. Angenommen, man hat ein Arbeitsblatt das personelle Daten -enthält, in denen jede Zeile Informationen über eine einzelne Person repräsentiert, und man will alle Zeilen -empfangen will in denen der Name der Person "John" ist, und das Alter der Person über 25. Um das tu tun, muß -``sq`` wie folgt gesetzt werden: - -.. code-block:: php - :linenos: - - $query = new ZendGData\Spreadsheets\ListQuery(); - $query->setSpreadsheetKey($spreadsheetKey); - $query->setWorksheetId($worksheetId); - $query->setSpreadsheetQuery('name=John and age>25'); - $listFeed = $spreadsheetService->getListFeed($query); - -.. _zend.gdata.spreadsheets.listfeeds.addrow: - -Hinzufügen einer Zeile -^^^^^^^^^^^^^^^^^^^^^^ - -Zeilen können zu einer Tabellenkalkulation hinzugefügt werden durch Verendung der ``insertRow()`` Methode des -Tabellenkalkulations Services. - -.. code-block:: php - :linenos: - - $insertedListEntry = $spreadsheetService->insertRow($rowData, - $spreadsheetKey, - $worksheetId); - -Der ``$rowData`` Parameter enthält ein Array von Spaltenschlüssel zu Datenwerten. Die Methode gibt ein -``ZendGData\Spreadsheets\SpreadsheetsEntry`` Objekt zurück welches die eingefügte Zeile repräsentiert. - -Die Tabellenkalkulation fügt die neue Zeile unmittelbar nach der letzten Zeile ein die in dem listen-basierenden -Feed erscheint, was bedeutet unmittelbar vor der ersten komplett leeren Zeile. - -.. _zend.gdata.spreadsheets.listfeeds.editrow: - -Eine Zeile bearbeiten -^^^^^^^^^^^^^^^^^^^^^ - -Sobald ein ``ZendGData\Spreadsheets\ListEntry`` Objekt geholt wird, können diese Zeilen durch die Verwendung der -``updateRow()`` Methode des Tabellenkalkulations Services aktualisiert werden. - -.. code-block:: php - :linenos: - - $updatedListEntry = $spreadsheetService->updateRow($oldListEntry, - $newRowData); - -Der ``$oldListEntry`` Parameter enthält den Listeneintrag der aktualisiert werden soll. ``$newRowData`` enthält -ein Array von Spaltenschlüssel zu Datenwerten, die als neue Zeilendaten verwendet werden. Diese Methode gibt ein -``ZendGData\Spreadsheets\SpreadsheetsEntry`` Objekt zurück welches die aktualisierte Zeile repräsentiert. - -.. _zend.gdata.spreadsheets.listfeeds.deleterow: - -Eine Zeile löschen -^^^^^^^^^^^^^^^^^^ - -Um eine Zeile zu löschen muß einfach ``deleteRow()`` auf dem ``ZendGData\Spreadsheets`` Objekt mit dem -bestehenden Eintrag aufgerufen werden, der gelöscht werden soll: - -.. code-block:: php - :linenos: - - $spreadsheetService->deleteRow($listEntry); - -Alternativ kann die ``delete()`` Methode des Eintrags selbst aufgerufen werden: - -.. code-block:: php - :linenos: - - $listEntry->delete(); - -.. _zend.gdata.spreadsheets.cellfeeds: - -Mit zellen-basierenden Feeds interagieren ------------------------------------------ - -In einem zellen-basierenden Feed repräsentiert jeder Eintrag eine einzelne Zelle. - -Es wird nicht empfohlen mit beiden, einem zellen-basierenden Feed und einem listen-basierenden Feed für das -gleiche Arbeitsblatt zur selben Zeit zu interagieren. - -.. _zend.gdata.spreadsheets.cellfeeds.get: - -Einen zellen-basierenden Feed erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um einen Zellen Feed des Arbeitsblatt zu erhalten muß die ``getCellFeed()`` Methode des Tabellenkalkulations -Services verwendet werden. - -.. code-block:: php - :linenos: - - $query = new ZendGData\Spreadsheets\CellQuery(); - $query->setSpreadsheetKey($spreadsheetKey); - $query->setWorksheetId($worksheetId); - $cellFeed = $spreadsheetService->getCellFeed($query); - -Im resultierenden ``ZendGData\Spreadsheets\CellFeed`` Objekt repräsentiert ``$cellFeed`` eine Antwort vom Server. -Neben anderen Dingen enthält dieser Feed ein Array von ``ZendGData\Spreadsheets\CellEntry`` Objekten -(``$cellFeed>entries``), von denen jeder eine einzelne Zelle in einem Arbeitsblatt repräsentiert. Diese -Information kann angezeigt werden: - -.. code-block:: php - :linenos: - - foreach ($cellFeed as $cellEntry) { - $row = $cellEntry->cell->getRow(); - $col = $cellEntry->cell->getColumn(); - $val = $cellEntry->cell->getText(); - echo "$row, $col = $val\n"; - } - -.. _zend.gdata.spreadsheets.cellfeeds.cellrangequery: - -Eine Zellen-Bereichs Abfrage senden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Angenommen man will die Zellen der ersten Spalte des Arbeitsblattes empfangen. Man kann einen Zellen Feed abfragen -der nur diese Spalte enthält und geht hierbei wie folgt vor: - -.. code-block:: php - :linenos: - - $query = new ZendGData\Spreadsheets\CellQuery(); - $query->setMinCol(1); - $query->setMaxCol(1); - $query->setMinRow(2); - $feed = $spreadsheetService->getCellsFeed($query); - -Das fragt alle Daten in der Spalte 1, beginnend mit der Zeile 2, ab. - -.. _zend.gdata.spreadsheets.cellfeeds.updatecell: - -Den Inhalt einer Zelle ändern -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um den Inhalt einer Zelle zu ändern, muß ``updateCell()`` mit der Zeile, Spalte und dem neuen Wert der Zelle, -aufgerufen werden. - -.. code-block:: php - :linenos: - - $updatedCell = $spreadsheetService->updateCell($row, - $col, - $inputValue, - $spreadsheetKey, - $worksheetId); - -Die neuen Daten werden in der spezifizierten Zelle im Arbeitsblatt plaziert. Wenn die spezifizierte Zelle bereits -Daten enthält, werden diese überschrieben. Beachte: ``updateCell()`` muß verwedet werden um Daten in einer Zelle -zu verändern, selbst wenn diese Zelle leer ist. - - - diff --git a/docs/languages/de/modules/zend.gdata.you-tube.rst b/docs/languages/de/modules/zend.gdata.you-tube.rst deleted file mode 100644 index fa67698e1..000000000 --- a/docs/languages/de/modules/zend.gdata.you-tube.rst +++ /dev/null @@ -1,591 +0,0 @@ -.. EN-Revision: none -.. _zend.gdata.youtube: - -Verwenden der YouTube Daten API -=============================== - -Die YouTube Daten *API* bietet einen Lese- und Schreibzugriff auf YouTube Inhalte. Benutzer können nicht -authentifizierte Anfragen zu Google Daten Feeds durchführen um Feeds von populären Videos, Kommentare, -öffentliche Informationen über YouTube Benutzerprofilen, Benutzer PlayListen, Favoriten, Einschreibungen und so -weiter zu erhalten. - -Für weitere Informationen über die YouTube Daten *API* schauen Sie in die offizielle `PHP Entwickler -Dokumentation`_ auf code.google.com. - -.. _zend.gdata.youtube.authentication: - -Authentifizierung ------------------ - -Die YouTube Daten *API* erlaubt aktuell einen nur-lesenden Zugriff auf öffentliche Daten, welcher keine -Authentifizierung benötigt. Für alle schreibenden Anfragen muß sich ein Benutzer entweder mit ClientLogin oder -AuthSub authentifizieren. Schauen Sie bitte in das `Kapitel über Authentifizierung in der PHP Entwickler -Dokumentation`_ für weitere Details. - -.. _zend.gdata.youtube.developer_key: - -Entwickler Schlüssel und Client ID ----------------------------------- - -Ein Entwickler Schlüssel identifiziert den QouTube Entwickler der die *API* Anfrage schickt. Eine Client ID -identifiziert die Anwendung für Logging und Debugging Zwecke. Schauen Sie bitte auf -http://code.google.com/apis/youtube/dashboard/ um einen Entwickler Schlüssel und eine Client ID zu erhalten. -Das angefügte Beispiel demonstriert wie der Entwickler Schlüssel und die Client ID an das `ZendGData\YouTube`_ -Service Pbjekt übergeben werden. - -.. _zend.gdata.youtube.developer_key.example: - -.. rubric:: Einen Entwicklerschlüssel und eine ClientID an ZendGData\YouTube übergeben - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube($httpClient, - $applicationId, - $clientId, - $developerKey); - -.. _zend.gdata.youtube.videos: - -Öffentliche Video Feeds empfangen ---------------------------------- - -Die YouTube Daten *API* bietet eine Vielzahl von Feeds die eine Liste von Videos zurückgeben, wie zum Beispiel -Standard Feeds, Abhängige Videos, Antworten auf Videos, Videobewertungen, Benutzer Uploads, und Benutzer -Favoriten. Zum Beispiel gibt der Benutzer Upload Feed alle Videos zurück die von einem speziellen Benutzer -hochgeladen wurden. Sehen Sie in den `You Tube API Referenz Guide`_ für eine detailierte Liste aller vorhandenen -Feeds. - -.. _zend.gdata.youtube.videos.searching: - -Suchen nach Videos durch Metadaten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann eine Liste von Videos erhalten die einem speziellen Suchkriterium entsprechen, indem die YouTubeQuery -Klasse verwendet wird. Die folgende Abfrage schaut nach Videos welche das Wort "Katze" in Ihren Metadaten -enthalten, beginnend mit dem 10ten Video und 20 Videos pro Seite anzeigt, sortiert nach der Anzahl der Ansichten. - -.. _zend.gdata.youtube.videos.searching.example: - -.. rubric:: Suchen nach Videos - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $query = $yt->newVideoQuery(); - $query->videoQuery = 'cat'; - $query->startIndex = 10; - $query->maxResults = 20; - $query->orderBy = 'viewCount'; - - echo $query->queryUrl . "\n"; - $videoFeed = $yt->getVideoFeed($query); - - foreach ($videoFeed as $videoEntry) { - echo "---------VIDEO----------\n"; - echo "Titel: " . $videoEntry->mediaGroup->title->text . "\n"; - echo "\nBeschreibung:\n"; - echo $videoEntry->mediaGroup->description->text; - echo "\n\n\n"; - } - -Für weitere Details über die verschiedenen Abfrageparameter, kann der `Referenz Guide`_ hilfreich sein. Die -vorhandenen Hilfsfunktionen in `ZendGData\YouTube\VideoQuery`_ für jeden dieser Parameter werden im `PHP -Entwickler Guide`_ detailierter beschrieben. - -.. _zend.gdata.youtube.videos.searchingcategories: - -Suchen nach Videos durch Kategorien und Tags/Schlüsselwörter -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Suche nach Videos in speziellen Kategorien wird durch die Erstellung einer `speziell formatierten URL`_ -durchgeführt. Um, zum Beispiel, nach Komödien-Videos zu suchen die das Schlüsselwort Hund enthalten: - -.. _zend.gdata.youtube.videos.searchingcategories.example: - -.. rubric:: Suchen nach Videos in speziellen Kategorien - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $query = $yt->newVideoQuery(); - $query->category = 'Comedy/Hund'; - - echo $query->queryUrl . "\n"; - $videoFeed = $yt->getVideoFeed($query); - -.. _zend.gdata.youtube.videos.standard: - -Standard Feeds empfangen -^^^^^^^^^^^^^^^^^^^^^^^^ - -Die YouTube Daten *API* hat eine Anzahl an `Standard Feeds`_. Diese Standard Feeds können als -`ZendGData\YouTube\VideoFeed`_ Objekte empfangen werden indem die spezifizierten *URL*\ s und die in der -`ZendGData\YouTube`_ Klasse vordefinierten Konstanten (zum Beispiel ZendGData\YouTube::STANDARD_TOP_RATED_URI) -oder die vordefinierten Hilfsmethoden verwendet verwendet werden (siehe das Codebeispiel anbei). - -Um die Top gereihten Videos zu erhalten kann die folgende Helfermethode verwendet werden: - -.. _zend.gdata.youtube.videos.standard.example-1: - -.. rubric:: Empfangen eines Standard Videofeeds - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $videoFeed = $yt->getTopRatedVideoFeed(); - -Es gibt auch Abfrageparameter um eine Zeitperiode zu spezifizieren über die der Standardfeed berechnet wird. - -Um zum Beispiel die Top gereihten Videos von Heute zu erhalten: - -.. _zend.gdata.youtube.videos.standard.example-2: - -.. rubric:: Verwenden von ZendGData\YouTube\VideoQuery um Videos zu empfangen - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $query = $yt->newVideoQuery(); - $query->setTime('today'); - $videoFeed = $yt->getTopRatedVideoFeed($query); - -Alternativ kann man den Feed erhalten indem die *URL* verwendet wird: - -.. _zend.gdata.youtube.videos.standard.example-3: - -.. rubric:: Empfangen eines Video Feeds durch die URL - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $url = 'http://gdata.youtube.com/feeds/standardfeeds/top_rated?time=today' - $videoFeed = $yt->getVideoFeed($url); - -.. _zend.gdata.youtube.videos.user: - -Videos erhalten die von einem Benutzer hochgeladen wurden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann eine Liste von Videos erhalten die von einem bestimmten Benutzer hochgeladen wurden indem eine einfache -Helfermethode verwendet wird. Dieses Beispiel empfängt Videos die vom Benutzer 'liz' hochgeladen wurden. - -.. _zend.gdata.youtube.videos.user.example: - -.. rubric:: Empfangen von Videos die von einem spezifischen Benutzer hochgeladen wurden - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $videoFeed = $yt->getUserUploads('liz'); - -.. _zend.gdata.youtube.videos.favorites: - -Videos empfangen die von einem Benutzer bevorzugt werden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann eine Liste von bevorzugten Videos eines Benutzer erhalten indem eine einfache Helfermethode verwendet -wird. Dieses Beispiel empfängt Videos die vom Benutzer 'liz' bevorzugt werden. - -.. _zend.gdata.youtube.videos.favorites.example: - -.. rubric:: Empfangen von den bevorzugten Videos eines Benutzers - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $videoFeed = $yt->getUserFavorites('liz'); - -.. _zend.gdata.youtube.videos.responses: - -Videobewertungen für ein Video erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Man kann eine Liste von Videobewertungen eines Videos erhalten indem eine einfache Helfermethode verwendet wird. -Dieses Beispiel empfängt Videobewertungen für ein Video mit der ID 'abc123813abc'. - -.. _zend.gdata.youtube.videos.responses.example: - -.. rubric:: Empfangen eines Feeds von Video Antworten - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $videoFeed = $yt->getVideoResponseFeed('abc123813abc'); - -.. _zend.gdata.youtube.comments: - -Videokommentare erhalten ------------------------- - -Die Kommentare für jedes YouTube Video können auf unterschiedlichen Wegen empfangen werden. Um die Kommentare -für das Video mit der ID 'abc123813abc' zu empfangen kann der folgende Code verwendet werden: - -.. _zend.gdata.youtube.videos.comments.example-1: - -.. rubric:: Empfangen eines Feeds von Videokommentaren von einer Video ID - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $commentFeed = $yt->getVideoCommentFeed('abc123813abc'); - - foreach ($commentFeed as $commentEntry) { - echo $commentEntry->title->text . "\n"; - echo $commentEntry->content->text . "\n\n\n"; - } - -Kommentare können für ein Video auch empfangen werden wenn man eine Kopie des `ZendGData\YouTube\VideoEntry`_ -Objektes hat: - -.. _zend.gdata.youtube.videos.comments.example-2: - -.. rubric:: Empfangen eines Feeds von Videokommentaren von einem ZendGData\YouTube\VideoEntry - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $videoEntry = $yt->getVideoEntry('abc123813abc'); - // Die ID des Videos in diesem Beispiel ist unbekannt, aber wir haben die URL - $commentFeed = $yt->getVideoCommentFeed(null, - $videoEntry->comments->href); - -.. _zend.gdata.youtube.playlists: - -PlayList Feeds erhalten ------------------------ - -Die YouTube Daten *API* bietet Informationen über Benutzer, inklusive Profile, PlayListen, Einschreibungen, und -weitere. - -.. _zend.gdata.youtube.playlists.user: - -Die PlayListen eines Benutzer erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Bibliothek bietet eine Helfermethode um die PlayListen, die einem angegebenen Benutzer zugeordnet sind, zu -erhalten. Um die PlayListen des Benutzers 'liz' zu erhalten kann der folgende Code verwendet werden: - -.. _zend.gdata.youtube.playlists.user.example: - -.. rubric:: Empfangen von Playlisten eines Benutzers - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $playlistListFeed = $yt->getPlaylistListFeed('liz'); - - foreach ($playlistListFeed as $playlistEntry) { - echo $playlistEntry->title->text . "\n"; - echo $playlistEntry->description->text . "\n"; - echo $playlistEntry->getPlaylistVideoFeedUrl() . "\n\n\n"; - } - -.. _zend.gdata.youtube.playlists.special: - -Eine spezielle PlayListe erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Bibliothek bietet eine Helfermethode um Videos zu erhalten die mit einer gegebenen PlayListe assoziiert sind. -Um die PlayListe für einen speziellen PlayList Eintrag zu erhalten kann der folgende Code verwendet werden: - -.. _zend.gdata.youtube.playlists.special.example: - -.. rubric:: Empfangen von speziellen Playlisten - -.. code-block:: php - :linenos: - - $feedUrl = $playlistEntry->getPlaylistVideoFeedUrl(); - $playlistVideoFeed = $yt->getPlaylistVideoFeed($feedUrl); - -.. _zend.gdata.youtube.subscriptions: - -Eine Liste von Einschreibungen eines Benutzers erhalten -------------------------------------------------------- - -Ein Benutzer kann verschiedene Arten von Einschreibungen besitzen: Kanal Einschreibungen, Tag Einschreibungen, oder -Favoriten Einschreibungen. Ein `ZendGData\YouTube\SubscriptionEntry`_ wird verwendet um individuelle -Einschreibungen zu repräsentieren. - -Um alle Einschreibungen für den Benutzer 'liz' zu erhalten kann der folgende Code verwendet werden: - -.. _zend.gdata.youtube.subscriptions.example: - -.. rubric:: Empfangen aller Einschreibungen eines Benutzers - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $subscriptionFeed = $yt->getSubscriptionFeed('liz'); - - foreach ($subscriptionFeed as $subscriptionEntry) { - echo $subscriptionEntry->title->text . "\n"; - } - -.. _zend.gdata.youtube.profile: - -Ein Benutzerprofil erhalten ---------------------------- - -Die öffentlichen Profil Informationen kann man für jeden YouTube Benutzer erhalten. Um das Profil für den -Benutzer 'liz' zu erhalten kann der folgende Code verwendet werden: - -.. _zend.gdata.youtube.profile.example: - -.. rubric:: Empfangen des Profils eines Benutzers - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube(); - $userProfile = $yt->getUserProfile('liz'); - echo "Benutzername: " . $userProfile->username->text . "\n"; - echo "Alter: " . $userProfile->age->text . "\n"; - echo "Heimatstadt: " . $userProfile->hometown->text . "\n"; - -.. _zend.gdata.youtube.uploads: - -Videos auf YouTube hochladen ----------------------------- - -Stellen Sie sicher das Sie die Diagramme im `Protokoll Guide`_ auf code.google.com für eine Übersicht des Upload -Prozesses betrachtet haben. Das Hochladen von Videos kann auf 2 Wegen durchgeführt werden: Entweder durch das -direkte Hochladen des Videos oder durch das Senden der Video Meta-Daten und indem der Benutzer das Video über ein -*HTML* Formular hochlädt. - -Um ein Video direkt hochzuladen, muß zuerst ein neues `ZendGData\YouTube\VideoEntry`_ Objekt erstellt und einige -benötigte Meta-Daten spezifiziert werden. Das folgende Beispiel zeigt das Hochladen des Quicktime Videos -"mytestmovie.mov" auf YouTube mit den folgenden Eigenschaften: - -.. _zend.gdata.youtube.uploads.metadata: - -.. table:: Metadaten die im folgenden Code-Beispiel verwendet werden - - +--------------+-----------------------------------+ - |Eigenschaft |Wert | - +==============+===================================+ - |Title |My Test Movie | - +--------------+-----------------------------------+ - |Category |Autos | - +--------------+-----------------------------------+ - |Keywords |cars, funny | - +--------------+-----------------------------------+ - |Description |My description | - +--------------+-----------------------------------+ - |Filename |mytestmovie.mov | - +--------------+-----------------------------------+ - |File MIME type|video/quicktime | - +--------------+-----------------------------------+ - |Video private?|FALSE | - +--------------+-----------------------------------+ - |Video location|37, -122 (lat, long) | - +--------------+-----------------------------------+ - |Developer Tags|mydevelopertag, anotherdevelopertag| - +--------------+-----------------------------------+ - -Der folgende Code erzeugt einen leeren `ZendGData\YouTube\VideoEntry`_ der Hochgeladen werden kann. Ein -`ZendGData\App\MediaFileSource`_ wird dann verwendet um die aktuelle Video Datei zu speichern. Unter der Hand wird -ein `ZendGData\YouTube\Extension\MediaGroup`_ Objekt verwendet um alle Metadaten des Videos zu speichern. Die -anbei beschriebenen Helfermethoden erlauben es die Metadaten des Videos zu setzen ohne das man sich um das Medien -Gruppen Objekt kümmern muß. $uploadUrl ist der Ort an den der neue Eintrag gepostet wird. Er kann entweder durch -$userName des aktuell authentifizierten Benutzers spezifiziert werden, oder, alternativ indem einfach der String -'default' verwendet wird um auf den aktuell authentifizierten Benutzer zu verweisen. - -.. _zend.gdata.youtube.uploads.example: - -.. rubric:: Ein Video hochladen - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube($httpClient); - $myVideoEntry = new ZendGData\YouTube\VideoEntry(); - - $filesource = $yt->newMediaFileSource('mytestmovie.mov'); - $filesource->setContentType('video/quicktime'); - $filesource->setSlug('mytestmovie.mov'); - - $myVideoEntry->setMediaSource($filesource); - - $myVideoEntry->setVideoTitle('My Test Movie'); - $myVideoEntry->setVideoDescription('My Test Movie'); - // Beachte das category eine gültige YouTube Kategorie sein muß ! - $myVideoEntry->setVideoCategory('Comedy'); - - // Setzt Keywords, beachte das es ein Komma getrennter String ist - // und das keines der Schlüsselwörter ein Leerzeichen enthalten darf - $myVideoEntry->SetVideoTags('cars, funny'); - - // Optional Entwickler Tags setzen - $myVideoEntry->setVideoDeveloperTags(array('mydevelopertag', - 'anotherdevelopertag')); - - // Optional den Ort des Videos setzen - $yt->registerPackage('ZendGData\Geo'); - $yt->registerPackage('ZendGData\Geo\Extension'); - $where = $yt->newGeoRssWhere(); - $position = $yt->newGmlPos('37.0 -122.0'); - $where->point = $yt->newGmlPoint($position); - $myVideoEntry->setWhere($where); - - // URI hochladen für den aktuell authentifizierten Benutzer - $uploadUrl = - 'http://uploads.gdata.youtube.com/feeds/users/default/uploads'; - - // Versuch das Video hochzuladen, eine ZendGData\App\HttpException fangen wenn - // Sie vorhanden ist oder nur eine reguläre ZendGData\App\Exception - - try { - $newEntry = $yt->insertEntry($myVideoEntry, - $uploadUrl, - 'ZendGData\YouTube\VideoEntry'); - } catch (ZendGData\App\HttpException $httpException) { - echo $httpException->getRawResponseBody(); - } catch (ZendGData\App\Exception $e) { - echo $e->getMessage(); - } - -Um ein Video als privat hochzuladen muß einfach $myVideoEntry->setVideoPrivate(); verwendet werden; bevor das -Hochladen durchgeführt wird. $videoEntry->isVideoPrivate() kann verwendet werden um zu prüfen ob ein Video -Eintrag privat ist oder nicht. - -.. _zend.gdata.youtube.uploads.browser: - -Browser-basierender Upload --------------------------- - -Browser-basierendes hochladen wird fast auf die gleiche Weise durchgeführt wie direktes Hochladen, ausser das man -kein `ZendGData\App\MediaFileSource`_ Objekt an den `ZendGData\YouTube\VideoEntry`_ anhängt den man erstellt. -Stattdessen überträgt man einfach alle Metadaten des Videos um ein Token Element zurück zu erhalten welches -verwendet werden kann um ein *HTML* Upload Formular zu erstellen. - -.. _zend.gdata.youtube.uploads.browser.example-1: - -.. rubric:: Browser-basierender Upload - -.. code-block:: php - :linenos: - - $yt = new ZendGData\YouTube($httpClient); - - $myVideoEntry= new ZendGData\YouTube\VideoEntry(); - $myVideoEntry->setVideoTitle('My Test Movie'); - $myVideoEntry->setVideoDescription('My Test Movie'); - - // Beachte das die Kategorie eine gültige YouTube Kategorie sein muß ! - $myVideoEntry->setVideoCategory('Comedy'); - $myVideoEntry->SetVideoTags('cars, funny'); - - $tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken'; - $tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl); - $tokenValue = $tokenArray['token']; - $postUrl = $tokenArray['url']; - -Der obige Code gibt einen Link und ein Token aus das verwendet wird um ein *HTML* Formular zu erstellen und im -Browser des Benutzers anzuzeigen. Ein einfaches Beispielformular wird unten gezeigt mit $tokenValue welches den -Inhalt des zurückgegebenen Token Elements darstellt, welches wie gezeigt, oben von $myVideoEntry empfangen wird. -Damit der Benutzer, nachdem das Formular übermittelt wurde, auf die Website umgeleitet wird, muß ein $nextUrl -Parameter an die $postUrl von oben angehängt werden, was auf die gleiche Weise funktioniert wie der $next -Parameter eines AuthSub Links. Der einzige Unterschied ist hier das, statt eines einmal zu verwendenden Tokens, ein -Status und eine ID Variable in der *URL* zurückgegeben werden. - -.. _zend.gdata.youtube.uploads.browser.example-2: - -.. rubric:: Browser-basierender Upload: Erstellen des HTML Formulars - -.. code-block:: php - :linenos: - - // Platzieren um den Benutzer nach dem Upload umzuleiten - $nextUrl = 'http://mysite.com/youtube_uploads'; - - $form = ''. - ''. - ''. - ''. - ''; - -.. _zend.gdata.youtube.uploads.status: - -Den Upload Status prüfen ------------------------- - -Nachdem ein Video hochgeladen wurde, wird es im Upload Feed des authentifizierten Benutzer unmittelbar sichtbar -sein. Trotzdem wird es auf der Site nicht öffentlich sein solange es nicht bearbeitet wurde. Videos die -ausgeschlossen oder nicht erfolgreich hochgeladen wurden werden auch nur im Upload Feed des authentifizierten -Benutzers sichtbar sein. Der folgende Code prüft den Status eines `ZendGData\YouTube\VideoEntry`_ um zu sehen ob -er jetzt noch nicht live ist oder ob er nicht akzeptiert wurde. - -.. _zend.gdata.youtube.uploads.status.example: - -.. rubric:: Den Status von Video Uploads checken - -.. code-block:: php - :linenos: - - try { - $control = $videoEntry->getControl(); - } catch (ZendGData\App\Exception $e) { - echo $e->getMessage(); - } - - if ($control instanceof ZendGData\App\Extension\Control) { - if ($control->getDraft() != null && - $control->getDraft()->getText() == 'yes') { - $state = $videoEntry->getVideoState(); - - if ($state instanceof ZendGData\YouTube\Extension\State) { - print 'Upload Status: ' - . $state->getName() - .' '. $state->getText(); - } else { - print 'Die Status Informationen des Videos konnten bis jetzt nicht' - . ' empfangen werden. Bitte versuchen Sie es etwas später' - . ' nochmals.\n"; - } - } - } - -.. _zend.gdata.youtube.other: - -Andere Funktionen ------------------ - -Zusätzlich zur oben beschriebenen Funktionalität, enthält die YouTube *API* viele andere Funktionen die es -erlauben Video Metadaten zu verändern, Video Einträge zu löschen und den kompletten Bereich an Community -Features der Site zu verwenden. Einige der Community Features die durch die *API* verändert werden können -enthalten: Ratings, Kommentare, Playlisten, Einschreibungen, Benutzer Profile, Kontakte und Nachrichten. - -Bitte schauen Sie in die komplette Dokumentation die im `PHP Entwickler Guide`_ auf code.google.com zu finden ist. - - - -.. _`PHP Entwickler Dokumentation`: http://code.google.com/apis/youtube/developers_guide_php.html -.. _`Kapitel über Authentifizierung in der PHP Entwickler Dokumentation`: http://code.google.com/apis/youtube/developers_guide_php.html#Authentication -.. _`ZendGData\YouTube`: http://framework.zend.com/apidoc/core/ZendGData/ZendGData\YouTube.html -.. _`You Tube API Referenz Guide`: http://code.google.com/apis/youtube/reference.html#Video_Feeds -.. _`Referenz Guide`: http://code.google.com/apis/youtube/reference.html#Searching_for_videos -.. _`ZendGData\YouTube\VideoQuery`: http://framework.zend.com/apidoc/core/ZendGData/ZendGData\YouTube\VideoQuery.html -.. _`PHP Entwickler Guide`: http://code.google.com/apis/youtube/developers_guide_php.html -.. _`speziell formatierten URL`: http://code.google.com/apis/youtube/reference.html#Category_Search -.. _`Standard Feeds`: http://code.google.com/apis/youtube/reference.html#Standard_feeds -.. _`ZendGData\YouTube\VideoFeed`: http://framework.zend.com/apidoc/core/ZendGData/ZendGData\YouTube\VideoFeed.html -.. _`ZendGData\YouTube\VideoEntry`: http://framework.zend.com/apidoc/core/ZendGData/ZendGData\YouTube\VideoEntry.html -.. _`ZendGData\YouTube\SubscriptionEntry`: http://framework.zend.com/apidoc/core/ZendGData/ZendGData\YouTube\SubscriptionEntry.html -.. _`Protokoll Guide`: http://code.google.com/apis/youtube/developers_guide_protocol.html#Process_Flows_for_Uploading_Videos -.. _`ZendGData\App\MediaFileSource`: http://framework.zend.com/apidoc/core/ZendGData/ZendGData\App\MediaFileSource.html -.. _`ZendGData\YouTube\Extension\MediaGroup`: http://framework.zend.com/apidoc/core/ZendGData/ZendGData\YouTube\Extension\MediaGroup.html diff --git a/docs/languages/de/modules/zend.http.client.adapters.rst b/docs/languages/de/modules/zend.http.client.adapters.rst deleted file mode 100644 index 37c9151bd..000000000 --- a/docs/languages/de/modules/zend.http.client.adapters.rst +++ /dev/null @@ -1,576 +0,0 @@ -.. EN-Revision: none -.. _zend.http.client.adapters: - -Zend\Http\Client - Verbindungsadapter -===================================== - -.. _zend.http.client.adapters.overview: - -Verbindungsadapter ------------------- - -``Zend\Http\Client`` basiert auf einem Design mit Verbindungsadaptern. Der Verbindungsadapter ist das Objekt, -welches für die Ausführung der aktuellen Verbindung zum Server sowie für das Schreiben der Anfragen und Lesen -von Antworten verantwortlich ist. Dieser Verbindungsadapter kann ersetzt werden und man kann den Standard -Verbindungsadapter durch seinen eigenen Adapter erweitern, um ihn mit dem selben Interface auf seine eigenen -Bedürfnisse anzupassen, ohne dass man die gesamte *HTTP* Client Klasse erweitern oder ersetzen muss. - -Derzeit stellt die ``Zend\Http\Client`` Klasse vier eingebaute Verbindungsadapter bereit: - - - - - ``Zend\Http\Client\Adapter\Socket`` (Standard) - - - ``Zend\Http\Client\Adapter\Proxy`` - - - ``Zend\Http\Client\Adapter\Curl`` - - - ``Zend\Http\Client\Adapter\Test`` - - - -Der Verbindungsadapter für das ``Zend\Http\Client`` Objekt wird durch Verwendung der 'adapter' -Konfigurationsoption gesetzt. Beim Instanzieren des Client Objektes kann man die 'adapter' Konfigurationsoption -setzen mit einem String, der den Adapternamen (z.B. 'Zend\Http\Client\Adapter\Socket') enthält, oder mit eine -Variable, die ein Adapterobjekt (z.B. ``new Zend\Http\Client\Adapter\Test``) enthält. Man kann den Adapter auch -danach setzen, indem man die ``Zend\Http\Client->setConfig()`` Methode verwendet. - -.. _zend.http.client.adapters.socket: - -Der Socket Adapter ------------------- - -Der Standard-Adapter ist ``Zend\Http\Client\Adapter\Socket``. Dieser wird benutzt, wenn kein anderer angegeben -wird. Der Socket Adapter benutzt die native *PHP* Funktion fsockopen(), um die Verbindung aufzubauen, dafür werden -keine besonderen Extensions oder Einstellungen benötigt. - -Der Socket Adapter erlaubt verschiedene zusätzliche Konfigurations Optionen die gesetzt werden können durch -Verwendung von ``Zend\Http\Client->setConfig()`` oder deren Übergabe an den Konstruktor des Clients. - - - - .. _zend.http.client.adapter.socket.configuration.table: - - .. table:: Zend\Http\Client\Adapter\Socket Konfigurations Parameter - - +-------------+---------------------------------------------------------------------------------------------------+--------------+------------+ - |Parameter |Beschreibung |Erwarteter Typ|Standardwert| - +=============+===================================================================================================+==============+============+ - |persistent |Ob eine persistente TCP Verbindung verwendet werden soll oder nicht |boolean |FALSE | - +-------------+---------------------------------------------------------------------------------------------------+--------------+------------+ - |ssltransport |Der Transport Layer für SSL (z.B. 'sslv2', 'tls') |string |ssl | - +-------------+---------------------------------------------------------------------------------------------------+--------------+------------+ - |sslcert |Pfad zu einem PEM verschlüsselten SSL Zertifikat |string |NULL | - +-------------+---------------------------------------------------------------------------------------------------+--------------+------------+ - |sslpassphrase|Die PassPhrase für die SSL zertifizierte Datei |string |NULL | - +-------------+---------------------------------------------------------------------------------------------------+--------------+------------+ - |sslusecontext|Aktiviert das Proxy Verbindungen SSL verwenden sogar wenn die Proxy Verbindung selbst es nicht tut.|boolean |FALSE | - +-------------+---------------------------------------------------------------------------------------------------+--------------+------------+ - - - - .. note:: - - **Persistente TCP Verbindungen** - - Die Verwendung persistenter *TCP* Verbindungen kann *HTTP* Anfragen potentiell schneller machen - aber in den - meisten Fällen, wird es nur einen kleinen positiven Effekt haben und könnte den *HTTP* Server überladen zu - dem man sich verbindet. - - Es wird empfohlen persistente *TCP* Verbindungen nur dann zu verwenden wenn man sich zu dem gleichen Server - sehr oft verbindet, und man sicher ist das der Server eine große Anzahl an gleichzeitigen Verbindungen - behandeln kann. In jedem Fall wird empfohlen das der Effekt von persistenten Verbindungen auf beiden, der - Geschwindigkeit des Clients und dem Serverload gemessen wird bevor diese Option verwendet wird. - - Zusätzlich, wenn persistente Verbindungen verwendet werden, sollte man Keep-Alive *HTTP* Anfragen aktivieren - wie im :ref:`Abschnitt für Konfiguration ` beschrieben - andernfalls werden - persistente Verbindungen nur wenig oder gar keinen Effekt haben. - - - - .. note:: - - **HTTPS SSL Stream Parameter** - - ``ssltransport``, ``sslcert`` und ``sslpassphrase`` sind nur relevant wenn *HTTPS* für die Verbindung - verwendet wird. - - Wärend die Standard *SSL* Einstellungen für die meisten Anwendungen funktionieren, kann es notwendig sein - diese zu Ändern wenn der Server zu dem man sich verbindet ein spezielles Client Setup benötigt. Wenn dem so - ist, sollte man das Kapitel über *SSL* Transport Layer und Optionen lesen das `hier`_ zu finden ist. - - - -.. _zend.http.client.adapters.socket.example-1: - -.. rubric:: Den Stream-Typen für eine HTTPS Verbindung einstellen - -.. code-block:: php - :linenos: - - // Konfigurationsparameter setzen - $config = array( - 'adapter' => 'Zend\Http\Client\Adapter\Socket', - 'ssltransport' => 'tls' - ); - - // Client-Instanz erzeugen - $client = new Zend\Http\Client('https://www.example.com', $config); - - // Jetzt wird der Request über eine verschlüsselte Verbindung verschickt - $response = $client->request(); - -Ein ähnliches Ergebnis erzielt man mit folgendem Code: - -``fsockopen('tls://www.example.com', 443)`` - -.. _zend.http.client.adapters.socket.streamcontext: - -Anpassen und Zugreifen auf den Socket Adapter Stream Kontext -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Beginnend mit Zend Framework 1.9 bietet ``Zend\Http\Client\Adapter\Socket`` direkten Zugriff auf den -darunterliegenden `Stream Kontext`_ der für die Verbindung zum entfernten Server verwendet wird. Das erlaubt es -Benutzern spezielle Optionen und Parameter an den *TCP* Stream zu übergeben und an den *SSL* Wrapper im Falle -einer *HTTPS* Verbindung. - -Man kann auf den Stream Kontext zugreifen indem die folgenden Methoden von ``Zend\Http\Client\Adapter\Socket`` -verwendet werden: - - - - - **setStreamContext($context)** Setzt den Stream Kontext der vom Adapter verwendet werden soll. Akzeptiert - entweder eine Stream Kontext Ressource von durch die Verwendung der *PHP* Funktion `stream_context_create()`_ - erstellt wurde, oder ein Array von Stream Kontext Optionen im gleichen Format wie es an diese Funktion - übergeben wird. Wenn ein Array übergeben wird, dann wird ein neuer Stream Kontext mit Hilfe dieser Optionen - erstellt, und gesetzt. - - - **getStreamContext()** Empfängt den Stream Kontext des Adapters. Wenn kein Stream Kontext gesetzt ist, wird - ein standardmäßiger Stream Kontext erstellt und zurückgegeben. Man kann anschließend den Wert - verschiedener Kontext Optionen setzen oder empfangen indem die regulären *PHP* Stream Kontext Funktionen - verwendet werden. - - - -.. _zend.http.client.adapters.socket.streamcontext.example-1: - -.. rubric:: Setzen von Stream Kontext Optionen für den Socket Adapter - -.. code-block:: php - :linenos: - - // Array von Optionen - $options = array( - 'socket' => array( - // Bindet die lokale Socket Seite an ein spezifisches Interface - 'bindto' => '10.1.2.3:50505' - ), - 'ssl' => array( - // Prüft das Server Side Zertifikat, akzeptiert keine - // ungültigen oder selbst-signierten SSL Zertifikate - 'verify_peer' => true, - 'allow_self_signed' => false, - - // Holt das Peer Zertifikat - 'capture_peer_cert' => true - ) - ); - - // Erstellt ein Adapter Objekt und hängt es an den HTTP Client - $adapter = new Zend\Http\Client\Adapter\Socket(); - $client = new Zend\Http\Client(); - $client->setAdapter($adapter); - - // Methode 1: Ein Options Array an setStreamContext() übergeben - $adapter->setStreamContext($options); - - // Methode 2: Einen Stream Kontext erstellen und an setStreamContext() übergeben - $context = stream_context_create($options); - $adapter->setStreamContext($context); - - // Methode 3: Den Standardmäßigen Stream Kontext holen und Optionen auf Ihm setzen - $context = $adapter->getStreamContext(); - stream_context_set_option($context, $options); - - // Jetzt die Anfrage durchführen - $response = $client->request(); - - // Wenn alles gut ging, kann auf den Kontext jetzt zugegriffen werden - $opts = stream_context_get_options($adapter->getStreamContext()); - echo $opts['ssl']['peer_certificate']; - -.. note:: - - Es ist zu beachten das alle Stream Kontext Optionen gesetzt sein müssen bevor der Adapter Anfragen durchführt. - Wenn kein Kontext gesetzt ist bevor *HTTP* Anfragen mit dem Socket Adapter durchgeführt werden, wird ein - standardmäßiger Stream Kontext erstellt. Auf diese Kontext Ressource kann zugegriffen werden nachdem Anfragen - durchgeführt werden indem die ``getStreamContext()`` Methode verwendet wird. - -.. _zend.http.client.adapters.proxy: - -Der Proxy Adapter ------------------ - -Der Proxy Adapter ``Zend\Http\Client\Adapter\Proxy`` verhält sich wie der standard -``Zend\Http\Client\Adapter\Socket``, mit dem Unterschied, dass die Verbindung über einen *HTTP* Proxy-Server -aufgebaut wird statt den Server direkt zu kontaktieren. Das erlaubt die Verwendung von ``Zend\Http\Client`` hinter -Proxy Servern - was manchmal wegen der Sicherheit und Geschwindigkeit notwendig ist. - -Der Proxy Adapter benötigt zusätzliche Konfigurationsvariablen, die nachfolgend gelistet sind. - - - - .. _zend.http.client.adapters.proxy.table: - - .. table:: Zend\Http\Client Konfigurationsparameter - - +----------+----------------------------------------------+--------+-------------------------------------------------+ - |Parameter |Beschreibung |Datentyp|Beispielwert | - +==========+==============================================+========+=================================================+ - |proxy_host|Proxy Server Adresse |string |zum Beispiel 'proxy.myhost.com' oder '10.1.2.3' | - +----------+----------------------------------------------+--------+-------------------------------------------------+ - |proxy_port|TCP Port des Proxy-Servers |integer |8080 (Standardwert) oder 81 | - +----------+----------------------------------------------+--------+-------------------------------------------------+ - |proxy_user|Benutzername für die Proxynutzung, falls nötig|string |'wulli' oder '' für keinen Namen (Standardwert) | - +----------+----------------------------------------------+--------+-------------------------------------------------+ - |proxy_pass|Passwort für die Proxynutzung, falls nötig |string |'geheim' oder '' für kein Passwort (Standardwert)| - +----------+----------------------------------------------+--------+-------------------------------------------------+ - |proxy_auth|Proxy HTTP Authentifizierungs-Typ |string |Zend\Http\Client::AUTH_BASIC (Standardwert) | - +----------+----------------------------------------------+--------+-------------------------------------------------+ - - - -proxy_host muss immer gesetzt werden, ansonsten wird der Proxy-Adapter auf ``Zend\Http\Client\Adapter\Socket`` -zurückgreifen und keinen Proxy Server benutzen. Wird kein Prot mit übergeben, so versucht der Proxy-Adapter sich -auf den Standardport '8080' zu verbinden. - -proxy_user und proxy_pass werden nur dann benötigt, wenn der Proxy-Server tatsächlich eine Authentifizierung -erwartet. Werden diese Parameter mit übergeben, setzt der Proxy-Adapter zusätzlich den 'Proxy-Authentication' -Header bei Anfragen. Wird keine Authentifizierung benötigt, sollten die beiden Parameter weggelassen werden. - -proxy_auth setzt den Authentifizierungs-Typ. Dies ist nur nötig, wenn der Proxy-Server eine Authentifizierung -erwartet. Mögliche Werte entsprechen denen der Zend\Http\Client::setAuth() Methode. Zur Zeit wird nur die -BASIC-Authentifizierung (Zend\Http\Client::AUTH_BASIC) unterstützt. - -.. _zend.http.client.adapters.proxy.example-1: - -.. rubric:: Zend\Http\Client hinter einem Proxy-Server nutzen - -.. code-block:: php - :linenos: - - // Konfigurationsparameter setzen - $config = array( - 'adapter' => 'Zend\Http\Client\Adapter\Proxy', - 'proxy_host' => 'proxy.int.zend.com', - 'proxy_port' => 8000, - 'proxy_user' => 'shahar.e', - 'proxy_pass' => 'bananashaped' - ); - - // Client-Objekt instanziieren - $client = new Zend\Http\Client('http://www.example.com', $config); - - // $client kann jetzt wie gewohnt benutzt werden - -Wie vorher erwähnt, nutzt der Proxy-Adapter eine einfache Socket-Verbindung, wenn proxy_host nicht gesetzt oder -leer gelassen wurde. Dies ermöglicht die optionale Nutzung eines Proxy-Servers, abhängig von dem proxy_host -Parameter. - -.. note:: - - Da der Proxy Adapter von ``Zend\Http\Client\Adapter\Socket`` abgeleitet ist, kann die Stream Kontext - Zugriffsmethode verwendet werden (siehe :ref:`den Abschnitt für Konfiguration - `) um Stream Kontext Optionen auf Proxy Verbindungen zu setzen - wie es oben demonstriert wurde. - -.. _zend.http.client.adapters.curl: - -Der cURL Adapter ----------------- - -cURL ist eine Standard *HTTP* Client Bibliothek die mit vielen Betriebssystemen ausgeliefert wird, und kann in -*PHP* über die cURL Erweiterung verwendet werden. Sie bietet Funktionalitäten für viele spezielle Fälle die -für einen *HTTP* Client auftreten können und machen sie zu einer perfekten Wahl für einen *HTTP* Adapter. Sie -unterstützt sichere Verbindungen, Proxies, alle Arten von Authentifizierungsmechanismen und glänzt in Anwendungen -die große Dateien zwischen Servern bewegen müssen. - -.. _zend.http.client.adapters.curl.example-1: - -.. rubric:: Setzen von cURL Optionen - -.. code-block:: php - :linenos: - - $config = array( - 'adapter' => 'Zend\Http\Client\Adapter\Curl', - 'curloptions' => array(CURLOPT_FOLLOWLOCATION => true), - ); - $client = new Zend\Http\Client($uri, $config); - -Standardmäßig ist der cURL Adapter so konfiguriert das er sich genauso wie der Socket Adapter verhält und er -akzeptiert auch die gleichen Konfigurationsparameter wie die Socket und Proxy Adapter. Man kann die cURL Optionen -entweder durch den 'curloptions' Schlüssel im Konstruktor des Adapters, oder durch den Aufruf von -``setCurlOption($name, $value)``, verändern. Der ``$name`` Schlüssel entspricht den CURL_* Konstanten der cURL -Erweiterung. Man kann auf den CURL Handler durch den Aufruf von ``$adapter->getHandle();`` Zugriff erhalten. - -.. _zend.http.client.adapters.curl.example-2: - -.. rubric:: Dateien von Hand übertragen - -Man kan cURL verwenden um große Dateien über *HTTP* durch einen Dateihandle zu übertragen. - -.. code-block:: php - :linenos: - - $putFileSize = filesize("filepath"); - $putFileHandle = fopen("filepath", "r"); - - $adapter = new Zend\Http\Client\Adapter\Curl(); - $client = new Zend\Http\Client(); - $client->setAdapter($adapter); - $adapter->setConfig(array( - 'curloptions' => array( - CURLOPT_INFILE => $putFileHandle, - CURLOPT_INFILESIZE => $putFileSize - ) - )); - $client->request("PUT"); - -.. _zend.http.client.adapters.test: - -Der Test Adapter ----------------- - -Manchmal ist es sehr schwer Code zu testen, der von *HTTP* Verbindungen abhängig ist. Zum Beispiel verlangt das -Testen einer Applikation, die einen *RSS* Feed von einem fremden Server anfordert, eine Netzwerkverbindung, die -nicht immer verfügbar ist. - -Aus diesem Grund wird der ``Zend\Http\Client\Adapter\Test`` Adapter bereit gestellt. Man kann seine eigenen -Applikationen schreiben, um ``Zend\Http\Client`` zu verwenden, und nur zu Testzwecken, z.B. in der Unit Test Suite, -den Standardadapter durch den Testadapter (ein Mock Objekt) austauschen, um Tests ohne direkte Serverbindungen -auszuführen. - -Der ``Zend\Http\Client\Adapter\Test`` Adapter stellt die zusätzliche Methode setResponse() bereit. Diese Methode -nimmt einen Parameter entgegen, der eine *HTTP* Antwort entweder als Text oder als ``Zend\Http\Response`` Objekt -repräsentiert. Einmal eingerichtet, wird der Testadapter immer diese Antwort zurückgeben, ohne tatsächlich eine -*HTTP* Anfrage auszuführen. - -.. _zend.http.client.adapters.test.example-1: - -.. rubric:: Testen gegen einen einfachen HTTP Response Stumpf - -.. code-block:: php - :linenos: - - // Instanziere einen neuen Adapter und Client - $adapter = new Zend\Http\Client\Adapter\Test(); - $client = new Zend\Http\Client('http://www.example.com', array( - 'adapter' => $adapter - )); - - // Setze die erwartete Antwort - $adapter->setResponse( - "HTTP/1.1 200 OK" . "\r\n" . - "Content-type: text/xml" . "\r\n" . - "\r\n" . - '' . - '' . - ' ' . - ' Premature Optimization' . - // und so weiter... - ''); - - $response = $client->request('GET'); - // .. setze die Verarbeitung von $response fort... - -Das obige Beispiel zeigt, wie man einen *HTTP* Client voreinstellen kann, damit er die benötigte Antwort -zurückgibt. Danach kann man mit den Testen des eigenen Codes weiter machen, ohne von einer Netzwerkverbindung, der -Serverantwort, etc. abhängig zu sein. In diesem Fall würde der Test mit der Prüfung fortfahren, wie die -Applikation das *XML* aus der Antwort verarbeitet.. - -Manchmal erfordert ein einziger Methoden-Aufruf mehrere *HTTP* Übertragungen. In diesem Fall ist es nicht möglich -setResponse() alleine zu verwenden weil es keine Möglichkeit gibt die nächste Antwort zu setzen die das Programm -benötigt bevor es zum Aufrufer zurückkommt. - -.. _zend.http.client.adapters.test.example-2: - -.. rubric:: Test mit mehreren HTTP-Antworten - -.. code-block:: php - :linenos: - - // Instanzen vom Adapter und Client erzeugen - $adapter = new Zend\Http\Client\Adapter\Test(); - $client = new Zend\Http\Client('http://www.example.com', array( - 'adapter' => $adapter - )); - - // mit setResponse() die erste Antwort setzen - $adapter->setResponse( - "HTTP/1.1 302 Found" . "\r\n" . - "Location: /" . "\r\n" . - "Content-Type: text/html" . "\r\n" . - "\r\n" . - '' . - ' Moved' . - '

This page has moved.

' . - ''); - - // mit addResponse() nachfolgende Antworten setzen - $adapter->addResponse( - "HTTP/1.1 200 OK" . "\r\n" . - "Content-Type: text/html" . "\r\n" . - "\r\n" . - '' . - ' Meine Haustierseite' . - '

...

' . - ''); - - // Das $client Objekt kann jetzt zu testzwecken herangezogen werden, - // indem es wie ein normales Client-Objekt benutzt wird. - -Die setResponse() Methode löscht alle Antworten im Buffer von ``Zend\Http\Client\Adapter\Test`` und setzt die -erste Antwort die zurückgegeben wird. Die addResponse() Methode fügt dann weitere Antworten sukzessiv hinzu. - -Die HTTP-Antworten werden in der Reihenfolge zurückgegeben, in der sie angelegt worden sind. Gibt es mehr Anfragen -als Antworten, so wird wieder bei der ersten Antwort angefangen. - -Das oben angeführte Beispiel kann dazu benutzt werden, um die Reaktion der eigenen Anwendung auf einen 302 -Redirect (Weiterleitung) zu testen. Abhängig von Ihrer Anwendung, kann es gewollt oder nicht gewollt sein, dass -dem Redirect gefolgt wird. In unserem Beispiel erwarten wir das der Umleitung gefolgt wird und wir konfigurieren -den Test Adapter um uns zu helfen das zu Testen. Die ursprüngliche 302 Antwort wird mit der setResponse() Methode -gesetzt und die 200 Antwort welche als nächstes zurückzugeben ist wird mit der addResponse() Methode -hinzugefügt. Nachdem der Test Adapter konfiguriert ist, wird der *HTTP* Client der den Adapter enthält unter test -in das eigene Objekt injiziert und sein Verhalten getestet. - -Wenn man will das der Adapter auf Wunsch fehlschlägt kann man ``setNextRequestWillFail($flag)`` verwenden. Diese -Methode lässt den Nächsten Aufruf von ``connect()`` eine ``Zend\Http\Client\Adapter\Exception`` Exception -geworfen. Das kann dann nützlich sein wenn die eigene Anwendung Inhalte von einer externen Seite cacht (im Falle -das die Seite ausfällt) und man dieses Feature testen will. - -.. _zend.http.client.adapters.test.example-3: - -.. rubric:: Erzwingen das der Adapter fehlschlägt - -.. code-block:: php - :linenos: - - // Einen neuen Adapter und Client instanziieren - $adapter = new Zend\Http\Client\Adapter\Test(); - $client = new Zend\Http\Client('http://www.example.com', array( - 'adapter' => $adapter - )); - - // Erzwingen das die nächste Anfrage mit einer Exception fehlschlägt - $adapter->setNextRequestWillFail(true); - - try { - // Dieser Aufruf führt zu einer Zend\Http\Client\Adapter\Exception - $client->request(); - } catch (Zend\Http\Client\Adapter\Exception $e) { - // ... - } - - // Weitere Aufrufe arbeiten wie erwartet bis man setNextRequestWillFail(true) - // erneut aufruft - -.. _zend.http.client.adapters.extending: - -Einen eigenen Adapter erstellen -------------------------------- - -Es ist möglich eigene Verbindungs-Adapter zu schreiben, die spezielle Bedürfnisse, wie persistente Sockets oder -gecachte Verbindungen, abdecken. Diese können dann, wie gewohnt in der eigenen Anwendung benutzt werden können. - -Um einen neuen Adapter zu erstellen, muss eine neue Klasse angelegt werden, die das -``Zend\Http\Client\Adapter\Interface`` implementiert. Nachfolgend finden Sie ein Gerüst für einen neuen Adapter. -Die public-Methoden müssen unbedingt implementiert werden. - -.. _zend.http.client.adapters.extending.example-1: - -.. rubric:: Gerüst für einen eigenen Verbindungs-Adapter - -.. code-block:: php - :linenos: - - class MyApp_Http_Client_Adapter_BananaProtocol - implements Zend\Http\Client\Adapter\Interface - { - /** - * Konfigurationsarray für den Adapter - * - * @param array $config - */ - public function setConfig($config = array()) - { - // in den meisten Fällen kann die Implementierung von - // Zend\Http\Client\Adapter\Socket eins zu eins übernommen werden - } - - /** - * Zum Server verbinden - * - * @param string $host - * @param int $port - * @param boolean $secure - */ - public function connect($host, $port = 80, $secure = false) - { - // Verbindung zum Server herstellen - } - - /** - * Anfrage / Request an den Server stellen - * - * @param string $method - * @param Zend\Uri\Http $url - * @param string $http_ver - * @param array $headers - * @param string $body - * @return string Request as text - */ - public function write($method, - $url, - $http_ver = '1.1', - $headers = array(), - $body = '') - { - // Anfrage stellen - // Diese Methode muss die komplette Antwort zurückliefern, - // inklusive aller Header - } - - /** - * Antwort des Servers auslesen - * - * @return string - */ - public function read() - { - // Antwort des Servers lesen und als String zurückgeben - } - - /** - * Verbindung zum Server beenden - * - */ - public function close() - { - // Verbindung beenden - wird zum Schluss aufgerufen - } - } - - // Jetzt kann der Adapter benutzt werden: - $client = new Zend\Http\Client(array( - 'adapter' => 'MyApp_Http_Client_Adapter_BananaProtocol' - )); - - - -.. _`hier`: http://www.php.net/manual/en/transports.php#transports.inet -.. _`Stream Kontext`: http://php.net/manual/de/stream.contexts.php -.. _`stream_context_create()`: http://php.net/manual/de/function.stream-context-create.php diff --git a/docs/languages/de/modules/zend.http.client.advanced.rst b/docs/languages/de/modules/zend.http.client.advanced.rst deleted file mode 100644 index ee89d5507..000000000 --- a/docs/languages/de/modules/zend.http.client.advanced.rst +++ /dev/null @@ -1,431 +0,0 @@ -.. EN-Revision: none -.. _zend.http.client.advanced: - -Zend\Http\Client - Fortgeschrittende Nutzung -============================================ - -.. _zend.http.client.redirections: - -HTTP Umleitungen ----------------- - -Standardmäßig verarbeitet ``Zend\Http\Client`` *HTTP* Umleitungen automatisch und folgt bis zu 5 Umleitungen. -Dies kann durch Setzen des 'maxredirects' Konfigurationsparameters gändert werden. - -Gemäß dem *HTTP*/1.1 RFC sollten *HTTP* 301 und 302 Antworten vom Client behandelt werden, indem die selbe -Anfrage erneut an die angebene Stelle versendet wird - unter Verwendung der selben Anfragemethode. Allerdings haben -dies die meisten Clients nicht implementiert und verwenden beim Umleiten eine ``GET`` Anfrage. Standardmäßig -macht ``Zend\Http\Client`` genau dasselbe - beim Umleiten einer 301 oder 302 Antwort, werden alle ``GET`` und POST -Parameter zurückgesetzt und eine ``GET`` Anfrage wird an die neue Stelle versandt. Dieses Verhalten kann durch -Setzen des 'strictredirects' Konfigurationsparameters auf das boolesche ``TRUE`` geändert werden. - - - - .. _zend.http.client.redirections.example-1: - - .. rubric:: Strikte Umleitung von 301 und 302 Antworten nach RFC 2616 erzwingen - - .. code-block:: php - :linenos: - - // Strikte Umleitungen - $client->setConfig(array('strictredirects' => true); - - // Nicht strikte Umleitungen - $client->setConfig(array('strictredirects' => false); - - - -Man kann immer die Anzahl der durchgeführten Umleitungen nach dem Senden einer Anfrage durch Verwendung der -getRedirectionsCount() Methoden erhalten. - -.. _zend.http.client.cookies: - -Hinzufügen von Cookies und Verwendung von persistenten Cookies --------------------------------------------------------------- - -``Zend\Http\Client`` stellt eine einfache Schnittstelle zum Hinzufügen von Cookies zu einer Anfrage bereit, so -dass keine direkten Header Änderungen notwendig sind. Dies wird durch Verwendung der setCookie() Methode erledigt. -Diese Methode kann auf mehrere Arten verwendet werden: - - - - .. _zend.http.client.cookies.example-1: - - .. rubric:: Cookies setzen durch Verwendung von setCookie() - - .. code-block:: php - :linenos: - - // Ganz einfach: durch Übergabe von Namen und Wert für den Cookie - $client->setCookie('flavor', 'chocolate chips'); - - // Durch direktes Übergeben eines unverarbeiteten Cookie Strings (Name=Wert) - // Beachte, dass der Wert bereits URL kodiert sein muss - $client->setCookie('flavor=chocolate%20chips'); - - // Durch Übergabe eins Zend\Http\Cookie Objekts - $cookie = Zend\Http\Cookie::fromString('flavor=chocolate%20chips'); - $client->setCookie($cookie); - -Für weitere Informationen über ``Zend\Http\Cookie`` Objekte, siehe :ref:`diesen Abschnitt `. - -``Zend\Http\Client`` stellt außerdem die Möglichkeiten für "Cookie Stickiness" bereit - das bedeutet, dass der -Client intern alle gesendeten und erhaltenen Cookies speichert und bei nachfolgenden Anfragen automatisch wieder -mit sendet. Dies ist z.B. nützlich, wenn man sich bei einer entfernten Site zuerst einloggen muss und einen -Authentifizierungs- oder Session-Cookie erhält, bevor man weitere Anfragen versenden kann. - - - - .. _zend.http.client.cookies.example-2: - - .. rubric:: Cookie Stickiness aktivieren - - .. code-block:: php - :linenos: - - // Um die Cookie Stickiness einzuschalten, setze eine Cookie Jar (Keksdose) - $client->setCookieJar(); - - // Erste Anfrage: einloggen und eine Session starten - $client->setUri('http://example.com/login.php'); - $client->setParameterPost('user', 'h4x0r'); - $client->setParameterPost('password', '1337'); - $client->request('POST'); - - // Die Cookie Jar speichert die Cookies automatisch in der Antwort - // wie z.B. ein Session ID Cookie. - - // Nun können wir die nächste Anfrage senden - die gespeicherten Cookies - // werden automatisch mit gesendet - $client->setUri('http://example.com/read_member_news.php'); - $client->request('GET'); - -Für weitere Informationen über die ``Zend\Http\CookieJar`` Klasse, siehe :ref:`diesen Abschnitt -`. - -.. _zend.http.client.custom_headers: - -Setzen von individuellen Anfrageheadern ---------------------------------------- - -Das Setzen von individuellen Headern kann durch Verwendung der setHeaders() Methode erledigt werden. Diese Methode -ist sehr facettenreich und kann auf verschiedene Arten verwendet werden, wie das folgende Beispiel zeigt: - - - - .. _zend.http.client.custom_headers.example-1: - - .. rubric:: Setzen eines einzelnen individuellen Anfrageheaders - - .. code-block:: php - :linenos: - - // Setzen eines einzelnen Headers, vorherige werden überschrieben - $client->setHeaders('Host', 'www.example.com'); - - // Ein anderer Weg um genau das Gleiche zu erreichen - $client->setHeaders('Host: www.example.com'); - - // Setzen von verschiedenen Werten für den selben Header - // (besonders für Cookie Header nützlich): - $client->setHeaders('Cookie', array( - 'PHPSESSID=1234567890abcdef1234567890abcdef', - 'language=he' - )); - - - -setHeader() kann genauso einfach für das Setzen mehrerer Header in einem Aufruf durch Übergabe eines Array mit -Headern als einzigen Parameter verwendet werden: - - - - .. _zend.http.client.custom_headers.example-2: - - .. rubric:: Setzen eines mehreren individuellen Anfrageheaders - - .. code-block:: php - :linenos: - - // Setzen von mehreren Headern, vorherige werden überschrieben - $client->setHeaders(array( - 'Host' => 'www.example.com', - 'Accept-encoding' => 'gzip,deflate', - 'X-Powered-By' => 'Zend Framework')); - - // Das Array kann auch komplette Array Strings enthalten: - $client->setHeaders(array( - 'Host: www.example.com', - 'Accept-encoding: gzip,deflate', - 'X-Powered-By: Zend Framework')); - - - -.. _zend.http.client.file_uploads: - -Dateiuploads ------------- - -Man kann Dateien über *HTTP* hochladen, indem man die setFileUpload Methode verwendet. Diese Methode nimmt einen -Dateinamen als ersten Parameter, einen Formularnamen als zweiten Parameter und Daten als einen dritten, optionalen -Parameter entgegen. Wenn der dritte Parameter ``NULL`` ist, wird angenommen, dass der erste Dateinamen Parameter -auf eine echte Datei auf der Platte verweist, und ``Zend\Http\Client`` wird versuchen die Datei zu lesen und -hochzuladen. Wenn der Daten Parameter nicht ``NULL`` ist, wird der erste Dateinamen Parameter als der Dateiname -versendet, aber die Datei muss nicht wirklich auf der Platte existieren. Der zweite Formularnamen Parameter wird -immer benötigt und ist gleichbedeutend mit dem "name" Attribut eines >input< Tags, wenn die Datei durch ein *HTML* -Formular hochgeladen worden ist. Ein vierter optionaler Parameter gibt den Content-type der Datei an. Wenn er nicht -angegeben wird, liest ``Zend\Http\Client`` die Datei von der Platte und verwendet die mime_content_type Funktion, -um den Content-type der Datei zu erraten, wenn er verfügbar ist. Auf jeden Fall ist der Standard MIME Typ -'application/octet-stream'. - - - - .. _zend.http.client.file_uploads.example-1: - - .. rubric:: Verwendung von setFileUpload um Dateien hochzuladen - - .. code-block:: php - :linenos: - - // Hochladen beliebiger Daten als Datei - $text = 'this is some plain text'; - $client->setFileUpload('some_text.txt', 'upload', $text, 'text/plain'); - - // Hochladen einer vorhandenen Datei - $client->setFileUpload('/tmp/Backup.tar.gz', 'bufile'); - - // Dateien absenden - $client->request('POST'); - -Im ersten Beispiel, wird die Variable $text hochgeladen und als $_FILES['upload'] auf der Serverseite verfügbar -sein. Im zweiten Beispiel wird die vorhandene Datei /tmp/Backup.tar.gz auf den Server geladen und als -$_FILES['bufile'] verfügbar sein. Der Content-type wird automatisch erraten, wenn möglich - und wenn nicht, wird -der Content-type auf 'application/octet-stream' gesetzt. - -.. note:: - - **Dateien hochladen** - - Beim Hochladen von Dateien wird der Content-type der *HTTP* Anfrage automatisch auf 'multipart/form-data' - gesetzt. Man sollte beachten, dass man eine POST oder PUT Anfrage absenden muss, um Dateien hochzuladen. Die - meisten Server werden den Hauptteil der Anfrage bei anderen Anfragetypen ignorieren. - -.. _zend.http.client.raw_post_data: - -Unverarbeitete POST Daten versenden ------------------------------------ - -Man kann ``Zend\Http\Client`` verwenden, um mit der setRawData() Methode unverarbeitete POST Daten zu versenden. -Diese Methode nimmt zwei Parameter entgegen: der erste ist die im Anfrage Hauptteil zu versendenen Daten. Der -zweite optionale Parameter ist der Content-type der Daten. Obwohl dieser Parameter optional ist, sollte man ihn -normalerweise vor dem Absenden der Anfrage setzen - entweder durch Verwendung von setRawData() oder durch eine -andere Methode: setEncType(). - - - - .. _zend.http.client.raw_post_data.example-1: - - .. rubric:: Unverarbeitete POST Daten versenden - - .. code-block:: php - :linenos: - - $xml = '' . - ' Islands in the Stream' . - ' Ernest Hemingway' . - ' 1970' . - ''; - - $client->setRawData($xml, 'text/xml')->request('POST'); - - // Ein anderer Weg, um das selbe zu tun: - $client->setRawData($xml)->setEncType('text/xml')->request('POST'); - -Die Daten sollten auf der Serverseite über die *PHP* Variable $HTTP_RAW_POST_DATA oder über den php://input -stream verfügbar sein. - -.. note:: - - **Unverarbeitete POST Daten verwenden** - - Das Setzen von unverarbeiteten POST Daten für eine Anfrage überschreibt jeden POST Parameter oder - Dateiuploads. Man sollte nicht beides in der selben Anfrage verwenden. Es ist zu beachten, dass die meisten - Server den Hauptteil der Anfrage ignorieren, wenn keine POST Anfrage gesendet wird. - -.. _zend.http.client.http_authentication: - -HTTP Authentifizierung ----------------------- - -Derzeit unterstützt ``Zend\Http\Client`` nur die Basis *HTTP* Authentifizierung. Diese Funktion kann durch -Verwendung der ``setAuth()`` Methode oder durch Spezifikation von Benutzername und Passwort in der URI genutzt -werden. Die ``setAuth()`` Methode nimmt 3 Parameter entgegen: den Benutzernamen, das Passwort und einen optionalen -Authentifizierungstyp Parameter. Wie gesagt, wird derzeit nur die Basis Authentifizierung unterstützt -(Unterstützung für eine Digest Authentifizierung ist geplant). - - - - .. _zend.http.client.http_authentication.example-1: - - .. rubric:: Setzen von Benutzer und Password für eine HTTP Authentifizierung - - .. code-block:: php - :linenos: - - // Verwende die Basis Authentifizierung - $client->setAuth('shahar', 'myPassword!', Zend\Http\Client::AUTH_BASIC); - - // Da Basis Authentifizierung Standard ist, kann man auch dies verwenden: - $client->setAuth('shahar', 'myPassword!'); - - // Man kann auch den Benutzernamen und das Passwort in der URI spezifizieren - $client->setUri('http://christer:secret@example.com'); - - - -.. _zend.http.client.multiple_requests: - -Versenden mehrerer Anfragen mit dem selben Client -------------------------------------------------- - -``Zend\Http\Client`` wurde zusätzlich besonders dafür entwickelt, um mehrere, aufeinander folgende Abfragen durch -das selbe Objekt verarbeiten zu können. Dies ist nützlich, wenn z.B. ein Skript es erfordert, Daten von -verschiedenen Stellen abzurufen, oder wenn eine spezielle *HTTP* Ressource das Einloggen und Erhalten eines Session -Cookies erfordert. - -Beim Ausführen mehrere Anfrage an den selben Host, wird es besonders empfohlen, den Konfigurationsschalter -'keepalive' zu aktivieren. Wenn der Server keep-alive Verbindungen unterstützt, wird auf diesem Weg die Verbindung -zum Server nur beendet, sobald alle Anfragen abgeschlossen sind und das Client Objekt zerstört wird. Dies -verhindert den Overhead beim Öffnen und Schließen von *TCP* Verbindungen zum Server. - -Wenn man verschiedene Anfragen mit dem selben Client durchführt, aber sicherstellen möchte, dass alle -anfragespezifischen Parameter entfernt werden, sollte man die resetParameters() Methode verwenden. Dies stellt -sicher, dass ``GET`` und POST Parameter, Anfragehauptteil und anfragespezifischen Header zurückgesetzt und nicht -bei der nächsten Anfrage wiederverwendet werden. - -.. note:: - - **Parameter zurück setzen** - - Bitte beachten, dass Header, die nicht anfragespezifisch sind, standardmäßig nicht zurück gesetzt werden, - wenn die ``resetParameters()`` Methode verwendet wird. Nur die 'Content-length' und 'Content-type' Header werden - zurück gesetzt. Dies erlaubt das Setzen und Vergessen von Headern wie 'Accept-language' und 'Accept-encoding'. - - Um alle Header und Daten aus der URI und der Methode zu löschen kann ``resetParameters(true)`` verwendet - werden. - -Ein weiteres Feature, welches speziell für aufeinander folgende Anfragen entwickelt worden ist, ist das Cookie Jar -Objekt (Keksdose). Cookie Jars erlauben das automatische Speichern von Cookies, die vom Server bei der ersten -Anfrage gesetzt worden sind, und das Versenden bei nachfolgenden Anfragen. Dies erlaubt es z.B. eine -Authentifizierungsanfrage zu durchlaufen, bevor die eigentliche Anfrage zum Erhalten der Daten gesendet wird. - -Wenn die Applikation eine Authentifizierungsanfrage pro Benutzer erfordert und nachfolgende Anfragen in mehr als -einem Skript in der Applikation durchgeführt werden könnten, könnte es eine gute Idee sein, das Cookie Jar -Objekt in der Benutzersession zu speichern. Auf diese Weise muß der Benutzer nur einmal pro Session -authentifiziert werden. - -.. _zend.http.client.multiple_requests.example-1: - -.. rubric:: Durchführen von aufeinander folgenden Anfrage mit einem Client - -.. code-block:: php - :linenos: - - // Zuerst den Client instanzieren - $client = new Zend\Http\Client('http://www.example.com/fetchdata.php', array( - 'keepalive' => true - )); - - // Haben wir die Cookies in unserer Session gespeichert? - if (isset($_SESSION['cookiejar']) && - $_SESSION['cookiejar'] instanceof Zend\Http\CookieJar) { - - $client->setCookieJar($_SESSION['cookiejar']); - } else { - // Falls nicht, authentifiziere und speichere die Cookies - $client->setCookieJar(); - $client->setUri('http://www.example.com/login.php'); - $client->setParameterPost(array( - 'user' => 'shahar', - 'pass' => 'somesecret' - )); - $client->request(Zend\Http\Client::POST); - - // Nun entferne die Parameter und setze die URI auf das Original - // (Bitte beachten, dass der Cookie, der vom Server gesetzt worden ist, - // nun in der Dose ist) - $client->resetParameters(); - $client->setUri('http://www.example.com/fetchdata.php'); - } - - $response = $client->request(Zend\Http\Client::GET); - - // Speichere die Cookies in der Session für die nächste Seite - $_SESSION['cookiejar'] = $client->getCookieJar(); - -.. _zend.http.client.streaming: - -Daten Streaming ---------------- - -Standardmäßig akzeptiert ``Zend\Http\Client`` Daten als *PHP* Strings und gibt diese auch zurück. Trotzdem sind -in vielen Fällen große Dateien zu Senden oder zu Empfangen. Diese im Speicher zu halten könnte unnötig oder zu -teuer sein. Für diese Fälle unterstützt ``Zend\Http\Client`` das Lesen von Daten aus Dateien (und generell auch -*PHP* Streams) und das Schreiben von Daten in Dateien (Streams). - -Um Streams für die Übergabe von Daten zu ``Zend\Http\Client`` zu verwenden, muss die Methode ``setRawData()`` -verwendet werden, wobei das Daten Argument eine Stream Ressource ist (z.B. das Ergebnis von ``fopen()``). - - - - .. _zend.http.client.streaming.example-1: - - .. rubric:: Senden von Dateien zum HTTP Server durch Streamen - - .. code-block:: php - :linenos: - - $fp = fopen("mybigfile.zip", "r"); - $client->setRawData($fp, 'application/zip')->request('PUT'); - - - -Aktuell unterstützen nur PUT Anfragen das Senden von Streams zum *HTTP* Server. - -Um Daten vom Server als Stream zu Empfangen kann ``setStream()`` verwendet werden. Das optionale Argument -spezifiziert den Dateinamen unter dem die Daten gespeichert werden. Wenn das Argument einfach nur ``TRUE`` ist -(Standard), wird eine temporäre Datei verwenden und gelöscht sobald das Antwort Objekt zerstört wird. Wenn das -Argument auf ``FALSE`` gesetzt wird, ist die Streaming-Funktionalität ausgeschaltet. - -Wenn Streaming verwendet wird, gibt die Methode ``request()`` ein Objekt der Klasse -``Zend\Http\Client\Response\Stream`` zurück, welches zwei nützliche Methoden hat: ``getStreamName()`` gibt den -Namen der Datei zurück in welcher die Antwort gespeichert wird, und ``getStream()`` gibt den Stream zurück von -dem die Antwort gelesen werden könnte. - -Man kann die Antwort entweder in eine vordefinierte Datei schreiben, oder eine temporäre Datei hierfür verwenden -und Sie woanders hinsenden, oder Sie durch Verwendung von regulären Streaming Funktionen an eine andere Datei -Senden. - - - - .. _zend.http.client.streaming.example-2: - - .. rubric:: Empfangen von Dateien vom HTTP Server durch Streamen - - .. code-block:: php - :linenos: - - $client->setStream(); // will use temp file - $response = $client->request('GET'); - // Datei kopieren - copy($response->getStreamName(), "my/downloads/file"); - // Stream verwenden - $fp = fopen("my/downloads/file2", "w"); - stream_copy_to_stream($response->getStream(), $fp); - // Kann auch in eine bekannte Datei schreiben - $client->setStream("my/downloads/myfile")->request('GET'); - - - - diff --git a/docs/languages/de/modules/zend.http.client.rst b/docs/languages/de/modules/zend.http.client.rst deleted file mode 100644 index 12f4b2033..000000000 --- a/docs/languages/de/modules/zend.http.client.rst +++ /dev/null @@ -1,223 +0,0 @@ -.. EN-Revision: none -.. _zend.http.client: - -Einführung -========== - -``Zend\Http\Client`` stellt eine einfache Schnittstelle für das Durchführen von Hyper-Text Transfer Protocol -(HTTP) Anfragen. ``Zend\Http\Client`` unterstützt die meisten einfachen Funktionen, die man von einem *HTTP* -Client erwartet, sowie einige komplexere Funktionen, wie z.B. *HTTP* Authentifizierung und Dateiuploads. -Erfolgreiche Anfragen (und die meisten nicht erfolgreichen ebenfalls) liefern ein ``Zend\Http\Response`` Objekt -zurück, welches den Zugriff auf die Header und den Hauptteil der Antwort ermöglichen (siehe :ref:`diesen -Abschnitt `). - -.. _zend.http.client.usage: - -Zend\Http\Client verwenden --------------------------- - -Der Klassenkonstruktor akzeptiert optional eine URL als seinen ersten Parameter (kann entweder ein String oder ein -``Zend\Uri\Http`` Objekt sein) und ein Array oder ``Zend_Config`` Objekt welches Konfigurationsparameter enthält. -Beides kann ausgelassen und später durch Verwendung der setUri() and setConfig() Methoden gesetzt werden. - - - - .. _zend.http.client.introduction.example-1: - - .. rubric:: Ein Zend\Http\Client Objekt instanzieren - - .. code-block:: php - :linenos: - - $client = new Zend\Http\Client('http://example.org', array( - 'maxredirects' => 0, - 'timeout' => 30)); - - // Dies macht genau das selbe: - $client = new Zend\Http\Client(); - $client->setUri('http://example.org'); - $client->setConfig(array( - 'maxredirects' => 0, - 'timeout' => 30)); - - // Man kann auch ein Zend_Config Objekt verwenden um die Konfiguration - // des Clients zu setzen - $config = new Zend\Config\Ini('httpclient.ini', 'secure'); - $client->setConfig($config); - - - - .. note:: - - ``Zend\Http\Client`` verwendet ``Zend\Uri\Http`` um URLs zu prüfen. Das bedeutet das einige spezielle - Zeichen wie das Pipe-Symbol ('\|') oder das Karet Symbol ('^') in der URL standardmäßig nicht akzeptiert - werden. Das kann geändert werden indem die 'allow_unwise' Option von ``Zend_Uri`` auf '``TRUE``' gesetzt - wird. Siehe :ref:`diesen Abschnitt ` für mehr Informationen. - - - -.. _zend.http.client.configuration: - -Konfigurationsparameter ------------------------ - -Der Konstruktor und die setConfig() Methode akzeptieren ein assoziatives Array mit Konfigurationsparametern oder -ein ``Zend_Config`` Objekt. Das Setzen dieser Parameter ist optional, da alle einen Standardwert haben. - - - - .. _zend.http.client.configuration.table: - - .. table:: Zend\Http\Client Konfigurationsparameter - - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |Parameter |Beschreibung |Erwartete Werte|Standardwert | - +===============+==============================================================================================================================================================================================================================================+===============+=================================+ - |maxredirects |Maximale Anzahl von zu folgenden Umleitungen (0 = keine) |integer |5 | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |strict |Ob Prüfungen an Headernamen durchzuführen sind. Einige Prüf-Funktionen werden übersprungen wenn auf FALSE gesetzt. Sollte normalerweise nicht geändert werden |boolean |TRUE | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |strictredirects|Ob beim Umleiten genau dem RFC zu folgen ist (siehe diesen Abschnitt) |boolean |FALSE | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |useragent |String zur Identifizierung des User Agents (gesendet in den Anfrageheadern) |string |'Zend\Http\Client' | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |timeout |Zeitüberschreitung für Verbindungen (Sekunden) |integer |10 | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |httpversion |Version des HTTP Protokolls (normalerweise '1.1' oder '1.0') |string |'1.1' | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |adapter |Zu verwendene Adapterklasse für die Verbindung (siehe diesen Abschnitt) |mixed |'Zend\Http\Client\Adapter\Socket'| - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |keepalive |Ob keep-alive Verbindungen mit dem Server aktiviert werden sollen. Nützlich und kann die Performance verbessern, wenn mehrere aufeinanderfolgend Anfragen an den selben Server ausgeführt werden. |boolean |FALSE | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |storeresponse |Ob die letzte Antwort für einen späteren Aufruf von getLastResponse() gespeichert werden soll. Wird sie auf FALSE gesetzt, gibt getLastResponse() NULL zurück. |boolean |TRUE | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - |encodecookies |Ob der Cookie Wert über urlencode oder urldecode übergeben werden soll oder nicht. Dessen Aktivierung verhindert die Unterstützung bei einigen Web Servern. Dessen Deaktivierung limitiert den Bereich der Werte die Cookies enthalten können.|boolean |TRUE | - +---------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------------------------+ - - - -.. _zend.http.client.basic-requests: - -Durchführen von einfachen HTTP Anfragen ---------------------------------------- - -Das Durchführen von einfachen *HTTP* Anfragen kann sehr leicht durch Verwendung der request() Methode gemacht -werden und benötigt selten mehr als drei Codezeilen: - - - - .. _zend.http.client.basic-requests.example-1: - - .. rubric:: Durchführen einer einfache GET Anfrage - - .. code-block:: php - :linenos: - - $client = new Zend\Http\Client('http://example.org'); - $response = $client->request(); - -Die request() Methode akzeptiert einen optionalen Parameter - die Anfragemethode. Diese kann ``GET``, ``POST``, -``PUT``, ``HEAD``, ``DELETE``, ``TRACE``, ``OPTIONS`` oder ``CONNECT`` sein, wie im *HTTP* Protokoll definiert. -[#]_. Zur Erleichterung sind alle als Klassenkonstanten definiert: Zend\Http\Client::GET, Zend\Http\Client::POST -und so weiter. - -Wenn keine Methode angegeben worden ist, wird die durch den letzten Aufruf von ``setMethod()`` gesetzte Methode -verwendet. Wenn ``setMethod()`` vorher nicht aufgerufen worden ist, wird als Standardmethode ``GET`` verwendet -(siehe obiges Beispiel). - - - - .. _zend.http.client.basic-requests.example-2: - - .. rubric:: Andere Anfragemethoden als GET verwenden - - .. code-block:: php - :linenos: - - // Durchführen einer POST Anfrage - $response = $client->request('POST'); - - // Ein weiterer Weg, eine POST Anfrage durchzuführen - $client->setMethod(Zend\Http\Client::POST); - $response = $client->request(); - - - -.. _zend.http.client.parameters: - -Hinzufügen von GET und POST Parametern --------------------------------------- - -Das Hinzufügen von ``GET`` Parametern zu einer *HTTP* Anfrage ist recht einfach und kann entweder über die Angabe -als Teil der URL oder durch Verwendung der setParameterGet() Methode erfolgen. Diese Methode benötigt den Namen -des ``GET`` Parameter als seinen ersten Parameter und den Wert des ``GET`` Parameter als seinen zweiten Parameter. -Zur Erleichterung akzeptiert die setParameterGet() Methode auch ein einzelnes assoziatives Array mit ``GET`` -Parameter als Name => Wert Variablen, was beim setzen von mehreren ``GET`` Parametern komfortabler sein kann. - - - - .. _zend.http.client.parameters.example-1: - - .. rubric:: Setzen von GET Parametern - - .. code-block:: php - :linenos: - - // Setzen eines GET Parameter mit der setParameterGet Methode - $client->setParameterGet('knight', 'lancelot'); - - // Dies ist äquivalent durch Setzen der URL: - $client->setUri('http://example.com/index.php?knight=lancelot'); - - // Hinzufügen mehrerer Parameter durch einen Aufruf - $client->setParameterGet(array( - 'first_name' => 'Bender', - 'middle_name' => 'Bending' - 'made_in' => 'Mexico', - )); - - - -Während ``GET`` Parameter bei jeder Anfragemethode gesetzt werden können, können POST Parameter nur im Hauptteil -von POST Anfragen versendet werden. Das Hinzufügen von POST Parameter zu einer Anfrage ist sehr ähnlich wie das -Hinzufügen von ``GET`` Parametern and kann mit der setParameterPost() Methode gemacht werden, die vom Aufbau der -setParameterGet() Methode ähnlich ist.. - - - - .. _zend.http.client.parameters.example-2: - - .. rubric:: Setzen von POST Parametern - - .. code-block:: php - :linenos: - - // Setzen eines POST Parameters - $client->setParameterPost('language', 'fr'); - - // Hinzufügen von mehreren POST Parametern, eines davon mit mehreren Werten - $client->setParameterPost(array( - 'language' => 'es', - 'country' => 'ar', - 'selection' => array(45, 32, 80) - )); - -Beim Senden einer POST Anfrage ist zu beachten, dass man sowohl ``GET`` als auch POST Parameter setzen kann. Auf -der anderen Seite wird durch das Setzen von POST Parametern für andere Anfragen als POST kein Fehler ausgeworfen. -Solange eine Anfrage keine POST Anfrage ist, werden POST Parameter einfach ignoriert. - -.. _zend.http.client.accessing_last: - -Zugriff auf die Letzte Anfrage und Antwort ------------------------------------------- - -``Zend\Http\Client`` bietet Methoden um Zugriff auf die letzte gesendete Anfrage und die letzte empfangene Antwort -des Client Objekts zu bekommen. ``Zend\Http\Client->getLastRequest()`` hat keine Parameter und gibt die letzte -*HTTP* Anfrage als String zurück die der Client gesendet hat. Auf die gleiche Art und Weise gibt -``Zend\Http\Client->getLastResponse()`` die letzte *HTTP* Antwort als :ref:`Zend\Http\Response -` Objekt zurück die der Client empfangen hat. - - - - -.. [#] Siehe RFC 2616 -http://www.w3.org/Protocols/rfc2616/rfc2616.html. \ No newline at end of file diff --git a/docs/languages/de/modules/zend.http.cookie.handling.rst b/docs/languages/de/modules/zend.http.cookie.handling.rst deleted file mode 100644 index 3a6d3b7f3..000000000 --- a/docs/languages/de/modules/zend.http.cookie.handling.rst +++ /dev/null @@ -1,403 +0,0 @@ -.. EN-Revision: none -.. _zend.http.cookies: - -Zend\Http\Cookie und Zend\Http\CookieJar -======================================== - -.. _zend.http.cookies.introduction: - -Einführung ----------- - -Wie erwartet ist ``Zend\Http\Cookie`` eine Klasse, die einen *HTTP* Cookie darstellt. Sie stellt Methoden zum -Verarbeiten von *HTTP* Antwort-Strings, Sammeln von Cookies und dem einfachen Zugriff auf deren Eigenschaften zur -Verfügung. So ist es auch möglich verschiedene Zustände eines Cookies zu überprüfen, z.B. den Anfrage *URL*, -die Ablaufzeit, das Vorliegen einer sicheren Verbindung, etc. - -``Zend\Http\CookieJar`` ist ein Objekt, das normalerweise von der Klasse ``Zend\Http\Client`` genutzt wird und -einen Satz von ``Zend\Http\Cookie`` Objekten beinhaltet. Die Idee ist das wenn ein ``Zend\Http\CookieJar`` an ein -``Zend\Http\Client`` Objekt angehängt wird, alle ein- und ausgehenden Cookies der *HTTP* Anfragen und -Antworten -im CookieJar Objekt gespeichert werden. Bei einer neuen Anfrage seitens des Clients wird nach allen Cookies, die -auf diese Anfrage zutreffen, gesucht. Diese werden automatisch zum Anfrage-Header hinzugefügt, was besonders -nützlich ist, wenn man eine Benutzersession über aufeinander folgende *HTTP* Anfragen beibehalten muss; die -Session-ID wird automatisch gesendet, wenn es notwendig ist. Ferner ist es möglich, ``Zend\Http\CookieJar`` -Objekte zu serialisieren und, wenn nötig, in $_SESSION zu speichern. - -.. _zend.http.cookies.cookie.instantiating: - -Instanzieren von Zend\Http\Cookie Objekten ------------------------------------------- - -Es gibt zwei Möglichkeiten ein Cookie Objekt zu erstellen: - - - - - Mithilfe des Konstruktors und der folgenden Syntax: *new Zend\Http\Cookie(string $name, string $value, string - $domain, [int $expires, [string $path, [boolean $secure]]]);* - - - ``$name``: Name des Cookies (notwendig) - - - ``$value``: Inhalt des Cookies (notwendig) - - - ``$domain``: Die Domain des Cookies (z.B. '.example.com') (notwendig) - - - ``$expires``: Ablaufzeit des Cookies als UNIX Zeitstempel (optional, standardmäßig ``FALSE``). Ein Nicht - setzen führt zu einer Behandlung als 'Session-Cookie', das keine Ablaufzeit enthält. - - - ``$path``: Pfad des Cookies, z.B. '/foo/bar/' (optional, standardmäßig '/') - - - ``$secure``: Boolean, ob der Cookie nur über sichere Verbindungen (HTTPS) gesendet werden darf (optional, - standardmäßig boolean ``FALSE``) - - - Durch das Aufrufen der statischen fromString($cookieStr, [$refUri, [$encodeValue]])-Methode mit einem - Cookie-String, wie er unter 'Set-Cookie' in einer *HTTP* Antwort und 'Cookie' in einer *HTTP* Anfrage zu - finden ist. In diesem Fall muss der Cookie-Inhalt bereits kodiert sein. Falls der Cookie-String keinen - 'domain'-Teil enthält, muss man selbst einen Referenz *URI* angeben, aus dem die Domain und der Pfad des - Cookies bestimmt wird. - - Die Methode ``fromString()`` akzeptiert die folgenden Parameter: - - - ``$cookieStr``: Ein Cookie String wie im *HTTP* Response Header 'Set-Cookie' oder im *HTTP* Request Header - 'Cookie' (wird dort benötigt) dargestellt - - - ``$refUri``: Eine Referenz *URI* auf welche die Domain und der Pfad von Cookies gesetzt werden. (Optional - wird standardmäßig dieser Wert von $cookieStr geparst) - - - ``$encodeValue``: Ob der Wert über urldecode übergeben werden soll.Hat auch Einfluss auf der Verhalten des - Cookies wenn es in einen Cookie String zurück konvertiert wird. (Optional ist er standardmäßig true) - - - - - - .. _zend.http.cookies.cookie.instantiating.example-1: - - .. rubric:: Instanzieren eines Zend\Http\Cookie-Objekts - - .. code-block:: php - :linenos: - - // Zuerst nutzen wir den Konstruktor. Der Cookie wird in zwei Stunden ablaufen - $cookie = new Zend\Http\Cookie('foo', - 'bar', - '.example.com', - time() + 7200, - '/path'); - - // Man kann auch den HTTP-Antwort 'Set-Cookie'-header dafür nutzen. - // Dieser Cookie ist ähnlich zum vorangegangenen, allerdings wird - // er nicht ablaufen und nur über sichere Verbindungen gesendet. - $cookie = Zend\Http\Cookie::fromString('foo=bar; domain=.example.com; ' . - 'path=/path; secure'); - - // Wenn die Domain des Cookies nicht gesetzt ist, muss man ihn selbst angeben. - $cookie = Zend\Http\Cookie::fromString('foo=bar; secure;', - 'http://www.example.com/path'); - - - - .. note:: - - Beim Instanzieren eines Cookie Objekts mit der ``Zend\Http\Cookie``::fromString()-Methode wird erwartet, dass - der Cookie-Inhalt *URL* kodiert ist, wie es bei Cookie-Strings sein sollte. Allerdings wird angenommen, dass - der Inhalt bei Verwendung des Konstruktors in seiner eigentlichen Form, d.h. nicht URL-kodiert, übergeben - wird. - - - -Ein Cookie Objekt kann durch die magische \__toString()-Methode zurück in einen String umgewandelt werden. Diese -Methode erstellt einen *HTTP*-Anfrage "Cookie"-Header String, der den Namen sowie den Inhalt des Cookies enthält -und durch ein Semikolon (';') abgeschlossen ist. Der Inhalt wird URL-kodiert, wie es für einen Cookie-Header -vorgeschrieben ist: - - - - .. _zend.http.cookies.cookie.instantiating.example-2: - - .. rubric:: Transformation eines Zend\Http\Cookie-Objekts zu einem String - - .. code-block:: php - :linenos: - - // Erstellt einen neuen Cookie - $cookie = new Zend\Http\Cookie('foo', - 'two words', - '.example.com', - time() + 7200, - '/path'); - - // Gibt 'foo=two+words;' aus - echo $cookie->__toString(); - - // Bezweckt dasselbe - echo (string) $cookie; - - // Ab PHP 5.2 funktioniert auch diese Variante - echo $cookie; - - - -.. _zend.http.cookies.cookie.accessors: - -Zend\Http\Cookie getter-Methoden --------------------------------- - -Sobald ein ``Zend\Http\Cookie`` instanziert wurde, stellt es diverse getter-Methoden zur Verfügung, die es einem -ermöglichen, auf die verschiedenen Eigenschaften des *HTTP* Cookies zuzugreifen: - - - - - ``getName()``: Gibt den Namen des Cookies zurück - - - ``getValue()``: Gibt den wirklichen, also nicht kodierten, Inhalt zurück - - - ``getDomain()``: Gibt die Domain des Cookies zurück - - - ``getPath()``: Gibt den Pfad des Cookies zurück; dessen Standardwert ist '/' - - - ``getExpiryTime()``: Gibt die Ablaufzeit des Cookies als UNIX-Timestamp zurück. Falls der Cookie keine - Ablaufzeit besitzt, wird ``NULL`` zurückgegeben. - - - -Zusätzlich gibt es einige boolesche Tester-Methoden: - - - - - ``isSecure()``: Gibt zurück, ob der Cookie nur über sichere Verbindungen gesendet werden kann. Wenn ``TRUE`` - zurückgegeben wird, wird der Cookie also nur über *HTTPS* versendet. - - - ``isExpired(int $time = null)``: Überprüft, ob der Cookie bereits abgelaufen ist. Wenn der Cookie keine - Ablaufzeit besitzt, wird diese Methode immer ``FALSE`` zurückgegeben. Wenn $time übergeben wurde, wird der - aktuelle Zeitstempel überschrieben und der übergebene Zeitstempel zur Überprüfung genutzt. - - - ``isSessionCookie()``: Überprüft, ob der Cookie ein "Session-Cookie" ist, der keine Ablaufzeit besitzt und - erst abläuft, wenn die Session beendet wird. - - - - - - - - .. _zend.http.cookies.cookie.accessors.example-1: - - .. rubric:: Nutzen der getter-Methoden von Zend\Http\Cookie - - .. code-block:: php - :linenos: - - // Zuerst wird der Cookie erstellt - $cookie = Zend\Http\Cookie::fromString( - 'foo=two+words; ' + - 'domain=.example.com; ' + - 'path=/somedir; ' + - 'secure; ' + - 'expires=Wednesday, 28-Feb-05 20:41:22 UTC'); - - echo $cookie->getName(); // Gibt 'foo' aus - echo $cookie->getValue(); // Gibt 'two words' aus - echo $cookie->getDomain(); // Gibt '.example.com' aus - echo $cookie->getPath(); // Gibt '/' aus - - echo date('Y-m-d', $cookie->getExpiryTime()); - // Gibt '2005-02-28' aus - - echo ($cookie->isExpired() ? 'Ja' : 'Nein'); - // Gibt 'Ja' aus - - echo ($cookie->isExpired(strtotime('2005-01-01') ? 'Ja' : 'Nein'); - // Gibt 'Nein' aus - - echo ($cookie->isSessionCookie() ? 'Ja' : 'Nein'); - // Gibt 'Nein' aus - - - -.. _zend.http.cookies.cookie.matching: - -Zend\Http\Cookie: Überprüfen von Szenarien ------------------------------------------- - -Die einzige wirkliche Logik in einem ``Zend\Http\Cookie`` Objekt befindet sich in der match()-Methode. Sie wird -genutzt um zu Überprüfen, ob ein Cookie auf eine *HTTP* Anfrage zutrifft, um zu entscheiden, ob der Cookie in der -Anfrage gesendet werden soll. Die Methode hat folgende Syntax und Parameter: ``Zend\Http\Cookie->match(mixed $uri, -[boolean $matchSessionCookies, [int $now]]);`` - - - ``$uri``: Ein zu überprüfendes ``Zend\Uri\Http`` Objekt mit einer Domain und einem Pfad. Wahlweise kann - stattdessen jedoch auch ein String, der einen validen *HTTP* *URL* darstellt, übergeben werden. Der Cookie - ist zutreffend, wenn das *URL* Schema (HTTP oder *HTTPS*), die Domain sowie der Pfad passen. - - - ``$matchSessionCookies``: Gibt an, ob Session-Cookies zutreffen sollen. Standardmäßig ist dieser Parameter - ``TRUE``. Wenn ``FALSE`` stattdessen übergeben wird, werden Cookies ohne Ablaufzeit nie zutreffen. - - - ``$now``: Ablaufzeit (in Form eines UNIX-Zeitstempels) auf welche der Cookie überprüft wird. Wenn sie nicht - angegeben wird, wird die gegenwärtige Zeit genutzt. - - - - - - .. _zend.http.cookies.cookie.matching.example-1: - - .. rubric:: Zutreffen von Cookies - - .. code-block:: php - :linenos: - - // Erstellen eines Cookie Objekts - zuerst ein sicherer Cookie ohne Ablaufzeit - $cookie = Zend\Http\Cookie::fromString('foo=two+words; ' + - 'domain=.example.com; ' + - 'path=/somedir; ' + - 'secure;'); - - $cookie->match('https://www.example.com/somedir/foo.php'); - // Gibt true zurück - - $cookie->match('http://www.example.com/somedir/foo.php'); - // Gibt false zurück, da die Verbindung nicht sicher ist - - $cookie->match('https://otherexample.com/somedir/foo.php'); - // Gibt false zurück, da die Domain falsch ist - - $cookie->match('https://example.com/foo.php'); - // Gibt false zurück, da der Pfad falsch ist - - $cookie->match('https://www.example.com/somedir/foo.php', false); - // Gibt false zurück, da keine Session-Cookies akzeptiert werden - - $cookie->match('https://sub.domain.example.com/somedir/otherdir/foo.php'); - // Gibt true zurück - - // Erstellen eines anderen Cookie-Objekts - diesmal unsicher und - // einer Ablaufzeit die zwei Stunden in der Zukunft liegt - $cookie = Zend\Http\Cookie::fromString('foo=two+words; ' + - 'domain=www.example.com; ' + - 'expires=' - . date(DATE_COOKIE, time() + 7200)); - - $cookie->match('http://www.example.com/'); - // Gibt true zurück - - $cookie->match('https://www.example.com/'); - // Gibt true zurück, da unsichere Cookies genauso gut über sichere - // Verbindungen übertragen werden können - - $cookie->match('http://subdomain.example.com/'); - // Gibt false zurück, da die Domain unzutreffend ist - - $cookie->match('http://www.example.com/', true, time() + (3 * 3600)); - // Gibt false zurück, da die Ablaufzeit drei Stunden in der Zukunft - // liegt - - - -.. _zend.http.cookies.cookiejar: - -Die Zend\Http\CookieJar Klasse: Instanzierung ---------------------------------------------- - -In den meisten Fällen ist es nicht notwendig, ein ``Zend\Http\CookieJar`` Objekt direkt zu erstellen. Wenn man ein -neues CookieJar zum ``Zend\Http\Client`` Objekts hinzufügen will, muss man lediglich die Methode -Zend\Http\Client->setCookieJar( aufrufen, die ein neues und leeres CookieJar zum Client hinzufügt. Später kann -man dieses CookieJar via Zend\Http\Client->getCookieJar() holen. - -Wenn dennoch ein CookieJar Objekt manuell erstellen werden soll, kann man dies direkt durch "new -Zend\Http\CookieJar()" erreichen - der Konstruktor benötigt keine Parameter. Ein anderer Weg zum Instanzieren -eines CookieJar Objekts ist es, die statische Methode Zend\Http\CookieJar::fromResponse() zu nutzen. Diese Methode -benötigt zwei Parameter: ein ``Zend\Http\Response`` Objekt und einen Referenz *URI*, entweder in Form eines -Strings oder eines ``Zend\Uri\Http`` Objekts. Es wird ein ``Zend\Http\CookieJar`` Objekt zurückgegeben, das -bereits die Cookies, die durch die *HTTP* Antwort gesetzt wurden, enthält. Der Referenz *URI* wird genutzt um die -Domain und den Pfad des Cookies zu setzen, sofern sie nicht in den Set-Cookie-Headern definiert wurden. - -.. _zend.http.cookies.cookiejar.adding_cookies: - -Hinzufügen von Cookies zu einem Zend\Http\CookieJar Objekt ----------------------------------------------------------- - -Normalerweise werden die, durch *HTTP* Antworten gesetzen, Cookies vom ``Zend\Http\Client`` Objekt automatisch zu -dessen CookieJar hinzugefügt. Wenn man es wünscht, kann man Cookies auch manuell zum CookieJar hinzufügen, was -durch Nutzen zweier Methoden erreicht werden kann: - - - - - ``Zend\Http\CookieJar->addCookie($cookie[, $ref_uri])``: Hinzufügen eines einzelnen Cookies zum CookieJar. - $cookie kann entweder ein ``Zend\Http\Cookie`` Objekt oder ein String, der automatisch zu einem Cookie Objekt - transformiert wird, sein. Wenn ein String übergeben wird, sollte man jedoch zusätzlich immer $ref_uri - übergeben, da dieser einen Referenz *URI* darstellt - in Form eines Strings oder eines ``Zend\Uri\Http`` - Objekts - dessen Werte als Standard für die Domain und den Pfad des Cookies genutzt werden. - - - ``Zend\Http\CookieJar->addCookiesFromResponse($response, $ref_uri)``: Fügt alle Cookies zum CookieJar hinzu, - die in einer einzelnen *HTTP* Antwort gesetzt wurden. Es wird erwartet, dass $response ein - ``Zend\Http\Response`` Objekt mit Set-Cookie-Headern ist. $ref_uri ist ein Anfrage *URI* in Form eines Strings - oder eines ``Zend\Uri\Http`` Objekts dessen Inhalt die Standarddomain und den -pfad des Cookies bestimmt. - - - -.. _zend.http.cookies.cookiejar.getting_cookies: - -Abrufen der Cookies von einem Zend\Http\CookieJar-Objekts ---------------------------------------------------------- - -Wie beim Hinzufügen von Cookies ist es normalerweise nicht notwendig, die Cookies manuell von einem CookieJar -Objekt zu holen. Das ``Zend\Http\Client`` Objekt holt automatisch alle benötigten Cookies für eine *HTTP* -Anfrage. Allerdings gibt es drei Methoden die Cookies aus einem CookieJar zu holen: ``getCookie()``, -``getAllCookies()``, und ``getMatchingCookies()``. Zusätzlich erhält man alle ``Zend\Http\Cookie`` Objekte von -CookieJar wenn man durch Ihn iteriert. - -Es ist wichtig anzumerken, dass jede dieser Methoden einen speziellen Parameter verlangt, der den Rückgabetyp der -Methode festlegt. Dieser Parameter kann drei verschiedene Werte annehmen: - - - - - ``Zend\Http\CookieJar::COOKIE_OBJECT``: Gibt ein ``Zend\Http\Cookie`` Objekt zurück. Wenn diese Methode mehr - als einen Cookie zurückgeben sollte, wird stattdessen ein Array aus Objekten zurückgegeben. - - - ``Zend\Http\CookieJar::COOKIE_STRING_ARRAY``: Gibt Cookies als Strings - im Format "foo=bar" - zurück, welche - passend für das Senden im "Cookie"-Header einer *HTTP*\ Anfrage sind. Wenn mehr als ein Cookie zurückgegeben - werden sollte, wird stattdessen ein Array solcher Strings zurückgegeben. - - - ``Zend\Http\CookieJar::COOKIE_STRING_CONCAT``: Ähnlich zu COOKIE_STRING_ARRAY; allerdings gibt diese Methode, - falls mehr als ein Cookie zurückgegeben wird, einen einzelnen, langen String zurück, der die Cookies anhand - eines Semikolons (;) trennt. Dieses Prozedere ist besonders hilfreich, wenn man alle zutreffenden Cookies in - einem einzelnen "Cookie"-Header einer *HTTP* Anfrage zurückgeben will. - - - -Die Struktur der unterschiedlichen Cookie-Abrufmethoden wird unterhalb beschrieben: - - - - - ``Zend\Http\CookieJar->getCookie($uri, $cookie_name[, $ret_as])``: Gibt einen einzelnen Cookie von dem - CookieJar zurück, dessen *URI* (Domain und Pfad) und Name zu den Parametern passen. $uri ist entweder ein - String oder ein ``Zend\Http\Uri`` Objekt, die den *URI* darstellen. $cookie_name ist ein String zum - Identifizieren des Cookie-Namens. $ret_as ist ein optionaler Parameter, der angibt, von welchem Typ der - zurückgegebene Wert ist. Der Standardwert ist COOKIE_OBJECT. - - - ``Zend\Http\CookieJar->getAllCookies($ret_as)``: Holt alle Cookies aus dem CookieJar. $ret_as gibt den - Rückgabetyp - wie oben bereits beschrieben - an. Wenn er nicht angegeben wird, nimmt er COOKIE_OBJECT an. - - - ``Zend\Http\CookieJar->getMatchingCookies($uri[, $matchSessionCookies[, $ret_as[, $now]]])``: Gibt alle - Cookies vom CookieJar zurück, die mit der Ablaufzeit und dem *URI* übereinstimmen. - - - - - ``$uri`` ist entweder ein ``Zend\Uri\Http`` Objekt oder ein String, der den Verbindungstyp (sicher oder - unsicher), die Domain und den Pfad angibt. Nach diesen Informationen wird im CookieJar gesucht. - - - ``$matchSessionCookies`` ist ein boolescher Ausdruck, der festlegt, ob nach Session-Cookies gesucht - werden soll. Session-Cookies sind Cookies, die keine Ablaufzeit enthalten. Standardmäßig ist dieser - Wert ``TRUE``. - - - ``$ret_as`` gibt den Rückgabetyp - wie oben beschrieben - an. Wenn keiner angegeben wird, wird - COOKIE_OBJECT angenommen. - - - ``$now`` ist ein Integer der einen UNIX-Zeitstempel darstellt. Cookies, die vor der angegeben Zeit - ablaufen, werden nicht zurückgegeben. Wenn dieser Parameter nicht angegeben wird, wird stattdessen die - aktuelle Zeit gewählt. - - Mehr über das Zutreffen von Cookies gibt es in :ref:`diesem Abschnitt `. - - - - diff --git a/docs/languages/de/modules/zend.http.response.rst b/docs/languages/de/modules/zend.http.response.rst deleted file mode 100644 index 636948f30..000000000 --- a/docs/languages/de/modules/zend.http.response.rst +++ /dev/null @@ -1,234 +0,0 @@ -.. EN-Revision: none -.. _zend.http.response: - -Zend\Http\Response -================== - -.. _zend.http.response.introduction: - -Einführung ----------- - -``Zend\Http\Response`` stellt den einfachen Zugriff auf eine *HTTP* Rückantwort sowie einige statische Methoden -zum Analysieren der *HTTP* Rückantworten bereit. Normalerweise wird ``Zend\Http\Response`` als ein Objekt -verwendet, dass von einer ``Zend\Http\Client`` Anfrage zurückgegeben wurde. - -In den meisten Fällen wird ein ``Zend\Http\Response`` Objekt über die fromString() Methode instanziert, die einen -String liest, der eine *HTTP* Rückantwort enthält und ein ``Zend\Http\Response`` Objekt zurückgibt. - - - - .. _zend.http.response.introduction.example-1: - - .. rubric:: Ein Zend\Http\Response Object über die factory Methode instanzieren - - .. code-block:: php - :linenos: - - $str = ''; - $sock = fsockopen('www.example.com', 80); - $req = "GET / HTTP/1.1\r\n" . - "Host: www.example.com\r\n" . - "Connection: close\r\n" . - "\r\n"; - - fwrite($sock, $req); - while ($buff = fread($sock, 1024)) - $str .= $sock; - - $response = Zend\Http\Response::fromString($str); - - - -Man kann auch die Konstruktormethode verwenden, um ein neues Response Objekt zu erstellen, indem man alle Parameter -für die Antwort angibt: - -``public function __construct($code, $headers, $body = null, $version = '1.1', $message = null)`` - -- ``$code``: Der *HTTP* Antwortcode(eg. 200, 404, etc.) - -- ``$headers``: Ein assoziatives Array mit *HTTP* Antwort Headers (z.B. 'Host' => 'example.com') - -- ``$body``: Der Hauptteil der Antwort als String - -- ``$version``: Der Version der *HTTP* Antwort (normalerweise 1.0 oder 1.1) - -- ``$message``: Die *HTTP* Rückantwort (z.B. 'OK', 'Internal Server Error'). Falls nicht angegeben, wird die - Rückantwort anhand des Antwortcode gesetzt. - -.. _zend.http.response.testers: - -Boolesche Testmethoden ----------------------- - -Sobald ein ``Zend\Http\Response`` Objekt instantiert ist, stellt es mehrere Methoden bereit, die zum Testen des -Typs der Antwort verwendet werden können. Diese geben alle ein boolesches ``TRUE`` oder ``FALSE`` zurück: - - - - - ``isSuccessful()``: Ob die Anfrage erfolgreoch war oder nicht. Gibt ``TRUE`` für *HTTP* 1xx und 2xx - Antwortcodes zurück. - - - ``isError()``: Ob der Antwortcode auf einen Fehler rückschließen lässt oder nicht. Gibt ``TRUE`` für - *HTTP* 4xx (Client Fehler) und 5xx (Server Fehler) Antwortcodes zurück. - - - ``isRedirect()``: Ob die Antwort eine Weiterleitung ist oder nicht. Gibt ``TRUE`` für *HTTP* 3xx Antwortcodes - zurück. - - - - - - .. _zend.http.response.testers.example-1: - - .. rubric:: Die isError() Method verwenden, um eine Antwort zu validieren - - .. code-block:: php - :linenos: - - if ($response->isError()) { - echo "Error transmitting data.\n" - echo "Server reply was: " . $response->getStatus() . - " " . $response->getMessage() . "\n"; - } - // .. verarbeite die Antwort hier... - - - -.. _zend.http.response.acessors: - -Zugriffsmethoden ----------------- - -Der Hauptzweck eines Response Okjektes ist der einfache Zugriff auf diverse Antwortparameter. - - - - - ``getStatus()``: Erhalte den *HTTP* Antwortstatuscode (z.B. 200, 504, etc.) zurück - - - ``getMessage()``: Erhalte die *HTTP* Antwortstatus Meldung (z.B. "Not Found", "Authorization Required") - zurück. - - - ``getBody()``: Erhalte den kompletten dekodierten Hauptteil der *HTTP* Antwort zurück - - - ``getRawBody()``: Erhalte die rohen, möglicherweise kodierten Hauptteil der *HTTP* Antwort zurück. Wenn der - Hauptteil z.B. mittels GZIP kodiert wurde, wird er nicht dekodiert. - - - ``getHeaders()``: Erhalte die *HTTP* Antwort Header als assoziatives Array (z.B. 'Content-type' => - 'text/html') zurück. - - - ``getHeader($header)``: Erhalte einen spezifischen *HTTP* Antwort Header zurück, der durch $header angegeben - wird. - - - ``getHeadersAsString($status_line, $br)``: Erhalte den kompletten Header Satz als String zurück. Wenn - ``$status_line`` auf ``TRUE`` gesetzt ist (Standardwert), wird die erste Statuszeile (z.B. "HTTP/1.1 200 OK") - ebenfalls zurück gegeben. Die Zeilen werden durch den ``$br`` Parameter umgebrochen (kann z.B. "
" sein. - Standardwert ist "\\n"). - - - ``asString($br)``: Erhalte die komplette Rückantwort als String zurück. Die Zeilen werden durch den $br - Parameter umgebrochen (kann z.B. "
" sein. Standardwert ist "\\n"). Man kann auch die magische - ``__toString()`` Methode verwenden wenn man das Objekt in einen String casten will. Diese wird dann auf - ``asString()`` weiterleiten - - - - - - .. _zend.http.response.acessors.example-1: - - .. rubric:: Zend\Http\Response Zugriffsmethoden verwenden - - .. code-block:: php - :linenos: - - if ($response->getStatus() == 200) { - echo "The request returned the following information:
"; - echo $response->getBody(); - } else { - echo "An error occurred while fetching data:
"; - echo $response->getStatus() . ": " . $response->getMessage(); - } - - - - .. note:: - - **Immer die Rückgabewerte prüfen** - - Weil eine Antwort mehrere Instanzen des selben Headers beinhalten kann, können die getHeader() Methode und - getHeaders() Methode entweder einen einzelnen String oder ein Array mit Strings für jeden Header - zurückgeben. Man sollte immer prüfen, ob der Rückgabewert ein String oder ein Array ist. - - - - - - .. _zend.http.response.acessors.example-2: - - .. rubric:: Auf Antwort Header zugreifen - - .. code-block:: php - :linenos: - - $ctype = $response->getHeader('Content-type'); - if (is_array($ctype)) $ctype = $ctype[0]; - - $body = $response->getBody(); - if ($ctype == 'text/html' || $ctype == 'text/xml') { - $body = htmlentities($body); - } - - echo $body; - - - -.. _zend.http.response.static_parsers: - -Statische HTTP Antwortanalysierer ---------------------------------- - -Die ``Zend\Http\Response`` Klasse beinhaltet auch verschiedene, intern verwendete Methoden für die Verarbeitung -und Analyse der *HTTP* Rückantworten bereit. Diese Methoden sind alle als statische Methoden eingerichtet, so dass -man sie extern verwenden kann, ohne dass man ein Response Objekt instanzierebn muss und nur einen bestimmten Teil -der Antwort extrahieren möchte. - - - - - ``Zend\Http\Response::extractCode($response_str)``: Extrahiere den *HTTP* Antwortcode (z.B. 200 oder 404) von - ``$response_str`` und gebe ihn zurück. - - - ``Zend\Http\Response::extractMessage($response_str)``: Extrahiere die *HTTP* Rückantwort (z.B. "OK" oder - "File Not Found") von ``$response_str`` und gebe sie zurück. - - - ``Zend\Http\Response::extractVersion($response_str)``: Extrahiere die *HTTP* Version (z.B. 1.1 oder 1.0) von - ``$response_str`` und gebe sie zurück. - - - ``Zend\Http\Response::extractHeaders($response_str)``: Extrahiere die *HTTP* Antwort Header von - ``$response_str`` und gebe sie in einem Array zurück. - - - ``Zend\Http\Response::extractBody($response_str)``: Extrahiere den *HTTP* Antworthauptteil aus - ``$response_str`` und gebe ihn zurück. - - - ``Zend\Http\Response::responseCodeAsText($code, $http11)``: Erhalte die Standard *HTTP* Rückantwort für - einen Antwortcode $code. Zum Beispiel wird "Internal Server Error" zurückgegeben, wenn ``$code`` gleich 500 - ist. Wenn ``$http11`` gleich ``TRUE`` ist (Standard), werden die *HTTP*/1.1 Standardantworten zurück gegeben, - andernfalls die *HTTP*/1.0 Antworten. Wird ``$code`` nicht angegeben, wird diese Methode alle bekannten *HTTP* - Antwortcodes als assoziatives Array (code => message) zurückgeben. - - - -Neben der Analysemethoden beinhaltet die Klasse auch einen Satz von Dekodieren für allgemein *HTTP* Antwort -Transferkodierungen: - - - - - ``Zend\Http\Response::decodeChunkedBody($body)``: Dekodiere einen kompletten "Content-Transfer-Encoding: - Chunked" Hauptteil - - - ``Zend\Http\Response::decodeGzip($body)``: Dekodiere einen "Content-Encoding: gzip" Hauptteil - - - ``Zend\Http\Response::decodeDeflate($body)``: Dekodiere einen "Content-Encoding: deflate" Hauptteil - - - - diff --git a/docs/languages/de/modules/zend.i18n.filter.alnum.rst b/docs/languages/de/modules/zend.i18n.filter.alnum.rst deleted file mode 100644 index 0d6488db7..000000000 --- a/docs/languages/de/modules/zend.i18n.filter.alnum.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.alnum: - -Alnum -===== - -``Zend\I18n\Filter\Alnum`` ist ein Filter welche nur alphabetische Zeichen und Ziffern zurückgibt. Alle anderen Zeichen -werden unterdrückt. - -.. _zend.i18n.filter.alnum.options: - -Unterstützte Optionen für Zend\I18n\Filter\Alnum ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\I18n\Filter\Alnum`` unterstützt: - -- **allowwhitespace**: Wenn diese Option gesetzt wird dann sind Leerzeichen erlaubt. Andernfalls werden Sie - unterdrückt. Standardmäßig sind Leerzeichen nicht erlaubt. - -.. _zend.filter.set.alnum.basic: - -Grundsätzliche Verwendung -------------------------- - -Das folgende Beispiel zeigt das Standardverhalten dieses Filters. - -.. code-block:: php - :linenos: - - $filter = new Zend\I18n\Filter\Alnum(); - $return = $filter->filter('This is (my) content: 123'); - // Gibt 'Thisismycontent123' zurück - -Das oben stehende Beispiel gibt 'Thisismycontent123' zurück. Wie man sehen kann werden alle Leerzeichen und auch -die Klammern gefiltert. - -.. note:: - - ``Zend\I18n\Filter\Alnum`` arbeitet auf fast allen Sprachen. Aber aktuell gibt es drei Ausnahmen: Chinesisch, - Japanisch und Koreanisch. In diesen Sprachen wird statt dessen das englische Alphabeth statt den Zeichen dieser - Sprache verwendet. Die Sprache selbst wird durch Verwendung von ``Zend_Locale`` erkannt. - -.. _zend.filter.set.alnum.whitespace: - -Leerzeichen erlauben --------------------- - -``Zend\I18n\Filter\Alnum`` kann auch Leerzeichen erlauben. Das kann nützlich sein wenn man spezielle Zeichen von einem -Text entfernen will. Siehe das folgende Beispiel: - -.. code-block:: php - :linenos: - - $filter = new Zend\I18n\Filter\Alnum(array('allowwhitespace' => true)); - $return = $filter->filter('This is (my) content: 123'); - // Gibt 'This is my content 123' zurück - -Das obige Beispiel gibt 'This is my content 123' zurück. Wie man sieht werden nur die Klammern gefiltert wobei die -Leerzeichen nicht angefasst werden. - -Am ``allowWhiteSpace`` im Nachhinein zu ändern kann man ``setAllowWhiteSpace`` und ``getAllowWhiteSpace`` -verwenden. - - diff --git a/docs/languages/de/modules/zend.i18n.filter.alpha.rst b/docs/languages/de/modules/zend.i18n.filter.alpha.rst deleted file mode 100644 index aa56be6fa..000000000 --- a/docs/languages/de/modules/zend.i18n.filter.alpha.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. EN-Revision: none -.. _zend.filter.set.alpha: - -Alpha -===== - -``Zend\I18n\Filter\Alpha`` ist ein Filter der den String ``$value`` zurückgibt, wobei er alle Zeichen entfernt die -keine alphanummerischen Zeichen sind. Dieser Filter enthält eine Option welche Leerzeichen erlaubt. - -.. _zend.i18n.filter.alpha.options: - -Unterstützte Optionen für Zend\I18n\Filter\Alpha ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\I18n\Filter\Alpha`` unterstützt: - -- **allowwhitespace**: Wenn diese Option gesetzt wird dann werden Leerzeichen erlaubt. Andernfalls werden Sie - unterdrückt. Standardmäßig sind Leerzeichen nicht erlaubt. - -.. _zend.filter.set.alpha.basic: - -Einfache Verwendung -------------------- - -Ein einfaches Beispiel der Verwendung ist anbei: - -.. code-block:: php - :linenos: - - $filter = new Zend\I18n\Filter\Alpha(); - - print $filter->filter('Das ist (mein) Inhalt: 123'); - -Das obige Beispiel gibt 'DasistmeinInhalt' zurück. Es sollte beachtet werden dass Leerzeichen und Klammern -entfernt werden. - -.. note:: - - ``Zend\I18n\Filter\Alpha`` arbeitet mit den meisten Sprachen; trotzdem gibt es drei Ausnahmen: Chinesisch, Japanisch - und Koreanisch. Bei diesen Sprachen wird das englische Alphabeth verwenden. Die Sprache wird durch die - Verwendung von ``Zend_Locale`` erkannt. - -.. _zend.filter.set.alpha.whitespace: - -Leerzeichen erlauben --------------------- - -``Zend\I18n\Filter\Alpha`` kann auch Leerzeichen erlauben. Dies kann nützlich sein wenn man spezielle Zeichen von einem -Statz entfernen will. Siehe das folgende Beispiel: - -.. code-block:: php - :linenos: - - $filter = new Zend\I18n\Filter\Alpha(array('allowwhitespace' => true)); - - print $filter->filter('Das ist (mein) Inhalt: 123'); - -Das oben stehende Beispiel gibt 'Das ist mein Inhalt ' zurück. Es ist zu beachten das alle Klammern, Doppelpunkte -und Zahlen entfernt werden wärend die Leerzeichen bleiben. - -Um ``allowWhiteSpace`` nach der Instanziierung zu ändern kann die Methode ``setAllowWhiteSpace()`` verwendet -werden. - -Um den aktuellen Wert von ``allowWhiteSpace`` zu erhalten kann die Methode ``getAllowWhiteSpace()`` verwendet -werden. - - diff --git a/docs/languages/de/modules/zend.i18n.validator.alnum.rst b/docs/languages/de/modules/zend.i18n.validator.alnum.rst deleted file mode 100644 index 048bb8dc7..000000000 --- a/docs/languages/de/modules/zend.i18n.validator.alnum.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.alnum: - -Alnum -===== - -``Zend\Validate\Alnum`` erlaubt es zu prüfen ob ein angegebener Wert nur alphabetische Zeichen und Ziffern -enthält. Es gibt keine Begrenzung der Länge für die Eingabe welche geprüft werden soll. - -.. _zend.i18n.validator.alnum.options: - -Unterstützte Optionen für Zend\Validate\Alnum ---------------------------------------------- - -Die folgenden Optionen werden von ``Zend\Validate\Alnum`` unterstützt: - -- **allowWhiteSpace**: Ob Leerzeichen erlaubt sind. Diese Option ist standardmäßig ``FALSE`` - -.. _zend.validator.set.alnum.basic: - -Standardverhalten ------------------ - -Das folgende ist ein Standardbeispiel: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Alnum(); - if ($validator->isValid('Abcd12')) { - // Der Wert enthält nur erlaubte Zeichen - } else { - // false - } - -.. _zend.validator.set.alnum.whitespace: - -Verwendung von Leerzeichen --------------------------- - -Standardmäßig werden Leerzeichen nicht akzeptiert weil Sie nicht Teil des Alphabeths sind. Trotzdem gibt es einen -Weg Sie als Eingabe zu akzeptieren. Das erlaubt es komplette Sätze oder Phrasen zu prüfen. - -Um die Verwendung von Leerzeichen zu erlauben muss man die Option ``allowWhiteSpace`` angeben. Das kann wärend der -Erstellung einer Instanz des Prüfers getan werden, oder im Nachhinein indem ``setAllowWhiteSpace()`` verwendet -wird. Um den aktuellen Zustand zu erhalten kann ``getAllowWhiteSpace()`` verwendet werden. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Alnum(array('allowWhiteSpace' => true)); - if ($validator->isValid('Abcd und 12')) { - // Der Wert enthält nur erlaubte Zeichen - } else { - // false - } - -.. _zend.validator.set.alnum.languages: - -Andere Sprachen verwenden -------------------------- - -Wenn ``Zend\Validate\Alnum`` verwendet wird dann wird jene Sprache verwendet, welche der Benutzer in seinem Browser -gesetzt hat, um die erlaubten Zeichen zu setzen. Das bedeutet, wenn ein Benutzer **de** für Deutsch setzt dann -kann er auch Zeichen wie **ä**, **ö** und **ü** zusätzlich zu den Zeichen des englischen Alphabeths setzen. - -Welche Zeichen erlaubt sind hängt komplett von der verwendeten Sprache ab, da jede Sprache Ihr eigenes Set von -Zeichen definiert. - -Es gibt aktuell 3 Sprachen welche nicht mit Ihrer eigenen Schreibweise akzeptiert werden. Diese Sprachen sind -**koreanisch**, **japanisch** und **chinesisch**, da diese Sprachen ein Alphabeth verwenden bei dem einzelne -Zeichen so aufgebaut werden dass Sie mehrere Zeichen verwenden. - -Im Falle das diese Sprachen verwendet werden wird der Inhalt nur durch Verwendung des englischen Alphabeths -geprüft. - - diff --git a/docs/languages/de/modules/zend.i18n.validator.alpha.rst b/docs/languages/de/modules/zend.i18n.validator.alpha.rst deleted file mode 100644 index b0c9e4ccc..000000000 --- a/docs/languages/de/modules/zend.i18n.validator.alpha.rst +++ /dev/null @@ -1,78 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.set.alpha: - -Alpha -===== - -``Zend\Validate\Alpha`` erlaubt es zu prüfen ob ein angegebener Wert nur alphabetische Zeichen enthält. Es gibt -keine Begrenzung der Länge für die Eingabe welche man prüfen will. Diese Prüfung ist ähnlich wie die -``Zend\Validate\Alnum`` Prüfung mit der Ausnahme dass Sie keine Ziffern akzeptiert. - -.. _zend.validate.set.alpha.options: - -Unterstützte Optionen für Zend\Validate\Alpha ---------------------------------------------- - -Die folgenden Optionen werden von ``Zend\Validate\Alpha`` unterstützt: - -- **allowWhiteSpace**: Ob Leerzeichen erlaubt sind. Diese Option ist standardmäßig ``FALSE`` - -.. _zend.validate.set.alpha.basic: - -Standardverhalten ------------------ - -Das folgende ist ein standardmäßiges Beispiel: - -.. code-block:: .validator. - :linenos: - - $validator = new Zend\Validate\Alpha(); - if ($validator->isValid('Abcd')) { - // Der Wert enthält nur erlaubte Zeichen - } else { - // false - } - -.. _zend.validate.set.alpha.whitespace: - -Verwendung von Leerzeichen --------------------------- - -Standardmäßig werden Leerzeichen nicht akzeptiert weil Sie nicht Teil des Alphabeths sind. Trotzdem gibt es einen -Weg Sie als Eingabe zu akzeptieren. Das erlaubt es komplette Sätze oder Phrasen zu prüfen. - -Um die Verwendung von Leerzeichen zu erlauben muss man die Option ``allowWhiteSpace`` angeben. Das kann wärend der -Erstellung einer Instanz des Prüfers getan werden, oder im Nachhinein indem ``setAllowWhiteSpace()`` verwendet -wird. Um den aktuellen Zustand zu erhalten kann ``getAllowWhiteSpace()`` verwendet werden. - -.. code-block:: .validator. - :linenos: - - $validator = new Zend\Validate\Alpha(array('allowWhiteSpace' => true)); - if ($validator->isValid('Abcd and efg')) { - // Der Wert enthält nur erlaubte Zeichen - } else { - // false - } - -.. _zend.validate.set.alpha.languages: - -Andere Sprachen verwenden -------------------------- - -Wenn ``Zend\Validate\Alpha`` verwendet wird dann wird jene Sprache verwendet, welche der Benutzer in seinem Browser -gesetzt hat, um die erlaubten Zeichen zu setzen. Das bedeutet, wenn ein Benutzer **de** für Deutsch setzt dann -kann er auch Zeichen wie **ä**, **ö** und **ü** zusätzlich zu den Zeichen des englischen Alphabeths setzen. - -Welche Zeichen erlaubt sind hängt komplett von der verwendeten Sprache ab, da jede Sprache Ihr eigenes Set von -Zeichen definiert. - -Es gibt aktuell 3 Sprachen welche nicht mit Ihrer eigenen Schreibweise akzeptiert werden. Diese Sprachen sind -**koreanisch**, **japanisch** und **chinesisch**, da diese Sprachen ein Alphabeth verwenden bei dem einzelne -Zeichen so aufgebaut werden dass Sie mehrere Zeichen verwenden. - -Im Falle das diese Sprachen verwendet werden wird der Inhalt nur durch Verwendung des englischen Alphabeths -geprüft. - - diff --git a/docs/languages/de/modules/zend.i18n.validator.float.rst b/docs/languages/de/modules/zend.i18n.validator.float.rst deleted file mode 100644 index 825fe5db2..000000000 --- a/docs/languages/de/modules/zend.i18n.validator.float.rst +++ /dev/null @@ -1,65 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.float: - -Float -===== - -``Zend\Validate\Float`` erlaubt es zu prüfen ob ein angegebener Wert eine Gleitkommazahl enthält. Diese Prüfung -kann auch lokalisierte Eingaben prüfen. - -.. _zend.i18n.validator.float.options: - -Unterstützte Optionen für Zend\Validate\Float ---------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Float`` unterstützt: - -- **locale**: Setzt das Gebietsschema welches verwendet wird um lokalisierte Gleitkommazahlen zu prüfen. - -.. _zend.validator.set.float.basic: - -Einfache Float Prüfung ----------------------- - -Der einfachste Weg eine Gleitkommazahl zu prüfen ist die Verwendung der Systemeinstellungen. Wenn keine Option -verwendet wird, dann wird das Gebietsschema der Umgebung für die Prüfung verwendet: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Float(); - - $validator->isValid(1234.5); // Gibt true zurück - $validator->isValid('10a01'); // Gibt false zurück - $validator->isValid('1,234.5'); // Gibt true zurück - -Im obigen Beispiel wird in der Umgebung das Gebietsschema "en" erwartet. - -.. _zend.validator.set.float.localized: - -Lokalisierte Prüfung von Gleitkommazahlen ------------------------------------------ - -Oft ist es nützlich in der Lage zu sein lokalisierte Werte zu prüfen. Gleitkommazahlen werden in anderen Ländern -oft unterschiedlich geschrieben. Wird zum Beispiel englisch verwendet wird "1.5" geschrieben. Im deutschen wird man -"1,5" schreiben und in anderen Sprachen können Gruppierungen verwendet werden. - -``Zend\Validate\Float`` ist in der Lage solche Schreibweisen zu verwenden. Aber es ist auf das Gebietsschema -begrenzt welches man verwendet. Siehe den folgenden Code: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Float(array('locale' => 'de')); - - $validator->isValid(1234.5); // Gibt true zurück - $validator->isValid("1 234,5"); // Gibt false zurück - $validator->isValid("1.234"); // Gibt true zurück - -Bei Verwendung eines Gebietsschemas wird die Eingabe, wie man sehen kann lokalisiert geprüft. Bei Verwendung einer -anderen Schreibweise erhält man ein ``FALSE`` wenn das Gebietsschema eine andere Schreibweise erzwingt. - -Das Gebietsschema kann auch im Nachhinein gesetzt werden indem ``setLocale()`` verwendet wird, und empfangen indem -man ``getLocale()`` verwendet. - - diff --git a/docs/languages/de/modules/zend.i18n.validator.int.rst b/docs/languages/de/modules/zend.i18n.validator.int.rst deleted file mode 100644 index 3a5afe5be..000000000 --- a/docs/languages/de/modules/zend.i18n.validator.int.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.int: - -Int -=== - -``Zend\Validate\Int`` prüft ob ein angegebener Wert ein Integer (Ganzzahl) ist. Auch lokalisierte Integerwerte -werden erkannt und können geprüft werden. - -.. _zend.i18n.validator.int.options: - -Unterstützte Optionen für Zend\Validate\Int -------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Int`` unterstützt: - -- **locale**: Setzt das Gebietsschema welches verwendet wird um lokalisierte Integerwerte zu prüfen. - -.. _zend.validator.set.int.basic: - -Einfache Integer Prüfung ------------------------- - -Der einfachste Weg um einen Integerwert zu prüfen ist die Verwendung der Systemeinstellungen. Wenn keine Optionen -angegeben werden, dann wird das Gebietsschema der Umgebung für die Prüfung verwendet: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Int(); - - $validator->isValid(1234); // Gibt true zurück - $validator->isValid(1234.5); // Gibt false zurück - $validator->isValid('1,234'); // Gibt true zurück - -Um obigen Beispiel haben wir angenommen das unsere Umgebung auf "en" als Gebietsschema gesetzt ist. Wie man im -dritten Beispiel sieht wird auch die Gruppierung erkannt. - -.. _zend.validator.set.int.localized: - -Lokalisierte Integer Prüfung ----------------------------- - -Oft ist es nützlich dazu in der Lage zu sein lokalisierte Werte zu prüfen. Integerwerte werden in anderen -Ländern oft unterschiedlich geschrieben. Zum Beispiel kann man im Englischen "1234" oder "1,234" schreiben. Beides -sind Integerwerte, aber die Gruppierung ist optional. Im Deutschen kann man zum Beispiel "1.234" schreiben und im -Französischen "1 234". - -``Zend\Validate\Int`` ist in der Lage solche Schreibweisen zu prüfen. Das bedeutet, das es nicht einfach das -Trennzeichen entfernt, sondern auch prüft ob das richtige Trennzeichen verwendet wird. Siehe den folgenden Code: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Int(array('locale' => 'de')); - - $validator->isValid(1234); // Gibt true zurück - $validator->isValid("1,234"); // Gibt false zurück - $validator->isValid("1.234"); // Gibt true zurück - -Wie man sieht wird die Eingabe, bei Verwendung eines Gebietsschemas, lokalisiert geprüft. Bei Verwendung der -englischen Schreibweise erhält man ``FALSE`` wenn das Gebietsschema eine andere Schreibweise erzwingt. - -Das Gebietsschema kann auch im Nachhinein gesetzt werden indem ``setLocale()`` verwendet wird, und empfangen indem -man ``getLocale()`` verwendet. - - diff --git a/docs/languages/de/modules/zend.json.basics.rst b/docs/languages/de/modules/zend.json.basics.rst deleted file mode 100644 index 6e5c4f978..000000000 --- a/docs/languages/de/modules/zend.json.basics.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. EN-Revision: none -.. _zend.json.basics: - -Grundlegende Verwendung -======================= - -Die Verwendung von ``Zend_Json`` bedingt den Gebrauch der beiden öffentlich verfügbaren, statischen Methoden -``Zend\Json\Json::encode()`` und ``Zend\Json\Json::decode()``. - -.. code-block:: php - :linenos: - - // Empfange einen Wert - $phpNative = Zend\Json\Json::decode($encodedValue); - - // Kodiere ihn für die Rückgabe an den Client: - $json = Zend\Json\Json::encode($phpNative); - -.. _zend.json.basics.prettyprint: - -Schön-drucken von JSON ----------------------- - -Manchmal ist es schwer *JSON* Daten zu durchsuchen welche von ``Zend\Json\Json::encode()`` erzeugt wurden da Sie keine -Leerzeichen oder Einrückungen enthalten. Um das einfacher zu machen erlaubt es ``Zend_Json`` *JSON* schön -ausgedruckt, in einem menschlich-lesbaren Format, zu erhalten, indem man ``Zend\Json\Json::prettyPrint()`` verwendet. - -.. code-block:: php - :linenos: - - // Kodieren und an den Client zurückzugeben: - $json = Zend\Json\Json::encode($phpNative); - if ($debug) { - echo Zend\Json\Json::prettyPrint($json, array("indent" => " ")); - } - -Das zweite optionale Argument von ``Zend\Json\Json::prettyPrint()`` ist ein Optionen Array. Die Option ``indent`` -erlaubt es einen String für die Einrückung zu definieren - standardmäßig ist das ein einzelnes Tabulator -Zeichen. - - diff --git a/docs/languages/de/modules/zend.json.introduction.rst b/docs/languages/de/modules/zend.json.introduction.rst deleted file mode 100644 index 99c5d5a3e..000000000 --- a/docs/languages/de/modules/zend.json.introduction.rst +++ /dev/null @@ -1,24 +0,0 @@ -.. EN-Revision: none -.. _zend.json.introduction: - -Einführung -========== - -``Zend_Json`` stellt komfortable Methoden für das Serialisieren von nativem *PHP* nach *JSON* und das Dekodieren -von *JSON* in natives *PHP* bereit. Für weitere Informationen zu *JSON* `besuche die Website des JSON Projekts`_. - -*JSON*, JavaScript Object Notation, kann für den Datenaustausch zwischen Javascript und anderen Sprachen verwendet -werden. Da *JSON* direkt in Javascript ausgewertet werden kann, ist es ein effizienteres und leichtgewichtigeres -Format für den Datenaustausch mit Javascript Clients als *XML*. - -Zusätzlich bietet ``Zend_Json`` einen nützlichen Weg um jeglichen willkürlichen *XML* formatierten String in -einem *JSON* formatierten String zu konvertieren. Dieses eingebaute Feature ermöglicht es *PHP* Entwicklern, -Enterprise Daten die im *XML* Format kodiert sind, in das *JSON* Format zu transformieren bevor es an Browser -basierende Ajax Client Anwendungen gesendet wird. Das bietet einen einfachen Weg um dynamisch Daten mit Server -seitigem Code zu konvertieren was unnötiges *XML* Parsen auf der Browser-seitigen Anwendung verhindert. Das -offeriert eine nette nützliche Funktion was wiederum in einfacheren Anwendungs-spezifischer Datenverarbeitungs -Techniken resultiert. - - - -.. _`besuche die Website des JSON Projekts`: http://www.json.org/ diff --git a/docs/languages/de/modules/zend.json.objects.rst b/docs/languages/de/modules/zend.json.objects.rst deleted file mode 100644 index 717e492aa..000000000 --- a/docs/languages/de/modules/zend.json.objects.rst +++ /dev/null @@ -1,103 +0,0 @@ -.. EN-Revision: none -.. _zend.json.advanced: - -Fortgeschrittene Verwendung von Zend_Json -========================================= - -.. _zend.json.advanced.objects1: - -JSON Objekte ------------- - -Bei der Kodierung von *PHP* Objekten nach *JSON* werden alle öffentlichen Eigenschaften dieses Objektes im *JSON* -Objekt kodiert. - -*JSON* erlaubt keine Objektreferenzen, deshalb sollte dafür Sorge getragen werden, dass keine Objekte mit -rekursiver Referenz kodiert werden. Wenn man Probleme mit Rekursion hat, erlauben ``Zend\Json\Json::encode()`` und -``Zend\Json\Encoder::encode()`` die Angabe eines optionalen, zweiten Parameters, um auf Rekursion zu prüfen; wenn -ein Objekt doppelt serialisiert wird, wird eine Ausnahme geworfen. - -Das Dekodieren von *JSON* Objekten stellt eine weitere Schwierigkeit dar, allerdings entsprechen Javascript Objekte -sehr einem assoziativen Array in *PHP*. Einige schlagen vor, dass ein Klassenbezeichner übergeben werden soll und -eine Objektinstanz dieser Klasse erstellt und mit den Schlüssel/Wert Paaren des *JSON* Objektes bestückt werden -soll; andere denken, dies könnte ein erhebliches Sicherheitsrisiko darstellen. - -Standardmäßig wird ``Zend_Json`` die *JSON* Objekte als assoziative Arrays dekodieren. Wenn du allerdings -wünscht, dass ein Objekt zurück gegeben wird, kannst du dies angeben: - -.. code-block:: php - :linenos: - - // Dekodiere JSON Objekte als PHP Objekte - $phpNative = Zend\Json\Json::decode($encodedValue, Zend\Json\Json::TYPE_OBJECT); - -Jedes dekodierte Objekte wird als ``stdClass`` Objekt mit Eigenschaften entsprechend der Schlüssel/Wert Paare der -*JSON* Notation zuürckgegeben. - -Die Empfehlung des Zend Framework ist, dass der einzelne Entwickler selber entscheiden sollte, wie er *JSON* -Objekte dekodiert. Wenn ein Objekt eines bestimmten Typs erstellt werden soll, kann es im Code des Entwicklers -erstellt werden und mit den dekodierten Werten unter Verwendung von ``Zend_Json`` bestückt werden. - -.. _zend.json.advanced.objects2: - -Kodierung von PHP Objekten --------------------------- - -Wenn man *PHP* Objekte kodiert, kann der Kodierungsmechanismus standardmäßig nur auf public Eigenschaften dieser -Objekte zugreifen. Wenn eine Methode ``toJson()`` an einem Objekte für die Kodierung implementiert ist, ruft -``Zend_Json`` diese Methode auf und erwartet dass das Objekt eine *JSON* Repräsentation seines internen Status -zurückgibt. - -.. _zend.json.advanced.internal: - -Interner Encoder/Decoder ------------------------- - -``Zend_Json`` hat zwei unterschiedliche Modi abhängig davon ob ext/json in der *PHP* Installation aktiviert ist -oder nicht. Wenn ext/json installiert ist, werden standardmäßig die Funktionen ``json_encode()`` und -``json_decode()`` für die Kodierung und Dekodierung von *JSON* verwendet. Wenn ext/json nicht installiert ist wird -eine Implentierung vom Zend Framework in *PHP* Code für die De-/Kodierung verwendet. Das ist naturgemäß -langsamer als die Verwendung der *PHP* Erweiterung, verhält sich aber identisch. - -Machmal will man trotzdem den internen De-/Kodierer verwenden, selbst wenn man ext/json installiert hat. Man kann -das durch folgenden Aufruf erzwingen: - -.. code-block:: php - :linenos: - - Zend\Json\Json::$useBuiltinEncoderDecoder = true: - -.. _zend.json.advanced.expr: - -JSON Ausdrücke --------------- - -Javascript macht häufige Verwendung von anonymen Funktions-Callbacks, welche in *JSON* Objektvariablen gespeichert -werden können. Trotzdem funktionieren Sie nur wenn Sie nicht in doppelten Anführungszeichen gesetzt werden, was -``Zend_Json`` natürlich macht. Mit der Unterstützung von Ausdrücken für ``Zend_Json`` können *JSON* Objekte -mit gültigen Javascript Callbacks kodiert werden. Das funktioniert sowohl für ``json_encode()`` als auch den -internen Kodierer. - -Ein Javascript Callback wird repräsentiert indem das ``Zend\Json\Expr`` Objekt verwendet wird. Es implementiert -das Wert-Objekt Pattern und ist nicht änderbar. Man kann den Javascript Ausdruck als erstes Argument des -Konstruktors setzen. Standardmäßig kodiert ``Zend\Json\Json::encode`` keine Javascript Callbacks, wenn man die Option -``enableJsonExprFinder`` auf ``TRUE`` setzt und der ``encode()`` Funktion übergibt. Aktiviert, unterstützt -arbeiten Ausdrücke für alle enthaltenen Ausdrücke in großen Objektstrukturen. Ein Verwendungsbeispiel würde -wie folgt aussehen: - -.. code-block:: php - :linenos: - - $data = array( - 'onClick' => new Zend\Json\Expr('function() { ' - . 'alert("Ich bin ein gültiger Javascript Callback ' - . 'erstellt von Zend_Json"); }'), - 'other' => 'no expression', - ); - $jsonObjectWithExpression = Zend\Json\Json::encode( - $data, - false, - array('enableJsonExprFinder' => true) - ); - - diff --git a/docs/languages/de/modules/zend.json.server.rst b/docs/languages/de/modules/zend.json.server.rst deleted file mode 100644 index 7c883de72..000000000 --- a/docs/languages/de/modules/zend.json.server.rst +++ /dev/null @@ -1,486 +0,0 @@ -.. EN-Revision: none -.. _zend.json.server: - -Zend\Json\Server - JSON-RPC Server -================================== - -``Zend\Json\Server`` ist eine `JSON-RPC`_ Server Implementierung. Sie unterstützt sowohl `die Spezifikation von -JSON-RPC Version 1`_ als auch die `Spezifikation der Version 2`_; zusätzlich bietet Sie eine *PHP* Implementierung -der `Spezifikation für Service Mapping Description (SMD)`_ Um Kunden von Services deren Metadaten anzubieten. - -JSON-RPC ist ein leichgewichtiges Remoce Procedure Call Protokoll das *JSON* für seine Nachrichten verwendet. -Diese JSON-RPC Implementierung folgt *PHP*'s `SoapServer`_ *API*. Das bedeutet das in einer typischen Situation -einfach folgendes getan wird: - -- Instanzieren des Server Objekts - -- Eine oder mehrere Funktionen und/oder Klassen/Objekte dem Server Objekt hinzufügen - -- Die Anfrage mit handle() ausführen - -``Zend\Json\Server`` verwendet :ref:`Zend\Server\Reflection ` um Reflektion durchzuführen -um den SMD zu erstellen und die Signaturen der Methodenaufrufe zu erzwingen. Als solche, ist es zwingend notwendig -das alle hinzugefügten Funktionen und/oder Klassenmethoden komplette *PHP* Docblocks dokumentiert haben mindestens -aber: - -- Alle Parameter und deren erwarteter Variablentypen - -- Den Variablentyp des Rückgabewertes - -``Zend\Json\Server`` hört aktuell nur auf POST Anfragen; glücklicherweise bieten die meisten JSON-RPC Client -Implementierungen die zur aktuell vorhanden sind nur POST Anfragen. Das macht es einfach den gleichen Endpunkt des -Servers so zu verwenden das er beide Anfragen behandelt sowie die Service SMD liefert, wie im nächsten Beispiel -gezeigt. - -.. _zend.json.server.usage: - -.. rubric:: Zend\Json\Server Verwendung - -Zuerst müssen wir eine Klasse definieren die wir über den JSON-RPC Server ausliefern wollen. Wir nennen die -Klasse 'Calculator', und definieren die Methoden 'add', 'substract', 'multiple', und 'divide': - -.. code-block:: php - :linenos: - - /** - * Calculator - Einfache Klasse zur Auslieferung über JSON-RPC - */ - class Calculator - { - /** - * Summe von zwei Variablen zurückgeben - * - * @param int $x - * @param int $y - * @return int - */ - public function add($x, $y) - { - return $x + $y; - } - - /** - * Differenz von zwei Variablen zurückgeben - * - * @param int $x - * @param int $y - * @return int - */ - public function subtract($x, $y) - { - return $x - $y; - } - - /** - * Produkt von zwei Variablen zurückgeben - * - * @param int $x - * @param int $y - * @return int - */ - public function multiply($x, $y) - { - return $x * $y; - } - - /** - * Division von zwei Variablen zurückgeben - * - * @param int $x - * @param int $y - * @return float - */ - public function divide($x, $y) - { - return $x / $y; - } - } - -Es ist zu beachten das jede Methode einen Docblock mit Einträgen besitzt die jeden Parameter und seinen Typ -beschreiben, sowie einen Eintrag für den Rückgabewert. Das ist **absolut kritisch** wenn ``Zend\Json\Server`` -verwendet wird, oder auch jede andere Server Komponente für diesen Zweck im Zend Framework. - -Erstellen wir also ein Skript um die Anfrage zu behandeln: - -.. code-block:: php - :linenos: - - $server = new Zend\Json\Server(); - - // Zeigt welche Funktionalität vorhanden ist: - $server->setClass('Calculator'); - - // Behandelt die Anfrage: - $server->handle(); - -Trotzdem behandelt das noch immer nicht das Problem der Rückgabe eines SMD damit der JSON-RPC Client die Methoden -selbstständig erkennen kann. Das kann getan werden indem die *HTTP* Anfragemethode erkannt wird, und anschließend -einige Metadaten des Servers spezifiziert werden: - -.. code-block:: php - :linenos: - - $server = new Zend\Json\Server(); - $server->setClass('Calculator'); - - if ('GET' == $_SERVER['REQUEST_METHOD']) { - // Zeigt den Endpunkt der URL, und die verwendete JSON-RPC Version: - $server->setTarget('/json-rpc.php') - ->setEnvelope(Zend\Json\Server\Smd::ENV_JSONRPC_2); - - // Den SMD holen - $smd = $server->getServiceMap(); - - // Den SMD an den Client zurückgeben - header('Content-Type: application/json'); - echo $smd; - return; - } - - $server->handle(); - -Wenn der JSON-RPC Server mit dem Dojo Toolkit verwendet wird muß auch ein spezielles Kompatibilitätsflag gesetzt -werden um sicherzustellen das die zwei korrekt miteinander arbeiten: - -.. code-block:: php - :linenos: - - $server = new Zend\Json\Server(); - $server->setClass('Calculator'); - - if ('GET' == $_SERVER['REQUEST_METHOD']) { - $server->setTarget('/json-rpc.php') - ->setEnvelope(Zend\Json\Server\Smd::ENV_JSONRPC_2); - $smd = $server->getServiceMap(); - - // Die Kompatibilität zu Dojo setzen: - $smd->setDojoCompatible(true); - - header('Content-Type: application/json'); - echo $smd; - return; - } - - $server->handle(); - -.. _zend.json.server.details: - -Fortgescrittene Details ------------------------ - -Obwohl das meiste an Funktionalität für ``Zend\Json\Server`` in :ref:`diesem Abschnitt ` -beschrieben wurde, ist noch weitere fortgeschrittenere Funktionalität vorhanden. - -.. _zend.json.server.details.zendjsonserver: - -Zend\Json\Server -^^^^^^^^^^^^^^^^ - -``Zend\Json\Server`` ist die Kernklasse von JSON-RPC; die bearbeitet alle Anfragen und gibt den Antwort Payload -zurück. Sie hat die folgenden Methoden: - -- ``addFunction($function)``: Spezifiziert eine benutzerdefinierte Funktion die dem Server hinzugefügt werden - soll. - -- ``setClass($class)``: Spezifiziert eine Klasse oder ein Objekt das dem Server hinzugefügt werden soll; alle - öffentlichen Methoden dieses Elemente werden als JSON-RPC Methoden bekanntgegeben. - -- ``fault($fault = null, $code = 404, $data = null)``: Erstellt und retourniert ein ``Zend\Json\Server\Error`` - Objekt. - -- ``handle($request = false)``: Behandelt eine JSON-RPC Anfrage; optional kann ein ``Zend\Json\Server\Request`` - Objekt für die Anpassung übergeben werden (standardmäßig wird eines erstellt). - -- ``getFunctions()``: Gibt eine Liste aller hinzugefügten Methoden zurück. - -- ``setRequest(Zend\Json\Server\Request $request)``: Spezifiziert ein Anfrageobjekt um es für den Server zu - verwenden. - -- ``getRequest()``: Empfängt das Anfrageobjekt das vom Server verwendet wird. - -- ``setResponse(Zend\Json\Server\Response $response)``: Setzt das Antwort Objekt das der Server verwendet. - -- ``getResponse()``: Empfängt das Anfrageobjekt das vom Server verwendet wird. - -- ``setAutoEmitResponse($flag)``: Zeigt ob der Server die Antworten und alle Header automatisch ausgeben sollte; - standardmäßig ist sie ``TRUE``. - -- ``autoEmitResponse()``: Stellt fest ob das automatische senden der Antwort eingeschaltet ist. - -- ``getServiceMap()``: Empfängt die Service Map Description in der Form eines ``Zend\Json\Server\Smd`` Objekts - -.. _zend.json.server.details.zendjsonserverrequest: - -Zend\Json\Server\Request -^^^^^^^^^^^^^^^^^^^^^^^^ - -Die JSON-RPC Anfrageumgebung ist in ein ``Zend\Json\Server\Request`` Objekt eingekapselt. Diese Objekt erlaubt es -die notwendigen Teile der JSON-RPC Anfrage zu setzen, inklusive der Anfrage ID, Parametern, und der JSON-RPC -spezifischen Version. Es hat die Möglichkeit sich selbst über *JSON* zu laden oder ein Set von Optionen, und kann -sich selbst über die ``toJson()`` Methode als *JSON* darstellen. - -Das Anfrage Objekt enthält die folgenden Methoden: - -- ``setOptions(array $options)``: Spezifiziert die Konfiguration des Objektes. ``$options`` kann Schlüssel - enthalten die jeglicher 'set' Methode entsprechen: ``setParams()``, ``setMethod()``, ``setId()`` und - ``setVersion()``. - -- ``addParam($value, $key = null)``: Fügt einen Parameter hinzu der mit einem Methodenaufruf verwendet wird. - Parameter können nur Werte sein, oder optional auch den Parameternamen enthalten. - -- ``addParams(array $params)``: Mehrere Parameter auf einmal hinzufügen; Ruft ``addParam()`` auf - -- ``setParams(array $params)``: Setzt alle Parameter auf einmal; überschreibt jeden existierenden Parameter. - -- ``getParam($index)``: Empfängt einen Parameter durch seine Position oder seinen Namen. - -- ``getParams()``: Empfängt alle Parameter auf einmal. - -- ``setMethod($name)``: Setzt die Methode die aufgerufen wird. - -- ``getMethod()``: Empfängt die Methode die aufgerufen wird. - -- ``isMethodError()``: Erkennt ob eine Anfrage fehlerhaft ist und einen Fehler produzieren würde, oder nicht. - -- ``setId($name)``: Setzt den Identifikator der Anfrage (durch den Client verwendet um Anfragen auf Antworten - abzubilden). - -- ``getId()``: Empfängt den Anfrage Identifikator. - -- ``setVersion($version)``: Setzt die Version der JSON-RPC Spezifikation der die Anfrage entspricht. Kann entweder - '1.0' oder '2.0' sein. - -- ``getVersion()``: Empfängt die Version der JSON-RPC Spezifikation die von der Anfrage verwendetwird. - -- ``loadJson($json)``: Lädt das Anfrageobjekt von einem *JSON* String. - -- ``toJson()``: Stellt den *JSON* String als Anfrage dar. - -Eine *HTTP* spezifische Version ist über ``Zend\Json\Server\Request\Http`` vorhanden. Diese Klasse empfängt eine -Anfrage über ``php://input`` und erlaubt den Zugriff auf die rohen *JSON* Daten über die ``getRawJson()`` -Methode. - -.. _zend.json.server.details.zendjsonserverresponse: - -Zend\Json\Server\Response -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Der JSON-RPC Antwort Payload ist in ein ``Zend\Json\Server\Response`` Objekt gekapselt. Diese Objekt erlaubt es den -Rückgabewert der Anfrage zu setzen, ob die Antwort ein Fehler ist oder nicht, den Anfrageindentifikator, die -Version der JSON-RPC Spezifikation der die Antwort entspricht, und optional die Servicemap. - -Das Antwortobjekt bietet die folgenden Methoden: - -- ``setResult($value)``: Setzt das Ergebnis der Antwort. - -- ``getResult()``: Empfängt das Antwortergebnis. - -- ``setError(Zend\Json\Server\Error $error)``: Setzt ein Fehlerobjekt. Wenn es gesetzt wird, wird es als Antwort - verwendet wenn *JSON* serialisiert wird. - -- ``getError()``: Empfängt das Fehlerobjekt, wenn vorhanden. - -- ``isError()``: Ob die Antwort eine Fehlerantwort ist oder nicht. - -- ``setId($name)``: Setzt den Antwortindentifikator (damit der Client die Antwort mit der Originalanfrage in - Verbindung bringt). - -- ``getId()``: Empfängt den Antwortidentifikator. - -- ``setVersion($version)``: Setzt die JSON-RPC Version der die Antwort entspricht. - -- ``getVersion()``: Empfängt die JSON-RPC Version der die Antwort entspricht. - -- ``toJson()``: Serialisiert die Antwort auf *JSON*. Wenn die Antwort eine Fehlerantwort ist, wird das Fehlerobjekt - serialisiert. - -- ``setServiceMap($serviceMap)``: Setzt das Servicemap Objekt für die Antwort. - -- ``getServiceMap()``: Empfängt das Servicemap Objekt, wenn es vorhanden ist. - -Eine *HTTP* spezifische Version ist über ``Zend\Json\Server\Response\Http`` vorhanden. Diese Klasse wird -entsprechende *HTTP* Header senden als auch die Antwort auf *JSON* zu serialisieren. - -.. _zend.json.server.details.zendjsonservererror: - -Zend\Json\Server\Error -^^^^^^^^^^^^^^^^^^^^^^ - -JSON-RPC hat ein spezielles Format für das Melden von Fehlerzuständen. Alle Fehler müssen mindestens, eine -Fehlermeldung und einen Fehlercode anbieten; optional können Sie zusätzliche Daten, wie ein Backtrace, anbieten. - -Fehlercodes sind von jenen abgeleitet die vom `vom XML-RPC EPI Projekt`_ empfohlen werden. ``Zend\Json\Server`` -fügt den richtigen Code basierend auf der Fehlerkondition zu. Für Anwendungsausnahmen wird der Code '-32000' -verwendet. - -``Zend\Json\Server\Error`` bietet die folgenden Methoden: - -- ``setCode($code)``: Setzt den Fehlercode: Wenn der Code nicht im akzeptierten Bereich der XML-RPC Fehlercodes - ist, wird -32000 hinzugefügt. - -- ``getCode()``: Empfängt den aktuellen Fehlercode. - -- ``setMessage($message)``: Setzt die Fehlernachricht. - -- ``getMessage()``: Empfängt die aktuelle Fehlernachricht. - -- ``setData($data)``: Setzt zusätzliche Daten die den Fehler genauer qualifizieren, wie ein Backtrace. - -- ``getData()``: Empfängt alle aktuellen zusätzlichen Fehlerdaten. - -- ``toArray()``: Weist den Fehler einem Array zu. Das Array enthält die Schlüssel 'code', 'message' und 'data'. - -- ``toJson()``: Weist den Fehler einer JSON-RPC Fehlerrepräsentation zu. - -.. _zend.json.server.details.zendjsonserversmd: - -Zend\Json\Server\Smd -^^^^^^^^^^^^^^^^^^^^ - -SMD steht für Service Mapping Description, ein *JSON* Schema das definiert wie ein Client mit einem speziellen Web -Service interagieren kann. Zu der Zeit wie das geschrieben wurde, wurde die `Spezifikation`_ noch nicht formell -ratifiziert, aber Sie ist bereits im Dojo Toolkit in Verwendung sowie in anderen JSON-RPC Kundenclients. - -Grundsätzlich bezeichnet eine Service Mapping Description die Methode des Transports (POST, ``GET``, *TCP*/IP, -usw.), den Envelopetyp der Anfrage (normalerweise basierend auf dem Protokoll des Servers), die Ziel *URL* des -Service Providers, und eine Mappe der vorhandenen Services. Im Fall von JSON-RPC ist die Service Mappe eine Liste -von vorhandenen Methoden wobei jede Methode die vorhandenen Parameter und deren Typen beschreibt, sowie den -erwarteten Typ des Rückgabewerts. - -``Zend\Json\Server\Smd`` bietet einen Objektorientierten Weg um Service Mappen zu erstellen. Grundsätzlich werden -Ihm Metadaten übergeben die den Service beschreiben indem Mutatoren verwendet und Services (Methoden und -Funktionen) spezifiziert werden. - -Die Servicebeschreibungen selbst sind typischerweise Instanzen von ``Zend\Json\Server\Smd\Service``; man kann -genauso alle Informationen als Array an die verschiedenen Servicemutatoren in ``Zend\Json\Server\Smd`` übergeben, -und es wird für einen ein Serviceobjekt instanziieren. Die Serviceobjekte enthalten Informationen wie den Namen -des Services (typischerweise die Funktion oder den Methodennamen), die Parameter (Namen, Typen und Position), und -den Typ des Rückgabewerts. Optionen kann jedes Service sein eigenes Ziel und Envelope haben, obwohl diese -Funktionalität selten verwendet wird. - -``Zend\Json\Server`` führt all das im Hintergrund durch, indem Reflektion auf den hinzugefügten Klassen und -Funktionen verwendet wird; man sollte seine eigenen Service Maps erstellen wenn man eigene Funktionalitäten -anbieten will welche die Introspektion von Klassen und Funktionen nicht bieten kann. - -Die vorhandenen Methoden in ``Zend\Json\Server\Smd`` enthalten: - -- ``setOptions(array $options)``: Erstellt ein SMD Objekt von einem Array an Optionen. Alle Mutatoren (Methoden die - mit 'set' beginnen) können als Schlüssel verwendet werden. - -- ``setTransport($transport)``: Setzt den Transport der für den Zugriff auf das Service verwendet werden soll; - aktuell wird nur POST unterstützt. - -- ``getTransport()``: Empfängt den aktuellen Transport des Services. - -- ``setEnvelope($envelopeType)``: Setzt den aktuelle Anfrageenvelope der verwendet werden sollte um auf den Service - zuzugreifen. Aktuell werden die Konstanten ``Zend\Json\Server\Smd::ENV_JSONRPC_1`` und - ``Zend\Json\Server\Smd::ENV_JSONRPC_2`` verwendet. - -- ``getEnvelope()``: Empfängt den aktuellen Anfrageenvelope. - -- ``setContentType($type)``: Setzt den Contenttype den Anfragen verwenden sollten (standardmäßig ist das - 'application/json'). - -- ``getContentType()``: Empfängt den aktuellen Contenttype für Anfragen an den Service. - -- ``setTarget($target)``: Setzt den aktuellen *URL* Endpunkt für den Service. - -- ``getTarget()``: Empfängt den *URL* Endpunkt für den Service. - -- ``setId($id)``: Tpischerweise ist das der *URL* Endpunkt des Services (der selbe wie das Ziel). - -- ``getId()``: Empfängt die ServiceID (typischerweise der *URL* Endpunkt des Services). - -- ``setDescription($description)``: Setzt eine Servicebeschreibung (typischerweise nähere Informationen die den - Zweck des Services beschreiben). - -- ``getDescription()``: Empfängt die Servicebeschreibung. - -- ``setDojoCompatible($flag)``: Setzt ein Flag das indiziert ob das SMD mit dem Dojo Toolkit kompatibel ist oder - nicht. Wenn es ``TRUE`` ist, dann ist das erzeugte *JSON* SMD so formatiert das es dem Format entspricht das - Dojo's JSON-RPC Client erwartet. - -- ``isDojoCompatible()``: Gibt den Wert des Dojokompatibilitätsflags zurück (Standardmäßig ``FALSE``). - -- ``addService($service)``: Fügt ein Service der Mappe hinzu. Kann ein Array von Informationen sein die an den - Konstruktor von ``Zend\Json\Server\Smd\Service`` übergeben werden, oder eine Instanz dieser Klasse. - -- ``addServices(array $services)``: Fügt mehrere Services auf einmal hinzu. - -- ``setServices(array $services)``: Fügt mehrere Serices auf einmal hinzu, und überschreibt alle vorher gesetzten - Services. - -- ``getService($name)``: Gibt ein Service durch seinen Namen zurück. - -- ``getServices()``: Gibt alle hinzugefügten Services zurück. - -- ``removeService($name)``: Entfernt ein Service von der Mappe. - -- ``toArray()``: Weißt die Service Mappe einem Array zu. - -- ``toDojoArray()``: Weißt die Service Mappe einem Array zu das mit dem Dojo Toolkit kompatibel ist. - -- ``toJson()``: Weißt die Service Mappe einer *JSON* Repräsentation zu. - -``Zend\Json\Server\Smd\Service`` hat die folgenden Methoden: - -- ``setOptions(array $options)``: Setzt den Objektstatus durch ein Array. Jeder Mutator (Methoden die mit 'set' - beginnen, kann als Schlüssel verwendet und über diese Methode gesetzt werden. - -- ``setName($name)``: Setzt den Namen des Services (typischerweise die Funktion oder den Methodennamen). - -- ``getName()``: Empfängt den Servicenamen. - -- ``setTransport($transport)``: Setzt den Transport des Services (aktuell werden nur Transporte unterstützt die in - ``Zend\Json\Server\Smd`` erlaubt sind). - -- ``getTransport()``: Empfängt den aktuellen Transport. - -- ``setTarget($target)``: Setzt den *URL* Endpunkt des Services (typischerweise ist das der selbe wir im gesamten - SMD welchem der Service hinzugefügt wird). - -- ``getTarget()``: Gibt den *URL* Endpunkt des Services zurück. - -- ``setEnvelope($envelopeType)``: Setzt den Serviceenvelope (aktuell werden nur Envelopes unterstützt die in - ``Zend\Json\Server\Smd`` erlaubt sind). - -- ``getEnvelope()``: Empfängt den Typ des Serviceenvelopes. - -- ``addParam($type, array $options = array(), $order = null)``: Fügt dem Service einen Parameter hinzu. - Standardmäßig ist nur der Parametertyp notwendig. Trotzdem kann die Reihenfolge spezifiziert werden sowie auch - Optionen wie: - - - **name**: Der Name des Parameters - - - **optional**: Ob der Parameter optional ist oder nicht - - - **default**: Ein Standardwert für diesen Parameter - - - **description**: Ein Text der den Parameter beschreibt - -- ``addParams(array $params)``: Fügt verschiedene Parameter auf einmal hinzu; jeder Parameter sollte ein - Assoziatives Array sein das mindestens den Schlüssel 'type' enthält welches den Typ des Parameters beschreibt, - und optinal den Schlüssel 'order'; jeden andere Schlüssel wird als ``$options`` an ``addOption()`` übergeben. - -- ``setParams(array $params)``: Setzt viele Parameter aus einmal, überschreibt alle aktuellen Parameter auf - einmal. - -- ``getParams()``: Empfängt alle aktuell gesetzten Parameter. - -- ``setReturn($type)``: Setzt den Type des Rückgabewertes des Services. - -- ``getReturn()``: Empfängt den Typ des Rückgabewertes des Services. - -- ``toArray()``: Weist das Service an ein Array zu. - -- ``toJson()``: Weist das Service einer *JSON* Repräsentation zu. - - - -.. _`JSON-RPC`: http://groups.google.com/group/json-rpc/ -.. _`die Spezifikation von JSON-RPC Version 1`: http://json-rpc.org/wiki/specification -.. _`Spezifikation der Version 2`: http://groups.google.com/group/json-rpc/web/json-rpc-1-2-proposal -.. _`Spezifikation für Service Mapping Description (SMD)`: http://groups.google.com/group/json-schema/web/service-mapping-description-proposal -.. _`SoapServer`: http://www.php.net/manual/en/class.soapserver.php -.. _`vom XML-RPC EPI Projekt`: http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php -.. _`Spezifikation`: http://groups.google.com/group/json-schema/web/service-mapping-description-proposal diff --git a/docs/languages/de/modules/zend.json.xml2json.rst b/docs/languages/de/modules/zend.json.xml2json.rst deleted file mode 100644 index b0334f87d..000000000 --- a/docs/languages/de/modules/zend.json.xml2json.rst +++ /dev/null @@ -1,106 +0,0 @@ -.. EN-Revision: none -.. _zend.json.xml2json: - -XML zu JSON Konvertierung -========================= - -``Zend_Json`` bietet eine bequeme Methode für das transformieren von *XML* formatierten Daten in das *JSON* -Format. Dieses Feature wurde inspiriert durch einen `IBM developerWorks Artikel`_. - -``Zend_Json`` enthält eine statische Funktion die ``Zend\Json\Json::fromXml()`` heißt. Diese Funktion erzeugt *JSON* -von einer angegebenen *XML* Eingabe. Diese Funktion nimmt jeglichen beliebigen *XML* String als Eingabe Parameter. -Sie nimmt auch einen optionalen Boolschen Eingabe Parameter um die Konvertierungslogik zu instruieren ob *XML* -Attribute wärend des Konvertierungsprozesses ignoriert werden sollen oder nicht. Wenn dieser optionale -Eingabeparameter nicht angegeben wurde, besteht das Standardverhalten darun *XML* Attribute zu ignorieren. Der -Funktionsaufruf wird wie folgt durchgeführt: - -.. code-block:: php - :linenos: - - // Die fromXml Funktion nimmt einfach einen String der XML - // Inhalt als Eingabe enthält. - $jsonContents = Zend\Json\Json::fromXml($xmlStringContents, true); - -Die ``Zend\Json\Json::fromXml()`` Funktion führt die Konvertierung des *XML* formatierten String Eingabeparameters -durch und gibt eine äquivalente *JSON* formatierte String Ausgabe zurück. Im Fall eines *XML* Eingabeformat -Fehlers oder eines Konvertierungslogik Fehlers wird diese Funktion eine Ausnahme werfen. Die Konvertierungslogik -verwendet rekursive Techniken um den *XML* Baum zu durchlaufen. Sie unterstützt Rekursionen die bis zu 25 Levels -tief sind. Über diese Tiefe hinweg wird Sie eine ``Zend\Json\Exception`` werfen. Es gibt verschiedenste *XML* -Dateien mit unterschiedlichem Grad an Komplexität die im tests Verzeichnis des Zend Frameworks vorhanden sind. Sie -können verwendet werden um die Funktionalität des xml2json Features zu testen. - -Das folgende ist ein einfaches Beispiel das beides zeigt, den *XML* Eingabe String und den *JSON* Ausgabe String -der als Ergebnis von der ``Zend\Json\Json::fromXml()`` Funktion zurückgegeben wird. Dieses Beispiel verwendet den -optionalen Funktionsparameter um die *XML* Attribute nicht wärend der Konvertierung zu ignorieren. Demzufolge kann -man sehen das der resultierende *JSON* String eine Repräsentation der *XML* Attribute enthält die im *XML* -Eingabestring vorhanden sind. - -*XML* Eingabe String der an die ``Zend\Json\Json::fromXml()`` Funktion übergeben wird: - -.. code-block:: php - :linenos: - - - - - Code Generation in Action - JackHerrington - Manning - - - - PHP Hacks - JackHerrington - O'Reilly - - - - Podcasting Hacks - JackHerrington - O'Reilly - - - -*JSON* Ausgabe String der von der ``Zend\Json\Json::fromXml()`` Funktion zurückgegeben wird: - -.. code-block:: php - :linenos: - - { - "books" : { - "book" : [ { - "@attributes" : { - "id" : "1" - }, - "title" : "Code Generation in Action", - "author" : { - "first" : "Jack", "last" : "Herrington" - }, - "publisher" : "Manning" - }, { - "@attributes" : { - "id" : "2" - }, - "title" : "PHP Hacks", "author" : { - "first" : "Jack", "last" : "Herrington" - }, - "publisher" : "O'Reilly" - }, { - "@attributes" : { - "id" : "3" - }, - "title" : "Podcasting Hacks", "author" : { - "first" : "Jack", "last" : "Herrington" - }, - "publisher" : "O'Reilly" - } - ]} - } - -Weitere Details über das xml2json Feature können im originalen Proposal selbst gefunden werden. Siehe -`Zend_xml2json proposal`_. - - - -.. _`IBM developerWorks Artikel`: http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/ -.. _`Zend_xml2json proposal`: http://tinyurl.com/2tfa8z diff --git a/docs/languages/de/modules/zend.ldap.api.ldap.attribute.rst b/docs/languages/de/modules/zend.ldap.api.ldap.attribute.rst deleted file mode 100644 index 3f6266af2..000000000 --- a/docs/languages/de/modules/zend.ldap.api.ldap.attribute.rst +++ /dev/null @@ -1,75 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.api.reference.zend-ldap-attribute: - -Zend\Ldap\Attribute -=================== - -``Zend\Ldap\Attribute`` ist eine Helfer Klasse die nur Statische Methoden anbietet für die Manipulation von Arrays -die zur Struktur passen welche in den ``Zend_Ldap`` Data Änderungs Methoden verwendet werden und zum Datenformat -das vom ``Zend_Ldap`` Server benötigt wird. *PHP* Datentypen werden wie folgt konvertiert: - -**string** - Es wird keine Konvertierung durchgeführt. - -**integer und float** - Der Wert wird zu einem String konvertiert. - -**boolean** - ``TRUE`` wird zu **'TRUE'** konvertiert und ``FALSE`` zu **'FALSE'** - -**object und array** - Diese Werte werden zu einem String konvertiert indem ``serialize()`` verwendet wird. - -**resource** - Wenn eine *stream* Ressource angegeben wurde, werden die Daten durch den Aufruf von ``stream_get_contents()`` - geholt. - -**others** - Alle anderen Datentypen (speziell nicht-Stream Ressourcen) werden verweigert. - -Beim Lesen von Attributwerten werden die folgenden Konvertierungen durchgeführt: - -**'TRUE'** - Wird zu ``TRUE`` konvertiert. - -**'FALSE'** - Wird zu ``FALSE`` konvertiert. - -**others** - Alle anderen Strings werden nicht automatisch konvertiert und so wie Sie sind übergeben. - -.. _zend.ldap.api.reference.zend-ldap-attribute.table: - -.. table:: Zend\Ldap\Attribute API - - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Methode |Beschreibung | - +================================================================================================================+=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |void setAttribute(array &$data, string $attribName, mixed $value, boolean $append) |Setzt die Attribute $attribName in $data auf den Wert $value. Wenn $appendTRUE ist (standardmäßig FALSE) wird $value an das Attribut angehängt. $value kann ein skalarer Wert oder ein Array von skalaren Werten sein. Eine Konvertierung wird durchgeführt. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array|mixed getAttribute(array $data, string $attribName, integer|null $index) |Gibt das Attribut $attribName von $data zurück. Wenn $indexNULL ist (Standardwert) wird ein Array zurückgegeben welches alle Werte für das angegebene Attribut enthält. Ein leeres Array wird zurückgegeben wenn das Attribut im angegebenen Array nicht existiert. Wenn ein Integer für den Index spezifiziert wird, dann wird der korrespondierende Wert mit dem gegebenen Index zurückgegeben. Wenn der Index ausserhalb der Grenzen ist wird NULL zurückgegeben. Eine Konvertierung wird durchgeführt. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |boolean attributeHasValue(array &$data, string $attribName, mixed|array $value) |Prüft ob das Attribut $attribName in $data den Wert oder die Werte welche in $value angegeben wurden hat. Die Methode gibt nur dann TRUE zurück wenn alle Werte von $value im Attribut enthalten sind. Der Vergleich wird strikt durchgeführt (der Datentyp wird respektiert). | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |void removeDuplicatesFromAttribute(array &$data, string $attribName) |Entfernt alle Duplikate vom Attribut $attribName in $data. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |void removeFromAttribute(array &$data, string $attribName, mixed|array $value) |Entfernt den Wert oder die Werte vom Attribut $attribName die in $value angegeben werden von $data. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string|null convertToLdapValue(mixed $value) |Konvertiert einen PHP Datentyp in seine LDAP Repräsentation. Siehe die Einleitung für Details. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |mixed convertFromLdapValue(string $value) |Konvertiert einen LDAP Wert in seinen PHP Datentyp. Siehe die Einleitung für Details. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string|null convertToLdapDateTimeValue(integer $value, boolean $utc) |Konvertiert einen Zeitpunkt in seine LDAP Datum und Zeit Repräsentation. Wenn $utcTRUE ist (standardmäßig ist es FALSE) dann wird der resultierende LDAP Datum und Zeit String in UTC sein, andernfalls wird ein lokaler Datum und Zeit String zurückgegeben. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |integer|null convertFromLdapDateTimeValue(string $value) |Konvertiert eine Datum und Zeit Repräsentation für LDAP in einen Zeitpunkt. Die Methode gibt NULL zurück wenn $value nicht in einen PHP Zeitpunkt zurückkonvertiert werden kann. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |void setPassword(array &$data, string $password, string $hashType, string $attribName) |Setzt ein LDAP Passwort für das Attribut $attribName in $data zurück. $attribName ist standardmäßig 'userPassword' welches das standardmäßige Attribut für Passwörter ist. Der Hash für das Passwort kann mit $hashType spezifiziert werden. Der Standardwert ist Zend\Ldap\Attribute::PASSWORD_HASH_MD5 wobei Zend\Ldap\Attribute::PASSWORD_HASH_SHA die andere Möglichkeit ist. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string createPassword(string $password, string $hashType) |Erstellt ein LDAP Passwort. Der Hash für das Passwort kann mit $hashType spezifiziert werden. Der Standardwert ist Zend\Ldap\Attribute::PASSWORD_HASH_MD5 wobei Zend\Ldap\Attribute::PASSWORD_HASH_SHA die andere Möglichkeit ist. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |void setDateTimeAttribute(array &$data, string $attribName, integer|array $value, boolean $utc, boolean $append)|Setzt das Attribut $attribName in $data auf den Datum und Zeitwert $value. Wenn $appendTRUE ist (standardmäßig ist er FALSE) dann wird $value an das Attribut angehängt. $value kann ein Integerwert oder ein Array von Integerwerten sein. Die Konvertierung von Datum und Zeit wird entsprechend zu Zend\Ldap\Attribute::convertToLdapDateTimeValue() durchgeführt. | - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array|integer getDateTimeAttribute(array $data, string $attribName, integer|null $index) |Gibt das Datum und Zeit Attribut $attribName von $data zurück. Wenn $indexNULL ist (das ist der Standardwert) dann wird ein Array zurückgegeben welches alle Datum und Zeitwerte für das angegebene Attribut enthält. Ein leeres Array wird zurückgegeben wenn das Attribut im angegebenen Array nicht existiert. Wenn ein Integer Index spezifiziert wird, dann wird der korrespondierende Datum und Zeitwert vom angegebenen Index zurückgegeben. Wenn der Index ausserhalb der Grenzen ist dann wird NULL zurückgegeben. Die Konvertierung von Datum und Zeit wird entsprechend zu Zend\Ldap\Attribute::convertFromLdapDateTimeValue() durchgeführt.| - +----------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - diff --git a/docs/languages/de/modules/zend.ldap.api.ldap.dn.rst b/docs/languages/de/modules/zend.ldap.api.ldap.dn.rst deleted file mode 100644 index 53f676414..000000000 --- a/docs/languages/de/modules/zend.ldap.api.ldap.dn.rst +++ /dev/null @@ -1,86 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.api.reference.zend-ldap-dn: - -Zend\Ldap\Dn -============ - -``Zend\Ldap\Dn`` bietet ein objektorientiertes Interface für die Manipulation von *LDAP* Distinguished Names (DN). -Der Parameter ``$caseFold`` wird in verschiedenen Methoden verwendet um festzustellen wie DN Attribute betreffend -Ihres Schreibweise behandelt werden. Die erlaubten Werte für diesen Parameter sind: - -**Zend\Ldap\Dn::ATTR_CASEFOLD_NONE** - Es wird keine Änderung der Schreibweise durchgeführt. - -**Zend\Ldap\Dn::ATTR_CASEFOLD_UPPER** - Alle Attribute werden zur Großschreibung konvertiert. - -**Zend\Ldap\Dn::ATTR_CASEFOLD_LOWER** - Alle Attribute werden zur Kleinschreibung konvertiert. - -Die Standardmäßige Schreibweise ist ``Zend\Ldap\Dn::ATTR_CASEFOLD_NONE`` und kann mit -``Zend\Ldap\Dn::setDefaultCaseFold()`` gesetzt werden. Jede Instanz von ``Zend\Ldap\Dn`` kann Ihre eigenen -Einstellungen für die Schreibweise haben. Wenn der Parameter ``$caseFold`` beim Methodenaufruf nicht angegeben -wird dann ist er standardmäßig die Einstellung der Schreibweise von der Instanz. - -Die Klasse implementiert *ArrayAccess* um den indizierten Zugriff auf die unterschiedlichen Teile der DN zu -gestatten. Die *ArrayAccess* Methoden verweisen für *offsetGet(integer $offset)* auf ``Zend\Ldap\Dn::get($offset, -1, null)``, für ``offsetSet()`` auf ``Zend\Ldap\Dn::set($offset, $value)`` und für ``offsetUnset()`` auf -``Zend\Ldap\Dn::remove($offset, 1)``. ``offsetExists()`` prüft einfach ob der Index innerhalb der Grenzen ist. - -.. _zend.ldap.api.reference.zend-ldap-dn.table: - -.. table:: Zend\Ldap\Dn API - - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Methode |Beschreibung | - +==============================================================================+=======================================================================================================================================================================================================================================================================================================================================================================================================+ - |Zend\Ldap\Dn factory(string|array $dn, string|null $caseFold) |Erstellt eine Zend\Ldap\Dn Instanz von einem Array oder String. Das Array muß der unter Zend\Ldap\Dn::implodeDn() beschriebenen Arraystruktur entsprechen. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn fromString(string $dn, string|null $caseFold) |Erstellt eine Zend\Ldap\Dn Instanz von einem String. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn fromArray(array $dn, string|null $caseFold) |Erstellt eine Zend\Ldap\Dn Instanz von einem Array. Das Array muß der Arraystruktur entsprechen welche unter Zend\Ldap\Dn::implodeDn() beschrieben ist. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array getRdn(string|null $caseFold) |Gibt den RDN des aktuellen DN zurück. Der zurückgegebene Wert ist ein Array wobei die Namen der Attribute von RDN im Schlüssel gesetzt sind und die RDN Attribute als Wert. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string getRdnString(string|null $caseFold) |Gibt den RDN vom aktuellen DN zurück. Der zurückgegebene Wert ist ein String. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn getParentDn(integer $levelUp) |Gibt den DN des aktuellen DN Knotens, $levelUp Levels höher, zurück. $levelUp ist standardmäßig 1. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array get(integer $index, integer $length, string|null $caseFold) |Gibt einen Teil des aktuellen DN zurück der von $index und $length eingegrenzt wird. $index beginnt mit 0 und der DN Teil von links. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn set(integer $index, array $value) |Ersetzt den DN Teil im aktuellen DN. Diese Operation manipuliert die aktuelle Instanz. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn remove(integer $index, integer $length) |Entfernt einen DN Teil vom aktuellen DN. Diese Operation manipuliert die aktuelle Instanz. $length ist standardmäßig 1. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn append(array $value) |Fügt einen DN Teil zum aktuellen DN hinzu, Diese Operation manipuliert die aktuelle Instanz. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn prepend(array $value) |Fügt einen DN Teil vor dem aktuellen DN hinzu. Diese Operation manipuliert die aktuelle Instanz. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Dn insert(integer $index, array $value) |Fügt einen DN Teil nach dem Index $index in den aktuellen DN ein. Diese Operation manipuliert die aktuelle Instanz. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |void setCaseFold(string|null $caseFold) |Setzt die Option für die Schreibweise auf der aktuellen DN Instanz. Wenn $caseFoldNULL ist dann wird die standardmäßige Einstellung der Schreibweise (standardmäßig ist Zend\Ldap\Dn::ATTR_CASEFOLD_NONE oder über Zend\Ldap\Dn::setDefaultCaseFold() gesetzt) für die aktuelle Instanz gesetzt. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string toString(string|null $caseFold) |Gibt den DN als String zurück. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array toArray(string|null $caseFold) |Gibt den DN als Array zurück. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string \__toString() |Gibt den DN als String zurück - verweist auf Zend\Ldap\Dn::toString(null). | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |void setDefaultCaseFold(string $caseFold) |Setzt die standardmäßige Option für die Schreibweise welche von allen Instanzen bei der Erstellung standardmäßig verwendet wird. Bereits existierende Instanzen sind von dieser Einstellung nicht betroffen. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array escapeValue(string|array $values) |Escapt einen DN Wert entsprechend RFC 2253. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array unescapeValue(string|array $values) |Macht die Konvertierung von Zend\Ldap\Dn::escapeValue() rückgängig. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |array explodeDn(string $dn, array &$keys, array &$vals, string|null $caseFold)|Zerteilt den DN $dn in ein Array das alle Teile des angegebenen DN enthält. $keys sind optional die DN Schlüssel (z.B. CN, OU, DC, ...). $vals sind optional die DN Werte. Das zurückgegebene Array ist vom Typ array( array("cn" => "name1", "uid" => "user"), array("cn" => "name2"), array("dc" => "example"), array("dc" => "org") ) für einen DN von cn=name1+uid=user,cn=name2,dc=example,dc=org.| - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |boolean checkDn(string $dn, array &$keys, array &$vals, string|null $caseFold)|Prüft ob der gegebene DN $dn fehlerhaft ist. Wenn $keys oder $keys und $vals angegeben sind, werden diese Arrays mit dem betreffenden DN Schlüssel und Werten gefüllt. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string implodeRdn(array $part, string|null $caseFold) |Gibt den DN Teil in der Form $attribute=$value zurück. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |string implodeDn(array $dnArray, string|null $caseFold, string $separator) |Implodiert ein Array der Form die von Zend\Ldap\Dn::explodeDn() kommt in einen DN String. $separator ist standardmäßig ',' aber einige LDAP Server verstehen auch ';'. $dnArray muß von folgendem Typ sein: array( array("cn" => "name1", "uid" => "user"), array("cn" => "name2"), array("dc" => "example"), array("dc" => "org") ) | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |boolean isChildOf(string|Zend\Ldap\Dn $childDn, string|Zend\Ldap\Dn $parentDn)|Prüft ob der angegebene $childDn unter dem $parentDn Subbaum ist. | - +------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - diff --git a/docs/languages/de/modules/zend.ldap.api.ldap.filter.rst b/docs/languages/de/modules/zend.ldap.api.ldap.filter.rst deleted file mode 100644 index 5c316c0be..000000000 --- a/docs/languages/de/modules/zend.ldap.api.ldap.filter.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.api.reference.zend-ldap-filter: - -Zend\Ldap\Filter -================ - -.. _zend.ldap.api.reference.zend-filter.table: - -.. table:: Zend\Ldap\Filter API - - +--------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Methode |Beschreibung | - +========================================================================================================+===============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |Zend\Ldap\Filter equals(string $attr, string $value) |Erstellt einen 'gleich' Filter: (attr=value). | - +--------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Filter begins(string $attr, string $value) |Erstellt einen 'beginnt mit' Filter: (attr=value*). | - +--------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Filter ends(string $attr, string $value) |Erstellt einen 'endet mit' Filter: (attr=*value). | - +--------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Filter contains(string $attr, string $value) |Erstellt einen 'enthält' Filter: (attr=*value*). | - +--------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Filter greater(string $attr, string $value) |Erstellt einen 'größer' Filter: (attr>value). | - +--------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Filter greaterOrEqual(string $attr, string $value) |Erstellt einen 'größer oder gleich' Filter: (attr>=value). | - +--------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Zend\Ldap\Filter less(string $attr, string $value) |Erstellt einen 'kleiner' Filter: (attr 's0.foo.net', - 'username' => 'CN=user1,DC=foo,DC=net', - 'password' => 'pass1', - 'bindRequiresDn' => true, - 'accountDomainName' => 'foo.net', - 'baseDn' => 'OU=Sales,DC=foo,DC=net', - ); - $ldap = new Zend\Ldap\Ldap($options); - $acctname = $ldap->getCanonicalAccountName('abaker', - Zend\Ldap\Ldap::ACCTNAME_FORM_DN); - echo "$acctname\n"; - -Wenn man Microsoft AD verwendet ist ein einfaches Beispiel: - -.. code-block:: php - :linenos: - - $options = array( - 'host' => 'dc1.w.net', - 'useStartTls' => true, - 'username' => 'user1@w.net', - 'password' => 'pass1', - 'accountDomainName' => 'w.net', - 'accountDomainNameShort' => 'W', - 'baseDn' => 'CN=Users,DC=w,DC=net', - ); - $ldap = new Zend\Ldap\Ldap($options); - $acctname = $ldap->getCanonicalAccountName('bcarter', - Zend\Ldap\Ldap::ACCTNAME_FORM_DN); - echo "$acctname\n"; - -Es ist zu beachten das die ``getCanonicalAccountName()`` Methode verwendet wird um den DN Account zu empfangen da -jenes das einige ist was das meiste in diesem kleinen Code zeigt der aktuell in dieser Klasse vorhanden ist. - -.. _zend.ldap.introduction.theory-of-operations.automatic-username-canonicalization: - -Automatische Kanonisierung des Benutzernamens beim Binden -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wenn *bind()* mit einem nicht-DN Benutzernamen aufgerufen wird aber *bindRequiresDN* ``TRUE`` ist und kein -Benutzername in DN-Form als Option angegeben wurde, dann wird die Server-Bindung fehlschlagen. Wenn allerdings ein -Benutzername in DN-Form im Optionen-Array übergeben wurde, wird ``Zend_Ldap`` sich zuerst mit diesem Benutzernamen -an den Server binden, den Account DN für den Benutzernamen empfangen der bei *bind()* angegeben wurde und dann mit -diesem zum DN verbinden. - -Dieses Verhalten ist kritisch für :ref:`Zend\Auth\Adapter\Ldap `, welches den vom Benutzer -angegebenen Benutzernamen direkt an ``bind()`` übergibt. - -Das folgende Beispiel zeigt wie der nicht-DN Benutzername '**abaker**' mit ``bind()`` verwendet werden kann: - -.. code-block:: php - :linenos: - - $options = array( - 'host' => 's0.foo.net', - 'username' => 'CN=user1,DC=foo,DC=net', - 'password' => 'pass1', - 'bindRequiresDn' => true, - 'accountDomainName' => 'foo.net', - 'baseDn' => 'OU=Sales,DC=foo,DC=net', - ); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind('abaker', 'moonbike55'); - $acctname = $ldap->getCanonicalAccountName('abaker', - Zend\Ldap\Ldap::ACCTNAME_FORM_DN); - echo "$acctname\n"; - -Der Aufruf von ``bind()`` in diesem Beispiel sieht das der Benutzer '**abaker**' nicht in DN Form ist, findet das -**bindRequiresDn** ``TRUE`` ist, verwendet '``CN=user1,DC=foo,DC=net``' und '**pass1**' um zu Binden, empfängt den -DN für '**abaker**', entbindet und Bindet dann nochmals mit dem neu erkannten '``CN=Alice -Baker,OU=Sales,DC=foo,DC=net``'. - -.. _zend.ldap.introduction.theory-of-operations.account-name-canonicalization: - -Kanonisierung des Account Namens -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Optionen **accountDomainName** und **accountDomainNameShort** werden für zwei Zwecke verwendet: (1) bieten Sie -multi-Domain Authentifizierung und Failover Möglichkeiten, und (2) werden Sie auch verwendet um Benutzernamen zu -kanonisieren. Speziell Namen werden in die Form kanonisiert die in der **accountCanonicalForm** Option spezifiziert -ist. Diese Option kann einen der folgenden Werte enthalten: - -.. _zend.ldap.using.theory-of-operation.account-name-canonicalization.table: - -.. table:: Optionen für accountCanonicalForm - - +-----------------------+----+-----------------------------------------+ - |Name |Wert|Beispiel | - +=======================+====+=========================================+ - |ACCTNAME_FORM_DN |1 |CN=Alice Baker,CN=Users,DC=example,DC=com| - +-----------------------+----+-----------------------------------------+ - |ACCTNAME_FORM_USERNAME |2 |abaker | - +-----------------------+----+-----------------------------------------+ - |ACCTNAME_FORM_BACKSLASH|3 |EXAMPLE\\abaker | - +-----------------------+----+-----------------------------------------+ - |ACCTNAME_FORM_PRINCIPAL|4 |abaker@example.com | - +-----------------------+----+-----------------------------------------+ - -Die Standardmäßige Kanonisierung hängt davon ab welche Optionen für Account Domain Namen angegeben wurden. Wenn -**accountDomainNameShort** angegeben wurde, ist der Standardwert von **accountCanonicalForm** -``ACCTNAME_FORM_BACKSLASH``. Andernfall, wenn **accountDomainName** angegeben wurde, ist der Standardwert -``ACCTNAME_FORM_PRINCIPAL``. - -Die Kanonisierung des Account Namens stellt sicher das der String der zur Identifikation des Accounts verwendet -wird konsistent ist, unabhängig davon was an ``bind()`` übergeben wurde. Wenn der Benutzer, zum Beispiel, den -Account Namen ``abaker@example.com`` oder nur **abaker** angibt, und **accountCanonicalForm** auf 3 gesetzt ist, -wird der resultierende kanonisierte Name **EXAMPLE\\abaker** sein. - -.. _zend.ldap.introduction.theory-of-operations.multi-domain-failover: - -Multi-Domain Authentifizierung und Failover -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die Komponente ``Zend_Ldap`` macht von sich aus keinen Versuch sich bei mehreren Servern zu authentifizieren. -Trotzdem wurde ``Zend_Ldap`` speziell dafür designt um einfach durch ein Array von Array von angebotenen Optionen -zu iterieren und sich mit jedem Server zu binden. Wie oben beschrieben wird ``bind()`` automatisch jeden Namen -kanonisieren, damit es egal ist ob der Benutzer ``abaker@foo.net`` oder **W\bcarter** oder **cdavis** übergibt - -die ``bind()`` Methode ist nur dann erfolgreich wenn die Benutzerdaten erfolgreich beim Binden verwendet wurden. - -Nehmen wir das folgende Beispiel an das die benötigten Techniken zeigt um eine Multi-Domain Authentifizierung und -Failover zu implementieren: - -.. code-block:: php - :linenos: - - $acctname = 'W\\user2'; - $password = 'pass2'; - - $multiOptions = array( - 'server1' => array( - 'host' => 's0.foo.net', - 'username' => 'CN=user1,DC=foo,DC=net', - 'password' => 'pass1', - 'bindRequiresDn' => true, - 'accountDomainName' => 'foo.net', - 'accountDomainNameShort' => 'FOO', - 'accountCanonicalForm' => 4, // ACCT_FORM_PRINCIPAL - 'baseDn' => 'OU=Sales,DC=foo,DC=net', - ), - 'server2' => array( - 'host' => 'dc1.w.net', - 'useSsl' => true, - 'username' => 'user1@w.net', - 'password' => 'pass1', - 'accountDomainName' => 'w.net', - 'accountDomainNameShort' => 'W', - 'accountCanonicalForm' => 4, // ACCT_FORM_PRINCIPAL - 'baseDn' => 'CN=Users,DC=w,DC=net', - ), - ); - - $ldap = new Zend\Ldap\Ldap(); - - foreach ($multiOptions as $name => $options) { - - echo "Versuch zu binden un die Serveroptionen für '$name' zu verwenden\n"; - - $ldap->setOptions($options); - try { - $ldap->bind($acctname, $password); - $acctname = $ldap->getCanonicalAccountName($acctname); - echo "Erfolgreich: $acctname authentifiziert\n"; - return; - } catch (Zend\Ldap\Exception $zle) { - echo ' ' . $zle->getMessage() . "\n"; - if ($zle->getCode() === Zend\Ldap\Exception::LDAP_X_DOMAIN_MISMATCH) { - continue; - } - } - } - -Wenn das Binden aus irgendeinem Grund fehlschlägt, werden die nächsten Serveroptionen probiert. - -Der Aufruf von ``getCanonicalAccountName()`` erhält den kanonisierten Accountnamen welcher der Anwendung -voraussichtlich verwendet um zugehörige Daten bevorzugt zu assoziieren. **accountCanonicalForm = 4** in allen -Serveroptionen stellt sicher das die kanonisierte Form angenommen wird, egal welcher Server letztendlich verwendet -wird. - -Die spezielle Exception ``LDAP_X_DOMAIN_MISMATCH`` tritt auf wenn ein Account Name bei einer Domain Komponente -übergeben wurde (z.B. ``abaker@foo.net`` oder **FOO\\abaker** und nicht nur **abaker**) aber die Domain Komponente -keiner der Domains in den aktuell ausgewählten Server Optionen entspricht. Diese Exception zeigt das der Server -keine Autorität für den Account ist. In diesem Fall wird das Binden nicht durchgeführt, und damit unnötige -Kommunikation mit dem Server verhindert. Es ist zu beachten das die **continue** Anweisung in diesem Beispiel -keinen Effekt hat, aber in der Praxis für Fehlerbehandlung und Debugging Zwecke verwendet wird, da man -warscheinlich auf ``LDAP_X_DOMAIN_MISMATCH`` sowie ``LDAP_NO_SUCH_OBJECT`` und ``LDAP_INVALID_CREDENTIALS`` prüfen -will. - -Der obige Code ist dem Code der in :ref:`Zend\Auth\Adapter\Ldap ` verwendet wurde sehr -ähnlich. Fakt ist, das wir einfach empfehlen den Authentifizierungs Adapter für Multi-Domain und Failover -basierte *LDAP* Authentifizierung zu verwenden (oder den Code zu kopieren). - - diff --git a/docs/languages/de/modules/zend.ldap.ldif.rst b/docs/languages/de/modules/zend.ldap.ldif.rst deleted file mode 100644 index ee8a96b66..000000000 --- a/docs/languages/de/modules/zend.ldap.ldif.rst +++ /dev/null @@ -1,133 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.ldif: - -Serialisieren von LDAP Daten von und zu LDIF -============================================ - -.. _zend.ldap.ldif.encode: - -Einen LDAP Eintrag zu LDIF serialisieren ----------------------------------------- - -.. code-block:: php - :linenos: - - $data = array( - 'dn' => 'uid=rogasawara,ou=営業部,o=Airius', - 'objectclass' => array('top', - 'person', - 'organizationalPerson', - 'inetOrgPerson'), - 'uid' => array('rogasawara'), - 'mail' => array('rogasawara@airius.co.jp'), - 'givenname;lang-ja' => array('ロドニー'), - 'sn;lang-ja' => array('小笠原'), - 'cn;lang-ja' => array('小笠原 ロドニー'), - 'title;lang-ja' => array('営業部 部長'), - 'preferredlanguage' => array('ja'), - 'givenname' => array('ロドニー'), - 'sn' => array('小笠原'), - 'cn' => array('小笠原 ロドニー'), - 'title' => array('営業部 部長'), - 'givenname;lang-ja;phonetic' => array('ろどにー'), - 'sn;lang-ja;phonetic' => array('おがさわら'), - 'cn;lang-ja;phonetic' => array('おがさわら ろどにー'), - 'title;lang-ja;phonetic' => array('えいぎょうぶ ぶちょう'), - 'givenname;lang-en' => array('Rodney'), - 'sn;lang-en' => array('Ogasawara'), - 'cn;lang-en' => array('Rodney Ogasawara'), - 'title;lang-en' => array('Sales, Director'), - ); - $ldif = Zend\Ldap\Ldif\Encoder::encode($data, array('sort' => false, - 'version' => null)); - /* - $ldif enthält: - dn:: dWlkPXJvZ2FzYXdhcmEsb3U95Za25qWt6YOoLG89QWlyaXVz - objectclass: top - objectclass: person - objectclass: organizationalPerson - objectclass: inetOrgPerson - uid: rogasawara - mail: rogasawara@airius.co.jp - givenname;lang-ja:: 44Ot44OJ44OL44O8 - sn;lang-ja:: 5bCP56yg5Y6f - cn;lang-ja:: 5bCP56yg5Y6fIOODreODieODi+ODvA== - title;lang-ja:: 5Za25qWt6YOoIOmDqOmVtw== - preferredlanguage: ja - givenname:: 44Ot44OJ44OL44O8 - sn:: 5bCP56yg5Y6f - cn:: 5bCP56yg5Y6fIOODreODieODi+ODvA== - title:: 5Za25qWt6YOoIOmDqOmVtw== - givenname;lang-ja;phonetic:: 44KN44Gp44Gr44O8 - sn;lang-ja;phonetic:: 44GK44GM44GV44KP44KJ - cn;lang-ja;phonetic:: 44GK44GM44GV44KP44KJIOOCjeOBqeOBq+ODvA== - title;lang-ja;phonetic:: 44GI44GE44GO44KH44GG44G2IOOBtuOBoeOCh+OBhg== - givenname;lang-en: Rodney - sn;lang-en: Ogasawara - cn;lang-en: Rodney Ogasawara - title;lang-en: Sales, Director - */ - -.. _zend.ldap.ldif.decode: - -Einen LDIF Strin in einen LDAP Eintrag deserialisieren ------------------------------------------------------- - -.. code-block:: php - :linenos: - - $ldif = "dn:: dWlkPXJvZ2FzYXdhcmEsb3U95Za25qWt6YOoLG89QWlyaXVz - objectclass: top - objectclass: person - objectclass: organizationalPerson - objectclass: inetOrgPerson - uid: rogasawara - mail: rogasawara@airius.co.jp - givenname;lang-ja:: 44Ot44OJ44OL44O8 - sn;lang-ja:: 5bCP56yg5Y6f - cn;lang-ja:: 5bCP56yg5Y6fIOODreODieODi+ODvA== - title;lang-ja:: 5Za25qWt6YOoIOmDqOmVtw== - preferredlanguage: ja - givenname:: 44Ot44OJ44OL44O8 - sn:: 5bCP56yg5Y6f - cn:: 5bCP56yg5Y6fIOODreODieODi+ODvA== - title:: 5Za25qWt6YOoIOmDqOmVtw== - givenname;lang-ja;phonetic:: 44KN44Gp44Gr44O8 - sn;lang-ja;phonetic:: 44GK44GM44GV44KP44KJ - cn;lang-ja;phonetic:: 44GK44GM44GV44KP44KJIOOCjeOBqeOBq+ODvA== - title;lang-ja;phonetic:: 44GI44GE44GO44KH44GG44G2IOOBtuOBoeOCh+OBhg== - givenname;lang-en: Rodney - sn;lang-en: Ogasawara - cn;lang-en: Rodney Ogasawara - title;lang-en: Sales, Director"; - $data = Zend\Ldap\Ldif\Encoder::decode($ldif); - /* - $data = array( - 'dn' => 'uid=rogasawara,ou=営業部,o=Airius', - 'objectclass' => array('top', - 'person', - 'organizationalPerson', - 'inetOrgPerson'), - 'uid' => array('rogasawara'), - 'mail' => array('rogasawara@airius.co.jp'), - 'givenname;lang-ja' => array('ロドニー'), - 'sn;lang-ja' => array('小笠原'), - 'cn;lang-ja' => array('小笠原 ロドニー'), - 'title;lang-ja' => array('営業部 部長'), - 'preferredlanguage' => array('ja'), - 'givenname' => array('ロドニー'), - 'sn' => array('小笠原'), - 'cn' => array('小笠原 ロドニー'), - 'title' => array('営業部 部長'), - 'givenname;lang-ja;phonetic' => array('ろどにー'), - 'sn;lang-ja;phonetic' => array('おがさわら'), - 'cn;lang-ja;phonetic' => array('おがさわら ろどにー'), - 'title;lang-ja;phonetic' => array('えいぎょうぶ ぶちょう'), - 'givenname;lang-en' => array('Rodney'), - 'sn;lang-en' => array('Ogasawara'), - 'cn;lang-en' => array('Rodney Ogasawara'), - 'title;lang-en' => array('Sales, Director'), - ); - */ - - diff --git a/docs/languages/de/modules/zend.ldap.node.rst b/docs/languages/de/modules/zend.ldap.node.rst deleted file mode 100644 index 63cdbf881..000000000 --- a/docs/languages/de/modules/zend.ldap.node.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.node: - -Objektorientierter Zugriff auf den LDAP Baum durch Verwendung von Zend\Ldap\Node -================================================================================ - -.. _zend.ldap.node.basic: - -Grundsätzliche CRUD Operationen -------------------------------- - -.. _zend.ldap.node.basic.retrieve: - -Daten von LDAP holen -^^^^^^^^^^^^^^^^^^^^ - -.. _zend.ldap.node.basic.retrieve.dn: - -Einen Node durch seinen DN erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - - -.. _zend.ldap.node.basic.retrieve.search: - -Den Subbaum eines Nodes durchsuchen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - - -.. _zend.ldap.node.basic.add: - -Einen neuen Node in LDAP hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - - -.. _zend.ldap.node.basic.delete: - -Einen Node von LDAP löschen -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - - -.. _zend.ldap.node.basic.update: - -Einen Node in LDAP aktualisieren -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - - -.. _zend.ldap.node.extended: - -Erweiterte Operationen ----------------------- - -.. _zend.ldap.node.extended.copy-and-move: - -Nodes in LDAP kopieren und verschieben -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - - -.. _zend.ldap.node.traversal: - -Baum Durchlaufen ----------------- - -.. rubric:: Einen LDAP Baum rekursiv durchlaufen - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $ri = new RecursiveIteratorIterator($ldap->getBaseNode(), - RecursiveIteratorIterator::SELF_FIRST); - foreach ($ri as $rdn => $n) { - var_dump($n); - } - - diff --git a/docs/languages/de/modules/zend.ldap.server.rst b/docs/languages/de/modules/zend.ldap.server.rst deleted file mode 100644 index 5fd757293..000000000 --- a/docs/languages/de/modules/zend.ldap.server.rst +++ /dev/null @@ -1,74 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.server: - -Informationen vom LDAP Server erhalten -====================================== - -.. _zend.ldap.server.rootdse: - -RootDSE -------- - -Siehe die folgenden Dokumente für weitere Informationen über die Attribute die im RootDSE für einen gegebenen -*LDAP* Server enthalten sind. - -- `OpenLDAP`_ - -- `Microsoft ActiveDirectory`_ - -- `Novell eDirectory`_ - -.. _zend.ldap.server.rootdse.getting: - -.. rubric:: Mit dem RootDSE arbeiten - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $rootdse = $ldap->getRootDse(); - $serverType = $rootdse->getServerType(); - -.. _zend.ldap.server.schema: - -Schema Browsen --------------- - -.. _zend.ldap.server.schema.getting: - -.. rubric:: Mit dem Schema Server arbeiten - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $schema = $ldap->getSchema(); - $classes = $schema->getObjectClasses(); - -.. _zend.ldap.server.schema.openldap: - -OpenLDAP -^^^^^^^^ - - - -.. _zend.ldap.server.schema.activedirectory: - -ActiveDirectory -^^^^^^^^^^^^^^^ - -.. note:: - - **Browsen im Schema von ActiveDirectory Servern** - - Wegen der Restriktionen bei Microsoft ActiveDirectory Servern bei der Anzahl an Einträgen die von generischen - Suchroutinen zurückgegeben werden und durch die Struktur des ActiveDirectory Schema Repositories, ist das - Schema Browsen aktuell **nicht** für Microsoft ActiveDirectory Server möglich. - - - -.. _`OpenLDAP`: http://www.zytrax.com/books/ldap/ch3/#operational -.. _`Microsoft ActiveDirectory`: http://msdn.microsoft.com/en-us/library/ms684291(VS.85).aspx -.. _`Novell eDirectory`: http://www.novell.com/documentation/edir88/edir88/index.html?page=/documentation/edir88/edir88/data/ah59jqq.html diff --git a/docs/languages/de/modules/zend.ldap.tools.rst b/docs/languages/de/modules/zend.ldap.tools.rst deleted file mode 100644 index 009098fba..000000000 --- a/docs/languages/de/modules/zend.ldap.tools.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.tools: - -Tools -===== - -.. _zend.ldap.tools.dn: - -Erstellung und Modifizierung von DN Strings -------------------------------------------- - - - -.. _zend.ldap.tools.filter: - -Verwendung der Filter API um Suchfilter zu erstellen ----------------------------------------------------- - -.. rubric:: Einfache LDAP Filter erstellen - -.. code-block:: php - :linenos: - - $f1 = Zend\Ldap\Filter::equals('name', 'value'); // (name=value) - $f2 = Zend\Ldap\Filter::begins('name', 'value'); // (name=value*) - $f3 = Zend\Ldap\Filter::ends('name', 'value'); // (name=*value) - $f4 = Zend\Ldap\Filter::contains('name', 'value'); // (name=*value*) - $f5 = Zend\Ldap\Filter::greater('name', 'value'); // (name>value) - $f6 = Zend\Ldap\Filter::greaterOrEqual('name', 'value'); // (name>=value) - $f7 = Zend\Ldap\Filter::less('name', 'value'); // (namenegate(); // (!(name=*value)) - - $f2 = Zend\Ldap\Filter::equals('name', 'value'); - $f3 = Zend\Ldap\Filter::begins('name', 'value'); - $f4 = Zend\Ldap\Filter::ends('name', 'value'); - - // (&(name=value)(name=value*)(name=*value)) - $f5 = Zend\Ldap\Filter::andFilter($f2, $f3, $f4); - - // (|(name=value)(name=value*)(name=*value)) - $f6 = Zend\Ldap\Filter::orFilter($f2, $f3, $f4); - -.. _zend.ldap.tools.attribute: - -LDAP Einträge modifizieren und die Attribut API verwenden ---------------------------------------------------------- - - - - diff --git a/docs/languages/de/modules/zend.ldap.usage.rst b/docs/languages/de/modules/zend.ldap.usage.rst deleted file mode 100644 index ad0f4e6b2..000000000 --- a/docs/languages/de/modules/zend.ldap.usage.rst +++ /dev/null @@ -1,192 +0,0 @@ -.. EN-Revision: none -.. _zend.ldap.usage: - -Szenarien der Verwendung -======================== - -.. _zend.ldap.usage.authentication: - -Szenarien der Authentifizierung -------------------------------- - -.. _zend.ldap.usage.authentication.openldap: - -OpenLDAP -^^^^^^^^ - - - -.. _zend.ldap.usage.authentication.activedirectory: - -ActiveDirectory -^^^^^^^^^^^^^^^ - - - -.. _zend.ldap.usage.basic: - -Grundsätzliche CRUD Operationen -------------------------------- - -.. _zend.ldap.usage.basic.retrieve: - -Daten von LDAP empfangen -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. _zend.ldap.usage.basic.retrieve.dn: - -.. rubric:: Einen Eintrag durch seinen DN erhalten - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $hm = $ldap->getEntry('cn=Hugo Müller,ou=People,dc=my,dc=local'); - /* - $hm is an array of the following structure - array( - 'dn' => 'cn=Hugo Müller,ou=People,dc=my,dc=local', - 'cn' => array('Hugo Müller'), - 'sn' => array('Müller'), - 'objectclass' => array('inetOrgPerson', 'top'), - ... - ) - */ - -.. _zend.ldap.usage.basic.retrieve.exists: - -.. rubric:: Die Existenz eines angegebenen DN prüfen - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $isThere = $ldap->exists('cn=Hugo Müller,ou=People,dc=my,dc=local'); - -.. _zend.ldap.usage.basic.retrieve.counting-children: - -.. rubric:: Kinder eines angegebenen DN zählen - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $childrenCount = $ldap->countChildren( - 'cn=Hugo Müller,ou=People,dc=my,dc=local'); - -.. _zend.ldap.usage.basic.retrieve.search: - -.. rubric:: Im LDAP Baum suchen - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $result = $ldap->search('(objectclass=*)', - 'ou=People,dc=my,dc=local', - Zend\Ldap\Ext::SEARCH_SCOPE_ONE); - foreach ($result as $item) { - echo $item["dn"] . ': ' . $item['cn'][0] . PHP_EOL; - } - -.. _zend.ldap.usage.basic.add: - -Daten zu LDAP hinzufügen -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. rubric:: Einen neuen Eintrag zu LDAP hinzufügen - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $entry = array(); - Zend\Ldap\Attribute::setAttribute($entry, 'cn', 'Hans Meier'); - Zend\Ldap\Attribute::setAttribute($entry, 'sn', 'Meier'); - Zend\Ldap\Attribute::setAttribute($entry, 'objectClass', 'inetOrgPerson'); - $ldap->add('cn=Hans Meier,ou=People,dc=my,dc=local', $entry); - -.. _zend.ldap.usage.basic.delete: - -In LDAP löschen -^^^^^^^^^^^^^^^ - -.. rubric:: Einen existierenden Eintrag von LDAP löschen - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $ldap->delete('cn=Hans Meier,ou=People,dc=my,dc=local'); - -.. _zend.ldap.usage.basic.update: - -LDAP aktualisieren -^^^^^^^^^^^^^^^^^^ - -.. rubric:: Einen existierenden Eintrag in LDAP aktualisieren - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $hm = $ldap->getEntry('cn=Hugo Müller,ou=People,dc=my,dc=local'); - Zend\Ldap\Attribute::setAttribute($hm, 'mail', 'mueller@my.local'); - Zend\Ldap\Attribute::setPassword($hm, - 'newPa$$w0rd', - Zend\Ldap\Attribute::PASSWORD_HASH_SHA1); - $ldap->update('cn=Hugo Müller,ou=People,dc=my,dc=local', $hm); - -.. _zend.ldap.usage.extended: - -Erweiterte Operationen ----------------------- - -.. _zend.ldap.usage.extended.copy-and-move: - -Kopieren und Verschieben von Einträgen in LDAP -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. _zend.ldap.usage.extended.copy-and-move.copy: - -.. rubric:: Einen LDAP Eintrag mit allen seinen Abhängigkeiten rekursiv kopieren - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $ldap->copy('cn=Hugo Müller,ou=People,dc=my,dc=local', - 'cn=Hans Meier,ou=People,dc=my,dc=local', - true); - -.. _zend.ldap.usage.extended.copy-and-move.move-to-subtree: - -.. rubric:: Einen LDAP Eintrag rekursiv in einen anderen Unterbaum verschieben mit allen seinen Abhängigkeiten - -.. code-block:: php - :linenos: - - $options = array(/* ... */); - $ldap = new Zend\Ldap\Ldap($options); - $ldap->bind(); - $ldap->moveToSubtree('cn=Hugo Müller,ou=People,dc=my,dc=local', - 'ou=Dismissed,dc=my,dc=local', - true); - - diff --git a/docs/languages/de/modules/zend.log.filters.rst b/docs/languages/de/modules/zend.log.filters.rst deleted file mode 100644 index fc35fe7a6..000000000 --- a/docs/languages/de/modules/zend.log.filters.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. EN-Revision: none -.. _zend.log.filters: - -Filter -====== - -Ein Filter Objekt blockiert eine Nachricht damit diese nicht in das Log geschrieben wird. - -.. _zend.log.filters.all-writers: - -Filter für alle Writer ----------------------- - -Um vor allen Writern zu filtern, kann eine beliebige Anzahl von Filtern zu einem Log Objekt hinzugefügt werden -indem die ``addFilter()`` Methode verwendet wird: - -.. code-block:: php - :linenos: - - $logger = new Zend\Log\Log(); - - $writer = new Zend\Log\Writer\Stream('php://output'); - $logger->addWriter($writer); - - $filter = new Zend\Log\Filter\Priority(Zend\Log\Log::CRIT); - $logger->addFilter($filter); - - // Blockiert - $logger->info('Informative Nachricht'); - - // Gelogged - $logger->emerg('Notfall Nachricht'); - -Wenn ein oder mehrere Filter zu einem Log Objekt hinzugefügt werden, muß die Nachricht durch alle Filter hindurch -bevor irgendein Filter sie empfängt. - -.. _zend.log.filters.single-writer: - -Filtern für eine Writer Instanz -------------------------------- - -Um nur auf eine definierte Writer Instanz zu filtern, muß die ``addFilter()`` Methode dieses Writer's verwendet -werden: - -.. code-block:: php - :linenos: - - $logger = new Zend\Log\Log(); - - $writer1 = new Zend\Log\Writer\Stream('/path/to/first/logfile'); - $logger->addWriter($writer1); - - $writer2 = new Zend\Log\Writer\Stream('/path/to/second/logfile'); - $logger->addWriter($writer2); - - // Einen Filter nur zu Writer2 hinzufügen - $filter = new Zend\Log\Filter\Priority(Zend\Log\Log::CRIT); - $writer2->addFilter($filter); - - // Geloggt von Writer1, Blockiert von Writer2 - $logger->info('Informative Nachricht'); - - // Geloggt von beiden Writern - $logger->emerg('Notfall Nachricht'); - - diff --git a/docs/languages/de/modules/zend.log.formatters.rst b/docs/languages/de/modules/zend.log.formatters.rst deleted file mode 100644 index f550c2f79..000000000 --- a/docs/languages/de/modules/zend.log.formatters.rst +++ /dev/null @@ -1,112 +0,0 @@ -.. EN-Revision: none -.. _zend.log.formatters: - -Formatter -========= - -Ein Formatter ist ein Objekt das dafür zuständig ist ein ``event`` Array anzunehmen welches ein Log Event -beschreibt und einen String auszugeben mit einer formatierten Logzeile. - -Einige Writer sind nicht zeilen-orientiert und können keinen Formatter benutzen. Ein Beispiel ist der Datenbank -Writer, welcher die Events direkt in die Datenbankzeilen einfügt. Für Writer die Formatter nicht unterstützen -können, wird eine Ausnahme geworfen wenn versucht wird einen Formatter zu setzen. - -.. _zend.log.formatters.simple: - -Einfache Formatierung ---------------------- - -``Zend\Log\Formatter\Simple`` ist der Standard Formatter. Er ist automatisch konfiguriert wenn kein Formatter -definiert wird. Die Standard Konfiguration ist identisch mit dem folgenden: - -.. code-block:: php - :linenos: - - $format = '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL; - $formatter = new Zend\Log\Formatter\Simple($format); - -Ein Formatter wird einem individuellen Writer Objekt gesetzt durch Verwenden der ``setFormatter()`` Methode des -Writer's: - -.. code-block:: php - :linenos: - - $writer = new Zend\Log\Writer\Stream('php://output'); - $formatter = new Zend\Log\Formatter\Simple('Hallo %message%' . PHP_EOL); - $writer->setFormatter($formatter); - - $logger = new Zend\Log\Log(); - $logger->addWriter($writer); - - $logger->info('dort'); - - // Gibt "Hallo dort" aus - -Der Konstruktor von ``Zend\Log\Formatter\Simple`` akzeptiert einen einzelnen Parameter: Den Format String. Dieser -String enthält Schlüssel die durch Prozentzeichen begrenzt sind (z.B. ``%message%``). Der Format String kann -jeden Schlüssel des Event Data Arrays enthalten. Die Standardschlüssel können durch Verwendung der -DEFAULT_FORMAT Konstante von ``Zend\Log\Formatter\Simple`` empfangen werden. - -.. _zend.log.formatters.xml: - -In XML formatieren ------------------- - -``Zend\Log\Formatter\Xml`` formatiert Log Daten in einen *XML* String. Standardmäßig loggt er automatisch alle -Elemente des Event Data Arrays: - -.. code-block:: php - :linenos: - - $writer = new Zend\Log\Writer\Stream('php://output'); - $formatter = new Zend\Log\Formatter\Xml(); - $writer->setFormatter($formatter); - - $logger = new Zend\Log\Log(); - $logger->addWriter($writer); - - $logger->info('Informative Nachricht'); - -Der obige Code gibt das folgende *XML* aus (Leerzeichen werden für Klarstellung hinzugefügt): - -.. code-block:: xml - :linenos: - - - 2007-04-06T07:24:37-07:00 - Informative Nachricht - 6 - INFO - - -Es ist möglich das Root Element anzupassen sowie ein Mapping von *XML* Elementen zu den Elementen im Event Data -Array zu definieren. Der Konstruktor von ``Zend\Log\Formatter\Xml`` akzeptiert einen String mit dem Namen des Root -Elements als ersten Parameter und ein assoziatives Array mit den gemappten Elementen als zweiten Parameter: - -.. code-block:: php - :linenos: - - $writer = new Zend\Log\Writer\Stream('php://output'); - $formatter = new Zend\Log\Formatter\Xml('log', - array('msg' => 'message', - 'level' => 'priorityName') - ); - $writer->setFormatter($formatter); - - $logger = new Zend\Log\Log(); - $logger->addWriter($writer); - - $logger->info('Informative Nachricht'); - -Der obige Code ändert das Root Element von seinem Standard ``logEntry`` zu ``log``. Er mappt auch das Element -``msg`` zum Event Daten Element ``message``. Das ergibt die folgende Ausgabe: - -.. code-block:: xml - :linenos: - - - Informative Nachricht - INFO - - - diff --git a/docs/languages/de/modules/zend.log.overview.rst b/docs/languages/de/modules/zend.log.overview.rst deleted file mode 100644 index 297bbc581..000000000 --- a/docs/languages/de/modules/zend.log.overview.rst +++ /dev/null @@ -1,218 +0,0 @@ -.. EN-Revision: none -.. _zend.log.overview: - -Übersicht -========= - -``Zend_Log`` ist eine Komponente für Mehrzweckprotokollierung. Es unterstützt vielfache Log Backends, das Senden -von formatierten Nachrichten zum Log, und das Filtern von Nachrichten um nicht protokolliert zu werden. Diese -Funktionen sind in die folgenden Objekte seperiert worden: - - - - - Ein Log (Instanz von ``Zend_Log``) ist das Objekt das die Anwendung am meisten benutzt. Man kann soviele Log - Objekte haben wie man will; Sie interagieren nicht. Ein Log Objekt muß mindestens einen Schreiber beinhalten, - und kann optional einen oder mehrere Filter beinhalten. - - - Ein Writer (Abgeleitet von ``Zend\Log\Writer\Abstract``) ist dafür zuständig das Daten in den Speicher - geschrieben werden. - - - Ein Filter (implementiert ``Zend\Log\Filter\Interface``) blockiert Logdaten vom gespeichert werden. Ein Filter - kann einem individuellen Writer hinzugefügt werden, oder an ein Log wo er vor allen Writern hinzugefügt - wird. In jedem Fall können Filter verkettet werden. - - - Ein Formatter (implementiert ``Zend\Log\Formatter\Interface``) kann die Logdaten formatieren bevor diese durch - den Writer geschrieben werden. Jeder Writer hat exakt einen Formatter. - - - -.. _zend.log.overview.creating-a-logger: - -Erstellen eines Logs --------------------- - -Um das protokollieren zu starten, muß ein Writer instanziert werden und einer Log Instanz übergeben werden: - -.. code-block:: php - :linenos: - - $logger = new Zend\Log\Log(); - $writer = new Zend\Log\Writer\Stream('php://output'); - - $logger->addWriter($writer); - -Es ist wichtig anzumerken dass das Log mindestens einen Writer haben muß. Man kann eine beliebige Anzahl von -Writern hinzufügen indem man die ``addWriter()`` Methode des Log's verwendet. - -Alternativ kann ein Writer direkt dem Konstruktor von Log, als Abkürzung, übergeben werden: - -.. code-block:: php - :linenos: - - $writer = new Zend\Log\Writer\Stream('php://output'); - $logger = new Zend\Log\Log($writer); - -Das Log ist nun fertig zur Verwendung. - -.. _zend.log.overview.logging-messages: - -Nachrichten protokollieren --------------------------- - -Um eine Nachricht zu protokollieren, muß die ``log()`` Methode einer Log Instanz aufgerufen werden und die -Nachricht mit einer entsprechenden Priorität übergeben werden: - -.. code-block:: php - :linenos: - - $logger->log('Informative Nachricht', Zend\Log\Log::INFO); - -Der erste Parameter der ``log()`` Methode ist ein ``message`` String und der zweite Parameter ist ein ``priority`` -Integerwert. Die Priorität muß eine der Prioritäten sein die von der Log Instanz erkannt wird. Das wird in der -nächsten Sektion beschrieben. - -Eine Abkürzung ist auch verfügbar. Statt dem Aufruf der ``log()`` Methode kann eine Methode des selben Namens wie -die Priorität aufgerufen werden: - -.. code-block:: php - :linenos: - - $logger->log('Informative Nachricht', Zend\Log\Log::INFO); - $logger->info('Informative Nachricht'); - - $logger->log('Notfall Nachricht', Zend\Log\Log::EMERG); - $logger->emerg('Notfall Nachricht'); - -.. _zend.log.overview.destroying-a-logger: - -Ein Log entfernen ------------------ - -Wenn ein Log Objekt nicht länger benötigt wird, kann die Variable die das Log enthält auf ``NULL`` gesetzt -werden um es zu entfernen. Das wird automatisch die Instanzmethode ``shutdown()`` von jedem hinzugefügten Writer -aufrufen bevor das Log Objekt entfernt wird: - -.. code-block:: php - :linenos: - - $logger = null; - -Das explizite entfernen des Logs auf diesem Weg ist optional und wird automatisch durchgeführt wenn *PHP* -herunterfährt. - -.. _zend.log.overview.builtin-priorities: - -Verwenden von eingebauten Prioritäten -------------------------------------- - -Die ``Zend_Log`` Klasse definiert die folgenden Prioritäten: - -.. code-block:: php - :linenos: - - EMERG = 0; // Notfall: System ist nicht verwendbar - ALERT = 1; // Alarm: Aktionen müßen sofort durchgefüht werden - CRIT = 2; // Kritisch: Kritische Konditionen - ERR = 3; // Fehler: Fehler Konditionen - WARN = 4; // Warnung: Warnungs Konditionen - NOTICE = 5; // Notiz: Normal aber signifikante Kondition - INFO = 6; // Informativ: Informative Nachrichten - DEBUG = 7; // Debug: Debug Nachrichten - -Diese Prioritäten sind immer vorhanden und eine komfortable Methode für den selben Namen ist für jede einzelne -vorhanden. - -Die Prioritäten sind nicht beliebig. Die kommen vom BSD syslog Protokoll, welches in `RFC-3164`_ beschrieben wird. -Die Namen und korrespondierenden Prioritätennummern sind auch mit einem anderen *PHP* Logging Systeme kompatibel, -`PEAR Log`_, welches möglicherweise mit Interoperabilität zwischen Ihm und ``Zend_Log`` wirbt. - -Nummern für Prioritäten sinken in der Reihenfolge ihrer Wichtigkeit. ``EMERG`` (0) ist die wichtigste Priorität. -``DEBUG`` (7) ist die unwichtigste Priorität der eingebauten Prioritäten. Man kann Prioritäten von niedriger -Wichtigkeit als ``DEBUG`` definieren. Wenn die Priorität für die Lognachricht ausgewählt wird, sollte auf die -Hirarchie der Prioritäten geachtet werden und selbige sorgfältig ausgewählt werden. - -.. _zend.log.overview.user-defined-priorities: - -Hinzufügen von selbstdefinierten Prioritäten --------------------------------------------- - -Selbstdefinierte Prioritäten können wärend der Laufzeit hinzugefügt werden durch Verwenden der -``addPriority()`` Methode des Log's: - -.. code-block:: php - :linenos: - - $logger->addPriority('FOO', 8); - -Das obige Codeschnipsel erstellt eine neue Priorität, ``FOO``, dessen Wert '8' ist. Die neue Priorität steht für -die Protokollierung zur Verfügung: - -.. code-block:: php - :linenos: - - $logger->log('Foo Nachricht', 8); - $logger->foo('Foo Nachricht'); - -Neue Prioritäten können bereits bestehende nicht überschreiben. - -.. _zend.log.overview.understanding-fields: - -Log Events verstehen --------------------- - -Wenn die ``log()`` Methode oder eine Ihrer Abkürzungen aufgerufen wird, wird ein Log Event erstellt. Das ist -einfach ein assoziatives Array mit Daten welche das Event beschreiben das an die Writer übergeben wird. Die -folgenden Schlüssel werden immer in diesem Array erstellt: ``timestamp``, ``message``, ``priority``, und -``priorityName``. - -Die Erstellung des ``event`` Arrays ist komplett transparent. Trotzdem wird das Wissen über das ``event`` Array -für das Hinzufügen von Elementen benötigt, die in dem obigen Standardset nicht existieren. - -Um ein neues Element für jedes zukünftige Event hinzuzufügen, muß die ``setEventItem()`` Methode aufgerufen -werden wobei ein Schlüssel und ein Wert übergeben wird: - -.. code-block:: php - :linenos: - - $logger->setEventItem('pid', getmypid()); - -Das obige Beispiel setzt ein neues Element welches ``pid`` heißt und veröffentlicht es mit der PID des aktuellen -Prozesses. Wenn einmal ein neues Element gesetzt wurde, wird es automatisch für alle Writer verfügbar, zusammen -mit allen anderen Daten der Eventdaten wärend des Protokollierens. Ein Element kann jederzeit überschrieben -werden durch nochmaligen Aufruf der ``setEventItem()`` Methode. - -Das Setzen eines neuen Eventelements mit ``setEventItem()`` führt dazu dass das neue Element an alle Writer des -Loggers gesendet wird. Trotzdem garantiert das nicht das die Writer das Element aktuell auch aufzeichnet. Und zwar -deswegen weil die Writer nicht wissen was zu tun ist solange das Formatter Objekt nicht über das neue Element -informiert wurde. Siehe in die Sektion über Formatter um mehr darüber zu lernen. - -.. _zend.log.overview.as-errorHandler: - -PHP Fehler loggen ------------------ - -``Zend_Log`` kann auch verwendet werden um *PHP* Fehler zu loggen. Der Aufruf von ``registerErrorHandler()`` fügt -``Zend_Log`` vor dem aktuellen Error Handler hinzu, und gibt den Fehler genauso weiter. - -.. _zend.log.overview.as-errorHandler.properties.table-1: - -.. table:: Zend_Log Events für PHP Fehler haben ein zusätzliches Feld welches handler (int $errno ,string $errstr [,string $errfile [,int $errline [,array $errcontext]]]) von set_error_handler entspricht - - +-------+-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Name |Parameter für den Error Handler|Beschreibung | - +=======+===============================+=========================================================================================================================================================================================================================================================================================================================+ - |message|errstr |Enthält die Fehlermeldung als String. | - +-------+-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |errno |errno |Enthält das Level des geworfenen Fehlers als Integer. | - +-------+-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |file |errfile |Enthält den Dateinamen in dem der Fehler geworfen wurde als String | - +-------+-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |line |errline |Enthält die Zeilennummer in welcher der Fehler geworfen wurde als Integer | - +-------+-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |context|errcontext |(Optional) Ein Array welches auf eine aktive Symboltabelle zeigt in welcher der Fehler aufgetreten ist. In anderen Worden, enthält errcontext ein Array jeder Variable welche in dem Scope existiert hat in welchem der Fehler geworfen wurde. Benutzerdefinierte Error Handler müssen den Error Context nicht verändern.| - +-------+-------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - - -.. _`RFC-3164`: http://tools.ietf.org/html/rfc3164 -.. _`PEAR Log`: http://pear.php.net/package/log diff --git a/docs/languages/de/modules/zend.log.writers.rst b/docs/languages/de/modules/zend.log.writers.rst deleted file mode 100644 index 93f865298..000000000 --- a/docs/languages/de/modules/zend.log.writers.rst +++ /dev/null @@ -1,162 +0,0 @@ -.. EN-Revision: none -.. _zend.log.writers: - -Writer -====== - -Ein Writer ist ein Objekt das von ``Zend\Log\Writer\Abstract`` abstammt. Die Aufgabe eines Writer's ist es Log -Daten in ein Speicher-Backend aufzunehmen. - -.. _zend.log.writers.stream: - -In Streams schreiben --------------------- - -``Zend\Log\Writer\Stream`` sendet Log Daten in einen `PHP Stream`_. - -Um Log Daten in den *PHP* Ausgabebuffer zu schreiben, muß die URL ``php://output`` verwendet werden. Alternativ -können Log Daten direkt an einen Stream wie z.B. ``STDERR`` (``php://stderr``) gesendet werden. - -.. code-block:: php - :linenos: - - $writer = new Zend\Log\Writer\Stream('php://output'); - $logger = new Zend\Log\Log($writer); - - $logger->info('Informational message'); - -Um Daten in eine Datei zu schreiben, muß eine der `Dateisystem URLs`_ verwendet werden: - -.. code-block:: php - :linenos: - - $writer = new Zend\Log\Writer\Stream('/path/to/logfile'); - $logger = new Zend\Log\Log($writer); - - $logger->info('Informative Nachricht'); - -Standardmäßig wird der Stream im Anhänge-Modus geöffnet ("a"). Um Ihn in einem anderen Modus zu öffnen, -akzeptiert der ``Zend\Log\Writer\Stream`` Konstruktor einen optionalen zweiten Parameter für den Modus. - -Der Konstruktor von ``Zend\Log\Writer\Stream`` akzeptiert auch eine existierende Stream Ressource: - -.. code-block:: php - :linenos: - - $stream = @fopen('/path/to/logfile', 'a', false); - if (! $stream) { - throw new Exception('Stream konnte nicht geöffnet werden'); - } - - $writer = new Zend\Log\Writer\Stream($stream); - $logger = new Zend\Log\Log($writer); - - $logger->info('Informative Nachricht'); - -Der Modus kann für existierende Stream Ressourcen nicht definiert werden. Wenn das gemacht versucht wird, wird -eine ``Zend\Log\Exception`` geworfen. - -.. _zend.log.writers.database: - -In Datenbanken schreiben ------------------------- - -``Zend\Log\Writer\Db`` schreibt Log Informationen in eine Datenbank Tabelle wobei ``Zend_Db`` verwendet wird. Der -Konstrukor von ``Zend\Log\Writer\Db`` benötigt eine ``Zend\Db\Adapter`` Instanz, einen Tabellennamen, und ein -Abbild der Datenbankspalten zu den Elementen der Eventdaten: - -.. code-block:: php - :linenos: - - $params = array ('host' => '127.0.0.1', - 'username' => 'malory', - 'password' => '******', - 'dbname' => 'camelot'); - $db = Zend\Db\Db::factory('PDO_MYSQL', $params); - - $columnMapping = array('lvl' => 'priority', 'msg' => 'message'); - $writer = new Zend\Log\Writer\Db($db, 'log_table_name', $columnMapping); - - $logger = new Zend\Log\Log($writer); - - $logger->info('Informative Nachricht'); - -Das obige Beispiel schreibt eine einzelne Zeile von Log Daten in einem Datenbanktabelle welche 'log_table_name' -Tabelle benannt wird. Die Datenbankspalte welche 'lvl' benannt ist empfängt die Nummer der Priorität und die -Spalte welche 'msg' benannt ist empfängt die Log Nachricht. - -.. include:: zend.log.writers.firebug.rst -.. include:: zend.log.writers.mail.rst -.. include:: zend.log.writers.syslog.rst -.. include:: zend.log.writers.zend-monitor.rst -.. _zend.log.writers.null: - -Einen Writer abstumpfen ------------------------ - -``Zend\Log\Writer\Null`` ist ein Stumpf der keine Log Daten irgendwohin schreibt. Er ist nützlich um die -Protokollierung auszuschalten oder wärend Tests abzustumpfen: - -.. code-block:: php - :linenos: - - $writer = new Zend\Log\Writer\Null; - $logger = new Zend\Log\Log($writer); - - // geht nirgendwohin - $logger->info('Informative Nachricht'); - -.. _zend.log.writers.mock: - -Mit der Attrappe testen ------------------------ - -``Zend\Log\Writer\Mock`` ist ein sehr einfacher Writer der die rohen Daten die er empfängt aufnimmt und in einem -Array als öffentliche Eigenschaft zur Verfügung stellt. - -.. code-block:: php - :linenos: - - $mock = new Zend\Log\Writer\Mock; - $logger = new Zend\Log\Log($mock); - - $logger->info('Informative Nachricht'); - - var_dump($mock->events[0]); - - // Array - // ( - // [timestamp] => 2007-04-06T07:16:37-07:00 - // [message] => Informative Nachricht - // [priority] => 6 - // [priorityName] => INFO - // ) - -Um die Events die von der Attrappe protokolliert wurden zu entfernen, muß einfach ``$mock->events = array()`` -gesetzt werden. - -.. _zend.log.writers.compositing: - -Gemischte Writer ----------------- - -Es gibt kein gemischtes Writer Objekt. Trotzdem kann eine Log Instanz in jede beliebige Anzahl von Writern -schreiben. Um das zu tun, muß die ``addWriter()`` Methode verwendet werden: - -.. code-block:: php - :linenos: - - $writer1 = new Zend\Log\Writer\Stream('/path/to/first/logfile'); - $writer2 = new Zend\Log\Writer\Stream('/path/to/second/logfile'); - - $logger = new Zend\Log\Log(); - $logger->addWriter($writer1); - $logger->addWriter($writer2); - - // Geht zu beiden Writern - $logger->info('Informative Nachricht'); - - - -.. _`PHP Stream`: http://www.php.net/stream -.. _`Dateisystem URLs`: http://www.php.net/manual/de/wrappers.php#wrappers.file diff --git a/docs/languages/de/modules/zend.mail.adding-recipients.rst b/docs/languages/de/modules/zend.mail.adding-recipients.rst deleted file mode 100644 index dd1bfbc2c..000000000 --- a/docs/languages/de/modules/zend.mail.adding-recipients.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.adding-recipients: - -Empfänger hinzufügen -==================== - -Empfänger können über drei Wege hinzugefügt werden: - -- ``addTo()``: fügt der Mail einen Empfänger in der "To" Kopfzeile hinzu - -- ``addCc()``: fügt der Mail einen Empfänger in der "Cc" Kopfzeile hinzu - -- ``addBcc()``: fügt der Mail einen Empfänger hinzu, der in den Kopfzeilen nicht sichtbar ist - -``getRecipients()`` bietet eine Liste von Empfängern. ``clearRecipients()`` löscht die Liste. - -.. note:: - - **Zusätzliche Parameter** - - ``addTo()`` und ``addCc()`` akzeptieren einen zweiten, optionalen Parameter, der für einen visuell lesbaren - Namen des Empfängers in der Kopfzeile verwendet wird. Im Parameter werden doppelte Anführungszeichen auf - einfache und runde Klammern zu eckigen getauscht. - -.. note:: - - **Optionale Verwendung** - - Alle drei Methoden akzeptieren auch ein Array von Email Adressen das hinzugefügt werden kann, statt jeweils nur - einer einzelnen. Im Fall von ``addTo()`` und ``addCc()``, kann dies ein assoziatives Array sein, wobei der - Schlüssel ein menschlich lesbarer Name für den Empfänger ist. - - diff --git a/docs/languages/de/modules/zend.mail.additional-headers.rst b/docs/languages/de/modules/zend.mail.additional-headers.rst deleted file mode 100644 index eda656237..000000000 --- a/docs/languages/de/modules/zend.mail.additional-headers.rst +++ /dev/null @@ -1,47 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.additional-headers: - -Zusätzliche Kopfzeilen -====================== - -``Zend_Mail`` bietet verschiedene Methode um zusätzliche Mail Header zu setzen: - - - - - ``setReplyTo($email, $name=null)``: Setzt den Reply-To: Header. - - - ``setDate($date = null)``: Setzt den Date: Header. Diese Methode verwendet standardmäßig den aktuellen - Zeitpunkt. Man kann dieser Methode auch einen Zeitpunkt, einen Datumsstring oder eine Instanz von - ``Zend_Date`` übergeben. - - - ``setMessageId($id = true)``: Setzt den Message-Id: Header. Diese Methode erzeugt standardmäßig automatisch - eine Message ID. Oder man übergibt der Methode einen eigenen Message ID String. Diese Methode ruft intern - ``createMessageId()`` auf. - - - -.. note:: - - **Return-Path** - - Wenn man den Return-Path in eigenen Mail setzen will, sollte man unter :ref:`Konfiguration des Sendmail - Transports ` nachsehen. Unglücklicherweise führt die - ``setReturnPath($email)`` Methode dies nicht aus. - -Weiters können eigene Mail Header gesetzt werden indem man die ``addHeader()`` Methode verwendet. Sie benötigt -zwei Parameter welche den Namen und den Wert des Header Fields enthalten. Ein optionaler dritter Parameter zeigt an -ob der Header nur einen oder mehrere Werte enthalten soll: - -.. _zend.mail.additional-headers.example-1: - -.. rubric:: Eine E-Mail Kopfzeile hinzufügen - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - $mail->addHeader('X-MailGenerator', 'MeineCooleAnwendung'); - $mail->addHeader('X-greetingsTo', 'Mom', true); // mehrer Werte - $mail->addHeader('X-greetingsTo', 'Dad', true); - - diff --git a/docs/languages/de/modules/zend.mail.attachments.rst b/docs/languages/de/modules/zend.mail.attachments.rst deleted file mode 100644 index 074463584..000000000 --- a/docs/languages/de/modules/zend.mail.attachments.rst +++ /dev/null @@ -1,62 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.attachments: - -Anhänge -======= - -Dateien können durch die ``createAttachment()`` Methode an eine E-Mail angehängt werden. Standardmäßig nimmt -``Zend_Mail`` an, dass der Anhang ein binäres Objekt (``application/octet-stream``) ist, über eine base64 -Kodierung übertragen werden soll und als Anhang verarbeitet wird. Diese Annahmen können durch die Übergabe von -weiteren Parametern an ``createAttachment()`` überschrieben werden: - -.. _zend.mail.attachments.example-1: - -.. rubric:: E-Mail Nachrichten mit Anhängen - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - // erstelle Nachricht... - $mail->createAttachment($someBinaryString); - $mail->createAttachment($myImage, - 'image/gif', - Zend\Mime\Mime::DISPOSITION_INLINE, - Zend\Mime\Mime::ENCODING_BASE64); - -Wenn du weitere Kontrolle über den für diesen Anhang generierten *MIME* Teil benötigst, kannst du -zurückgegebenen Wert von ``createAttachment()`` verwenden, um die Attributes zu verändern. Die -``createAttachment()`` Methode gibt ein ``Zend\Mime\Part`` Objekt zurück: - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - - $at = $mail->createAttachment($myImage); - $at->type = 'image/gif'; - $at->disposition = Zend\Mime\Mime::DISPOSITION_INLINE; - $at->encoding = Zend\Mime\Mime::ENCODING_BASE64; - $at->filename = 'test.gif'; - - $mail->send(); - -Eine Alternative ist die Erstellung einer Instanz von ``Zend\Mime\Part`` und das Hinzufügen von Ihr mit -``addAttachment()``: - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - - $at = new Zend\Mime\Part($myImage); - $at->type = 'image/gif'; - $at->disposition = Zend\Mime\Mime::DISPOSITION_INLINE; - $at->encoding = Zend\Mime\Mime::ENCODING_BASE64; - $at->filename = 'test.gif'; - - $mail->addAttachment($at); - - $mail->send(); - - diff --git a/docs/languages/de/modules/zend.mail.boundary.rst b/docs/languages/de/modules/zend.mail.boundary.rst deleted file mode 100644 index d5bb895ea..000000000 --- a/docs/languages/de/modules/zend.mail.boundary.rst +++ /dev/null @@ -1,22 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.boundary: - -Die MIME Abgrenzung kontrollieren -================================= - -In einer mehrteiligen Nachricht wird eine *MIME* Abgrenzung zum Trennen der verschiedenen Nachrichtenteile -normalerweise willkürlich generiert. In einigen Fällen möchtest Du jedoch die zu verwendene *MIME* Abgrenzung -selber angeben. Dies kann durch die ``setMimeBoundary()`` Methode erreicht werden, wie in dem folgenden Beispiel: - -.. _zend.mail.boundary.example-1: - -.. rubric:: Die MIME Abgrenzung ändern - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - $mail->setMimeBoundary('=_' . md5(microtime(1) . $someId++)); - // erstelle Nachricht... - - diff --git a/docs/languages/de/modules/zend.mail.character-sets.rst b/docs/languages/de/modules/zend.mail.character-sets.rst deleted file mode 100644 index c67e02cc2..000000000 --- a/docs/languages/de/modules/zend.mail.character-sets.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.character-sets: - -Zeichensätze -============ - -``Zend_Mail`` prüft nicht auf die richtigen Zeichensätze für die Mailbestandteile. Wenn ``Zend_Mail`` -instanziiert wird, kann ein Zeichensatz für die Mail selbst angegeben werden. Der Standardwert ist **iso-8859-1**. -Die Anwendung muss sicherstellen, dass die Inhalte aller Bestandteile des Mailobjektes im richtigen Zeichensatz -codiert sind. Wenn ein neuer Mailbestandteil erstellt wird, kann für jeden Bestandteil ein anderer Zeichensatz -angegeben werden. - -.. note:: - - **Nur im Textformat** - - Zeichensätze sind nur auf Mailbestandteile im Textformat anwendbar. - -.. _zend.mail.character-sets.cjk: - -.. rubric:: Verwendung in CJK Sprachen - -Das folgende Beispiel zeigt wie ``Zend_Mail`` im japanischen verwendet werden kann. Das ist eine der *CJK* (oder -auch *CJKV*) Sprachen. Wenn man Chinesisch verwendet, kann man auch *HZ-GB-2312* statt *ISO-2022-JP* verwenden. - -.. code-block:: php - :linenos: - - // Wir nehmen an das die Zeichenkodierung der Strings in PHP Skripten UTF-8 ist - function myConvert($string) { - return mb_convert_encoding($string, 'ISO-2022-JP', 'UTF-8'); - } - - $mail = new Zend\Mail\Mail('ISO-2022-JP'); - // In diesem Fall kann ENCODING_7BIT verwendet werden, - // weil ISO-2022-JP MSB nicht verwendet - $mail->setBodyText(myConvert('This is the text of the mail.'), - null, - Zend\Mime\Mime::ENCODING_7BIT); - $mail->setHeaderEncoding(Zend\Mime\Mime::ENCODING_BASE64); - $mail->setFrom('somebody@example.com', myConvert('Some Sender')); - $mail->addTo('somebody_else@example.com', myConvert('Some Recipient')); - $mail->setSubject(myConvert('TestSubject')); - $mail->send(); - - diff --git a/docs/languages/de/modules/zend.mail.different-transports.rst b/docs/languages/de/modules/zend.mail.different-transports.rst deleted file mode 100644 index 1e8879a82..000000000 --- a/docs/languages/de/modules/zend.mail.different-transports.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.different-transports: - -Verwendung von unterschiedlichen Versandwegen -============================================= - -Falls du verschiedene E-Mails über verschiedene Verbindungen versenden möchtest, kannst du das Transport Objekt -auch ohne vorherigen Aufruf von ``setDefaultTransport()`` direkt an ``send()`` übergeben. Das übergebene Objekt -wird den standardmäßigen Versandweg für die aktuellen Anfrage von ``send()`` überschreiben. - -.. _zend.mail.different-transports.example-1: - -.. rubric:: Verwendung von unterschiedlichen Transportwegen - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - // erstelle Nachricht... - $tr1 = new Zend\Mail\Transport\Smtp('server@example.com'); - $tr2 = new Zend\Mail\Transport\Smtp('other_server@example.com'); - $mail->send($tr1); - $mail->send($tr2); - $mail->send(); // wieder Standardmethode verwenden - -.. note:: - - **Zusätzliche Versandwege** - - Weitere Versandwege können geschrieben werden, indem ``Zend\Mail\Transport\Interface`` implementiert wird. - - diff --git a/docs/languages/de/modules/zend.mail.encoding.rst b/docs/languages/de/modules/zend.mail.encoding.rst deleted file mode 100644 index 1125a0694..000000000 --- a/docs/languages/de/modules/zend.mail.encoding.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.encoding: - -Kodierung -========= - -Text und *HTML* Nachrichten werden standardmäßig mit dem "quotedprintable" Mechanismus kodiert. Nachrichten -Header werden auch mit dem quotedprintable Mechanismus kodiert wenn in ``setHeaderEncoding()`` nicht base64 -spezifiziert wurde. Wenn man eine Sprache verwendet die nicht auf römischen Buchstaben basiert, ist base64 besser -geeignet. Alle anderen Anhänge werden über "base64" kodiert, wenn an den *MIME* Teil keine andere Kodierung über -den ``addAttachment()`` Aufruf übergeben oder später zugewiesen worden ist. 7Bit und 8Bit Kodierung können -derzeit nur auf binärische Inhalte angewandt werden. - -Die Kodierung des Headers, speziell die Kodierung des Subjects ist ein trickreiches Thema. ``Zend_Mime`` -implementiert aktuell seinen eigenen Algorithmus um quotedprintable Header nach RFC-2045 zu kodieren. Der -Hintergrund ist das Problem von ``iconv_mime_encode()`` und ``mb_encode_mimeheader()`` in Bezug zu bestimmten -Zeichensätzen. Dieser Algorithmus unterbricht den Header nur bei Leerzeichen, das zu Headern führen könnte -welche die erwartete Länge von 76 Zeichen weit überschreiten. Für diesen Fall wird vorgeschlagen zur BASE64 -Header Kodierung zu wechseln, wie im folgenden Beispiel beschrieben: - -.. code-block:: php - :linenos: - - // Standardmäßig Zend\Mime\Mime::ENCODING_QUOTEDPRINTABLE - $mail = new Zend\Mail\Mail('KOI8-R'); - - // Auf Base64 Kodierung zurücksetzen da russisch ausgedrückt in KOI8-R zu - // Römisch basierten Buchstaben sehr unterschiedlich ist - $mail->setHeaderEncoding(Zend\Mime\Mime::ENCODING_BASE64); - -``Zend\Mail\Transport\Smtp`` kodiert die Zeilen beginnend mit einem oder zwei Punkten, so dass die Mail das SMTP -Protokoll nicht missachtet. - - diff --git a/docs/languages/de/modules/zend.mail.html-mails.rst b/docs/languages/de/modules/zend.mail.html-mails.rst deleted file mode 100644 index 1762c8a3e..000000000 --- a/docs/languages/de/modules/zend.mail.html-mails.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.html-mails: - -HTML E-Mail -=========== - -Um einen E-Mail im *HTML* Format zu versenden, muss der Hauptteil der Nachricht durch die ``setBodyHTML()`` statt -durch die ``setBodyText()`` gesetzt werden. Der *MIME* Inhaltstyp wird dann automatisch auf ``text/html`` gesetzt. -Wenn du sowohl *HTML* als auch Text Daten verwendest, wird automatisch eine multipart/alternative *MIME* E-Mail -erstellt: - -.. _zend.mail.html-mails.example-1: - -.. rubric:: Versand von HTML E-Mail - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - $mail->setBodyText('Mein netter Test Text'); - $mail->setBodyHtml('Mein netter Test Text'); - $mail->setFrom('somebody@example.com', 'Ein Versender'); - $mail->addTo('somebody_else@example.com', 'Ein Empfänger'); - $mail->setSubject('TestBetreff'); - $mail->send(); - - diff --git a/docs/languages/de/modules/zend.mail.introduction.rst b/docs/languages/de/modules/zend.mail.introduction.rst deleted file mode 100644 index 7e82648f3..000000000 --- a/docs/languages/de/modules/zend.mail.introduction.rst +++ /dev/null @@ -1,113 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.introduction: - -Einführung -========== - -.. _zend.mail.introduction.getting-started: - -Beginnen --------- - -``Zend_Mail`` stellt verallgemeinerte Funktionalitäten zum Verfassen und Senden sowohl von Text E-Mails als auch -von *MIME*-konformen mehrteiligen E-Mails bereit. Mails können mit ``Zend_Mail`` durch den Standardtransport -``Zend\Mail\Transport\Sendmail`` oder über ``Zend\Mail\Transport\Smtp`` versendet werden. - -.. _zend.mail.introduction.example-1: - -.. rubric:: Einfache E-Mail mit Zend_Mail - -Eine einfache E-Mail besteht aus einigen Empfängern, einem Betreff, einem Hauptteil und einem Versender. Um solch -eine Mail durch Verwenden von ``Zend\Mail\Transport\Sendmail`` zu Verwenden muß folgendes getan werden: - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - $mail->setBodyText('Dies ist der Text dieser E-Mail.'); - $mail->setFrom('somebody@example.com', 'Ein Versender'); - $mail->addTo('somebody_else@example.com', 'Ein Empfänger'); - $mail->setSubject('TestBetreff'); - $mail->send(); - -.. note:: - - **Minimale Definitionen** - - Um eine E-Mail mit ``Zend_Mail`` zu versenden, muß mindestens ein Empfänger, ein Versender (z.B., mit - ``setFrom()``) und ein Nachrichtentext (Text und/oder *HTML*) angeben werden. - -Für die meisten Mailattribute gibt es "Get" Methoden, um die im Mailobjekt abgelegten Informationen zu lesen. Für -weitere Einzelheiten kann in die *API* Dokumentation gesehen werden. Eine besondere Methode ist -``getRecipients()``. Sie gibt ein Array mit allen E-Mail Adressen der Empfänger zurück, die vor dem -Methodenaufruf hinzugefügt worden sind. - -Aus Sicherheitsgründen filtert ``Zend_Mail`` alle Felder des Nachrichtenkopfs, um eine "Header Injection" mittels -Zeilenvorschubzeichen (**\n**) zu verhindern. Doppelte Anführungszeichen werden zu einzelnen gewechselt und runde -Klammern zu eckigen sowohl im Namen des Senders als auch des Empfängers. Wenn die Marken in Emailadressen sind, -werden diese Marken entfernt. - -Die meisten Methoden des ``Zend_Mail`` Objekts können mit dem bequemen Flüssigen Interface verwendet werden. - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Mail(); - $mail->setBodyText('Das ist der Text der Nachricht.') - ->setFrom('somebody@example.com', 'Einige Sender') - ->addTo('somebody_else@example.com', 'Einige Empfänger') - ->setSubject('TestBetreff') - ->send(); - -.. _zend.mail.introduction.sendmail: - -Den standardmäßigen Sendmail Transport konfigurieren ----------------------------------------------------- - -Der standard Transport für eine ``Zend_Mail`` Instanz ist ``Zend\Mail\Transport\Sendmail``. Es ist -notwendigerweise ein Wrapper für *PHP*'s `mail()`_ Funktion. Wenn der `mail()`_ Funktion zusätzliche Parameter -mitgegeben werden sollen muß einfach eine neue Transport Instanz erzeugt werden und die Parameter dem Konstruktor -übergeben werden. Die neue Transport Instanz kann dann als standard ``Zend_Mail`` Transport handeln oder der -``send()`` Methode von ``Zend_Mail`` übergeben werden. - -.. _zend.mail.introduction.sendmail.example-1: - -.. rubric:: Zusätzliche Parameter einem Zend\Mail\Transport\Sendmail Transport übergeben - -Dieses Beispiel zeigt wie der Rückgabe-Pfad der `mail()`_ Funktion geändert werden kann. - -.. code-block:: php - :linenos: - - $tr = new Zend\Mail\Transport\Sendmail('-freturn_to_me@example.com'); - Zend\Mail\Mail::setDefaultTransport($tr); - - $mail = new Zend\Mail\Mail(); - $mail->setBodyText('Das ist ein Text der Mail.'); - $mail->setFrom('somebody@example.com', 'Einige Sender'); - $mail->addTo('somebody_else@example.com', 'Einige Empfänger'); - $mail->setSubject('TestBetreff'); - $mail->send(); - -.. note:: - - **Safe Mode Einschränkungen** - - Der zusätzliche optionale Parameter verursacht das die `mail()`_ Funktion fehlschlägt wenn *PHP* im Safe Mode - läuft. - -.. warning:: - - **Sendmail Transport und Windows** - - Das Handbuch von *PHP* sagt aus dass die Methode ``mail()`` ein unterschiedliches Verhalten auf Windows und auf - \*nix basierten Systemen zeigt. Die Verwendung von Sendmail Transport wird auf Windows nicht in Verbindung mit - ``addBcc()`` funktionieren. Die ``mail()`` Funktion sendet auf eine Art und Weise an den BCC Empfänger, das - alle anderen Empfänger diesen als Empfänger sehen! - - Deswegen sollte man, wenn man BCC auf einem Windows Server verwenden will, den SMTP Transport für das Senden - verwenden! - - - -.. _`mail()`: http://php.net/mail diff --git a/docs/languages/de/modules/zend.mail.multiple-emails.rst b/docs/languages/de/modules/zend.mail.multiple-emails.rst deleted file mode 100644 index 24d899ee3..000000000 --- a/docs/languages/de/modules/zend.mail.multiple-emails.rst +++ /dev/null @@ -1,87 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.multiple-emails: - -Versand von mehreren E-Mails über eine SMTP Verbindung -====================================================== - -Standardmäßig erstellt ein einzelner SMTP Transport eine einzelne Verbindung und verwendet Sie wieder wärend der -Laufzeit der Skriptausführung. Es können mehrere E-Mails über diese SMTP Verbindung gesendet werden. Ein RSET -Kommando wird vor jeder Ausführung angewendet um sicherzustellen das der korrekte SMTP Handschlag folgt. - -Optional kann auch eine standardmäßige From Emailadresse und Name definiert werden sowie ein standardmäßiger -reply-to Header. Das kann durch die statischen Methoden ``setDefaultFrom()`` und ``setDefaultReplyTo()`` getan -werden. Diese Standardwerte werden verwendet wenn man keine From oder Reply-to Adresse oder -Name angibt bis die -Standardwerte zurückgesetzt werden (gelöscht). Das Zurücksetzen der Standardwerte kann durch die Verwendung von -``clearDefaultFrom()`` und ``clearDefaultReplyTo`` durchgeführt werden. - -.. _zend.mail.multiple-emails.example-1: - -.. rubric:: Versand von mehreren E-Mails über eine SMTP Verbindung - -.. code-block:: php - :linenos: - - // Transport erstellen - $config = array('name' => 'sender.example.com'); - $transport = new Zend\Mail\Transport\Smtp('mail.example.com', $config); - - // Setzt From & Reply-To Adressen - // und Namen für alle Emails die zu versenden sind - Zend\Mail\Mail::setDefaultFrom('sender@example.com', 'John Doe'); - Zend\Mail\Mail::setDefaultReplyTo('replyto@example.com','Jane Doe'); - - // Durch die Nachrichten gehen - for ($i = 0; $i < 5; $i++) { - $mail = new Zend\Mail\Mail(); - $mail->addTo('studio@example.com', 'Test'); - $mail->setFrom('studio@example.com', 'Test'); - $mail->setSubject( - 'Demonstration - mit einer SMTP Verbindung mehrfache E-Mails senden' - ); - $mail->setBodyText('...Hier die Nachricht...'); - $mail->send($transport); - } - - // Setzt die Standardwerte zurück - Zend\Mail\Mail::clearDefaultFrom(); - Zend\Mail\Mail::clearDefaultReplyTo(); - -Wenn man eine separate Verbindung für jeden Mailtransport haben will, muß der Transport vor und nach jedem Aufruf -der ``send()`` Methode erstellt und gelöscht werden. Oder alternativ kann die Verbindung zwischen jedem Transport, -durch Zugriff auf das Protokoll Objekt des Transportes, manipuliert werden. - -.. _zend.mail.multiple-emails.example-2: - -.. rubric:: Die Transportverbindung manuell kontrollieren - -.. code-block:: php - :linenos: - - // Transport erstellen - $transport = new Zend\Mail\Transport\Smtp(); - - $protocol = new Zend\Mail\Protocol\Smtp('mail.example.com'); - $protocol->connect(); - $protocol->helo('mail.example.com'); - - $transport->setConnection($protocol); - - // Durch die Nachrichten gehen - for ($i = 0; $i < 5; $i++) { - $mail = new Zend\Mail\Mail(); - $mail->addTo('studio@example.com', 'Test'); - $mail->setFrom('studio@example.com', 'Test'); - $mail->setSubject( - 'Demonstration - mit einer SMTP Verbindung mehrfache E-Mails senden' - ); - $mail->setBodyText('...Hier die Nachricht...'); - - // Die Verbindung manuell kontrollieren - $protocol->rset(); - $mail->send($transport); - } - - $protocol->quit(); - $protocol->disconnect(); - - diff --git a/docs/languages/de/modules/zend.mail.read.rst b/docs/languages/de/modules/zend.mail.read.rst deleted file mode 100644 index 57d88ffed..000000000 --- a/docs/languages/de/modules/zend.mail.read.rst +++ /dev/null @@ -1,713 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.read: - -Lesen von Mail Nachrichten -========================== - -``Zend_Mail`` kann Mail Nachrichten von verschiedenen lokalen oder entfernen Mailspeichern lesen. Alle von diesen -haben die selbe Basis *API* für das Zählen und Holen von Nachrichten und einige von Ihnen implementieren -zusätzliche Interfaces für nicht so übliche Features. Für eine Übersicht der Features der implementierten -Speicher kann in die folgende Tabelle gesehen werden. - -.. _zend.mail.read.table-1: - -.. table:: Übersicht der Lesefeatures für Mails - - +---------------------------------+--------+--------+--------+--------+ - |Feature |Mbox |Maildir |Pop3 |IMAP | - +=================================+========+========+========+========+ - |Speichertyp |lokal |lokal |entfernt|entfernt| - +---------------------------------+--------+--------+--------+--------+ - |Nachrichten holen |Yes |Yes |Yes |Yes | - +---------------------------------+--------+--------+--------+--------+ - |MIME-Part holen |emulated|emulated|emulated|emulated| - +---------------------------------+--------+--------+--------+--------+ - |Ordner |Yes |Yes |No |Yes | - +---------------------------------+--------+--------+--------+--------+ - |Erstellen von Nachrichten/Ordnern|No |todo |No |todo | - +---------------------------------+--------+--------+--------+--------+ - |Merker |No |Yes |No |Yes | - +---------------------------------+--------+--------+--------+--------+ - |Quote |No |Yes |No |No | - +---------------------------------+--------+--------+--------+--------+ - -.. _zend.mail.read-example: - -Einfaches Beispiel für POP3 ---------------------------- - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Storage\Pop3(array('host' => 'localhost', - 'user' => 'test', - 'password' => 'test')); - - echo $mail->countMessages() . " Nachrichten gefunden\n"; - foreach ($mail as $message) { - echo "Mail von '{$message->from}': {$message->subject}\n"; - } - -.. _zend.mail.read-open-local: - -Öffnen eines lokalen Speichers ------------------------------- - -Mbox und Maildir sind zwei unterstützte Formate für lokale Mailspeicher, beide in Ihrem einfachsten Format. - -Wenn von einer Mbox Datei gelesen werden soll muß nur der Dateiname an den Konstruktor von -``Zend\Mail\Storage\Mbox`` übergeben werden: - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Storage\Mbox(array('filename' => - '/home/test/mail/inbox')); - -Maildir ist sehr einfach benötigt aber einen Verzeichnisnamen: - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Storage\Maildir(array('dirname' => - '/home/test/mail/')); - -Beide Konstruktoren werfen eine ``Zend\Mail\Exception`` Ausnahme wenn der Speicher nicht gelesen werden kann. - -.. _zend.mail.read-open-remote: - -Öffnen eines entfernten Speichers ---------------------------------- - -Für entfernte Speicher werden die zwei populärsten Protokolle unterstützt: Pop3 und Imap. Beide benötigen -mindestens einen Host und einen Benutzer für das Verbinden und das Login. Das Standardpasswort ist ein leerer -String, der Standardport wie im *RFC* Protokoll definiert. - -.. code-block:: php - :linenos: - - // Verbinden mit Pop3 - $mail = new Zend\Mail\Storage\Pop3(array('host' => 'example.com', - 'user' => 'test', - 'password' => 'test')); - - // Verbinden mit Imap - $mail = new Zend\Mail\Storage\Imap(array('host' => 'example.com', - 'user' => 'test', - 'password' => 'test')); - - // Beispiel für einen nicht Standardport - $mail = new Zend\Mail\Storage\Pop3(array('host' => 'example.com', - 'port' => 1120 - 'user' => 'test', - 'password' => 'test')); - -Für beide Speicher werden *SSL* und TLS unterstützt. Wenn *SSL* verwendet wird, wird der Standardport laut *RFC* -geändert. - -.. code-block:: php - :linenos: - - // Beispiel für Zend\Mail\Storage\Pop3 - // funktioniert auch für Zend\Mail\Storage\Imap - - // SSL mit einem unterschiedlichen Port verwenden - // (Standard ist 995 für Pop3 und 993 für Imap) - $mail = new Zend\Mail\Storage\Pop3(array('host' => 'example.com', - 'user' => 'test', - 'password' => 'test', - 'ssl' => 'SSL')); - - // Verwenden von TLS - $mail = new Zend\Mail\Storage\Pop3(array('host' => 'example.com', - 'user' => 'test', - 'password' => 'test', - 'ssl' => 'TLS')); - -Beide Konstruktoren können eine ``Zend\Mail\Exception`` oder ``Zend\Mail\Protocol\Exception`` werfen (erweitert -``Zend\Mail\Exception``), abhängig vom Typ des Fehlers. - -.. _zend.mail.read-fetching: - -Nachrichten holen und einfache Methoden ---------------------------------------- - -Wenn der Speicher einmal geöffnet wurde können Nachrichten geholt werden. Man benötigt die Nachrichtennummer, -welche ein Zähler ist der mit 1 für die erste Nachricht beginnt. Um die Nachrichten zu holen muß die Methode -``getMessage()`` verwendet werden: - -.. code-block:: php - :linenos: - - $message = $mail->getMessage($messageNum); - -Zugriff über Arrays ist auch möglich, unterstützt aber nicht jeden zusätzlichen Parameter der zu -``getMessage()`` hinzugefügt werden könnte: - -.. code-block:: php - :linenos: - - $message = $mail[$messageNum]; - -Um über alle Nachrichten zu iterieren wurde das Iterator Interface implementiert: - -.. code-block:: php - :linenos: - - foreach ($mail as $messageNum => $message) { - // mach was ... - } - -Um die Nachrichten im Speicher zu zählen kann entweder die Methode ``countMessages()`` oder der Zugriff auf Arrays -verwendet werden: - -.. code-block:: php - :linenos: - - // Methode - $maxMessage = $mail->countMessages(); - - // Array Zugriff - $maxMessage = count($mail); - -Um eine Mail zu entfernen kann die Methode ``removeMessage()`` oder auch der Array Zugriff verwendet werden: - -.. code-block:: php - :linenos: - - // Methode - $mail->removeMessage($messageNum); - - // Array Zugriff - unset($mail[$messageNum]); - -.. _zend.mail.read-message: - -Arbeiten mit Nachrichten ------------------------- - -Nachdem die Nachrichten mit ``getMessage()`` geholt wurden, wird man die Kopfzeilen, den Inhalt oder einzelne Teile -einer Mehrteiligen Nachricht holen wollen. Auf alle Kopfzeilen kann über die Eigenschaften oder die Methode -``getHeader()``, wenn man mehr Kontrolle oder ungewöhnliche Kopfzeilen hat, zugegriffen werden. Die Kopfzeilen -sind intern kleingeschrieben, weswegen die Groß- und Kleinschreibung der Kopfzeilen in der Mail Nachricht egal -ist. Kopfzeilen mit einem Bindestrich können auch in camel-case Schreibweise geschrieben werden. Wenn für beide -Schreibweisen kein Header gefunden wird, wird eine Ausnahme geworfen. Um das zu verhindern kann die -``headerExists()`` Methode verwendet werden um die Existenz einer Kopfzeile zu prüfen. - -.. code-block:: php - :linenos: - - // Nachrichten Objekt holen - $message = $mail->getMessage(1); - - // Betreff der Nachricht holen - echo $message->subject . "\n"; - - // Inhalts-Typ der Kopfzeile holen - $type = $message->contentType; - - // Prüfen ob CC gesetzt ist: - if (isset($message->cc)) { // oder $message->headerExists('cc'); - $cc = $message->cc; - } - -Wenn mehrere Kopfzeilen mit dem selben Namen vorhanden sind z.B. die empfangenen Kopfzeilen kann es gewünscht sein -diese als Array statt als String zu haben, was mit der ``getHeader()`` Methode möglich ist. - -.. code-block:: php - :linenos: - - // Kopfzeilen als Eigenschaft holen - das Ergebnis ist immer ein String, - // mit Zeilenumbruch zwischen den einzelnen Vorkommen in der Nachricht - $received = $message->received; - - // Das gleiche über die getHeader() Methode - $received = $message->getHeader('received', 'string'); - - // Besser ein Array mit einem einzelnen Eintrag für jedes Vorkommen - $received = $message->getHeader('received', 'array'); - foreach ($received as $line) { - // irgendwas tun - } - - // Wenn kein Format definiert wurde wird die interne Repräsentation - // ausgegeben (String für einzelne Kopfzeilen, Array für mehrfache) - $received = $message->getHeader('received'); - if (is_string($received)) { - // Nur eine empfangene Kopfzeile in der Nachricht gefunden - } - -Die Methode ``getHeaders()`` gibt alle Kopfzeilen als Array mit den kleingeschriebenen Namen als Schlüssel und den -Wert als Array für mehrere Kopfzeilen oder als String für einzelne Kopfzeilen. - -.. code-block:: php - :linenos: - - // Alle Kopfzeilen wegschmeißen - foreach ($message->getHeaders() as $name => $value) { - if (is_string($value)) { - echo "$name: $value\n"; - continue; - } - foreach ($value as $entry) { - echo "$name: $entry\n"; - } - } - -Wenn keine Nachricht aus mehreren Teilen vorlieg kann der Inhalt sehr einfach über ``getContent()`` geholt werden. -Anders als die Kopfzeilen wird der Inhalt nur geholt wenn dies benötigt wird (wie spätes-holen). - -.. code-block:: php - :linenos: - - // Inhalt der Nachricht für HTML ausgeben - echo '
';
-   echo $message->getContent();
-   echo '
'; - -Die Prüfung auf mehrteilige Nachrichten wird in der Methode ``isMultipart()`` gemacht. Wenn eine mehrteilige -Nachricht vorliegt kann eine Instanz von ``Zend\Mail\Part`` mit der Methode ``getPart()`` geholt werden. -``Zend\Mail\Part`` ist die Basisklasse von ``Zend\Mail\Message``, sie hat also die gleichen Methoden: -``getHeader()``, ``getHeaders()``, ``getContent()``, ``getPart()``, ``isMultipart()`` und die Eigenschaften der -Kopfzeilen. - -.. code-block:: php - :linenos: - - // Hole den ersten nicht geteilten Teil - $part = $message; - while ($part->isMultipart()) { - $part = $message->getPart(1); - } - echo 'Der Typ des Teils ist ' . strtok($part->contentType, ';') . "\n"; - echo "Inhalt:\n"; - echo $part->getContent(); - -``Zend\Mail\Part`` implementiert auch den ``RecursiveIterator``, welcher es sehr einfach macht alle Teile zu -durchsuchen. Und für die einfache Ausgabe wurde auch die magische Methode ``__toString()`` implementiert, welche -den Inhalt zurückgibt. - -.. code-block:: php - :linenos: - - // Gibt den ersten text/plain Teil aus - $foundPart = null; - foreach (new RecursiveIteratorIterator($mail->getMessage(1)) as $part) { - try { - if (strtok($part->contentType, ';') == 'text/plain') { - $foundPart = $part; - break; - } - } catch (Zend\Mail\Exception $e) { - // ignorieren - } - } - if (!$foundPart) { - echo 'kein reiner Text-Teil gefunden'; - } else { - echo "Reiner Text-Teil: \n" . $foundPart; - } - -.. _zend.mail.read-flags: - -Auf Flags prüfen ----------------- - -Maildir und IMAP unterstützen das Speichern von Flags. Die Klasse ``Zend\Mail\Storage`` hat Konstanten für alle -bekannten maildir und IMAP System Flags, welche ``Zend\Mail\Storage::FLAG_`` heißen. Um auf Flags zu -Prüfen hat ``Zend\Mail\Message`` eine Methode die ``hasFlag()`` heißt. Mit ``getFlags()`` erhält man alle -gesetzten Flags. - -.. code-block:: php - :linenos: - - // Finde ungelesene Nachrichten - echo "Ungelesene Nachrichten:\n"; - foreach ($mail as $message) { - if ($message->hasFlag(Zend\Mail\Storage::FLAG_SEEN)) { - continue; - } - // Vorherige/Neue Nachrichten markieren - if ($message->hasFlag(Zend\Mail\Storage::FLAG_RECENT)) { - echo '! '; - } else { - echo ' '; - } - echo $message->subject . "\n"; - } - - // Prüfen auf bekannte Flags - $flags = $message->getFlags(); - echo "Nachricht wurde markiert als: "; - foreach ($flags as $flag) { - switch ($flag) { - case Zend\Mail\Storage::FLAG_ANSWERED: - echo 'Beantwortet '; - break; - case Zend\Mail\Storage::FLAG_FLAGGED: - echo 'Markiert '; - break; - - // ... - // Auf andere Flags prüfen - // ... - - default: - echo $flag . '(unbekanntes Flag) '; - } - } - -Da IMAP Benutzern oder auch Clients selbstdefinierte Flags erlaubt, können auch Flags empfangen werden die keine -Konstante in ``Zend\Mail\Storage`` haben. Stattdessen werden sie als String zurückgegeben und können auf dem -selben Weg mit ``hasFlag()`` geprüft werden. - -.. code-block:: php - :linenos: - - // Nachricht auf vom Client definierte Flags $IsSpam, $SpamTested prüfen - if (!$message->hasFlag('$SpamTested')) { - echo 'Die Nachricht wurde nicht auf Spam geprüft'; - } else if ($message->hasFlag('$IsSpam')) { - echo 'Diese Nachricht ist Spam'; - } else { - echo 'Diese Nachricht ist Speck'; - } - -.. _zend.mail.read-folders: - -Verwenden von Ordnern ---------------------- - -Alle Speicher, ausser Pop3, unterstützen Ordner, welche Mailboxen genannt werden. Das Interface das von allen -Speichern implementiert wurde und Ordner unterstützt heißt ``Zend\Mail\Storage\Folder\Interface``. Alle diese -Klassen besitzen auch einen zusätzlichen optionalen Parameter welcher ``folder`` heißt, was der ausgewählt -Ordner nach dem Login, im Konstruktor ist. - -Für den lokalen Speicher müssen die eigenen Klassen ``Zend\Mail\Storage\Folder\Mbox`` oder -``Zend\Mail\Storage\Folder\Maildir`` genannt verwendet werden. Beide benötigen einen Parameter der ``dirname`` -heißt mit dem Namen des Basisverzeichnisses. Das Format für Maildir ist wie in Maildir++ definiert (mit einem -Punkt als Standardbegrenzer), Mbox ist eine Verzeichnisstruktur mit Mbox Dateien. Wenn im Mbox Basisverzeichnis -keine Mbox Datei vorhanden ist die INBOX heißt, muß ein anderer Ordner im Konstruktor gesetzt werden. - -``Zend\Mail\Storage\Imap`` unterstützt Ordner schon standardmäßig. Beispiele für das Öffnen solcher Speicher: - -.. code-block:: php - :linenos: - - // MBox mit Ordnern - $mail = new Zend\Mail\Storage\Folder\Mbox(array('dirname' => - '/home/test/mail/')); - - // MBox mit standard Ordner der nicht INBOX heißt, funktioniert auch - // mit Zend\Mail\Storage\Folder\Maildir und Zend\Mail\Storage\Imap - $mail = new Zend\Mail\Storage\Folder\Mbox(array('dirname' => - '/home/test/mail/', - 'folder' => - 'Archive')); - - // Maildir mit Ordnern - $mail = new Zend\Mail\Storage\Folder\Maildir(array('dirname' => - '/home/test/mail/')); - - // Maildir mir Doppelpunkt als Begrenzung, wie in Maildir++ empfohlen - $mail = new Zend\Mail\Storage\Folder\Maildir(array('dirname' => - '/home/test/mail/', - 'delim' => ':')); - - // IMAP ist genauso mit und ohne Ordner - $mail = new Zend\Mail\Storage\Imap(array('host' => 'example.com', - 'user' => 'test', - 'password' => 'test')); - -Mit der Methode getFolders($root = null) kann die Verzeichnisstruktur beginnend mit dem Basisverzeichnis oder einem -angegebenen Ordner ausgegeben werden. Sie wird als Instanz von ``Zend\Mail\Storage\Folder`` zurückgegeben, welche -``RecursiveIterator`` implementiert und alle Kinder sind genauso Instanzen von ``Zend\Mail\Storage\Folder``. Jede -dieser Instanzen hat einen lokalen und einen globalen Namen der durch die Methoden ``getLocalName()`` und -``getGlobalName()`` zurückgegeben wird. Der globale Name ist der absolute Name des Basisordners (inklusive -Begrenzer), der lokale Name ist der Name im Elternordner. - -.. _zend.mail.read-folders.table-1: - -.. table:: Namen für Nachrichtenordner - - +---------------+------------+ - |Globaler Name |Lokaler Name| - +===============+============+ - |/INBOX |INBOX | - +---------------+------------+ - |/Archive/2005 |2005 | - +---------------+------------+ - |List.ZF.General|General | - +---------------+------------+ - -Wenn der Iterator verwendet wird ist der lokale Name der Schlüssel des aktuellen Elements. Der globale Name wird -auch durch die magische Methode ``__toString()`` zurückgegeben. Gleiche Ordner können nicht ausgewählt werden, -was bedeutet das Sie keine Nachrichten speichern können und die Auswahl von Ergebnisses führt zu einem Fehler. -Das kann mit der Methode ``isSelectable()`` geprüft werden. Es ist also sehr einfach den ganzen Baum in einer -Ansicht auszugeben: - -.. code-block:: php - :linenos: - - $folders = new RecursiveIteratorIterator($this->mail->getFolders(), - RecursiveIteratorIterator::SELF_FIRST); - echo ''; - -Der aktuell ausgewählte Ordner wird durch die Methode ``getSelectedFolder()`` zurückgegeben. Das Ändern von -Ordnern wird mit der Methode ``selectFolder()`` durchgeführt, welche den globalen Namen als Parameter benötigt. -Wenn das Schreiben von Begrenzern vermieden werden soll, können auch die Eigenschaften einer -``Zend\Mail\Storage\Folder`` Instanz verwendet werden: - -.. code-block:: php - :linenos: - - // Abhängig vom Mail Speicher und seinen Einstellungen - // $rootFolder->Archive->2005 ist das gleiche wie: - // /Archive/2005 - // Archive:2005 - // INBOX.Archive.2005 - // ... - $folder = $mail->getFolders()->Archive->2005; - echo 'Der letzte Ordner war ' - . $mail->getSelectedFolder() - . "neuer Ordner ist $folder\n"; - $mail->selectFolder($folder); - -.. _zend.mail.read-advanced: - -Fortgeschrittene Verwendung ---------------------------- - -.. _zend.mail.read-advanced.noop: - -NOOP verwenden -^^^^^^^^^^^^^^ - -Wenn ein entfernter Speicher verwendet werden soll und einige lange Aufgaben anstehen kann es notwendig sein die -Verbindung über noop am Leben zu halten: - -.. code-block:: php - :linenos: - - foreach ($mail as $message) { - - // einige Berechnungen ... - - $mail->noop(); // am Leben halten - - // irgendwas anderes tun ... - - $mail->noop(); // am Leben halten - } - -.. _zend.mail.read-advanced.caching: - -Instanzen cachen -^^^^^^^^^^^^^^^^ - -``Zend\Mail\Storage\Mbox``, ``Zend\Mail\Storage\Folder\Mbox``, ``Zend\Mail\Storage\Maildir`` und -``Zend\Mail\Storage\Folder\Maildir`` implementieren die magischen Methoden ``__sleep()`` und ``__wakeup()`` was -bedeutet das Sie serialisierbar sind. Das vermeidet das Parsen von Dateien oder Verzeichnisbäumen mehr als einmal. -Der Nachteil ist das der Mbox oder Maildir Speicher sich nicht Ändern sollte. Einige einfache Prüfungen werden -durchgeführt, wie das neuparsen der aktuellen Mbox Datei wenn sich der Bearbeitungszeitpunkt ändert oder das -neuparsen der Verzeichnisstruktur wenn ein Ordner entfernt wurde (was immer noch zu einem Fehler führt, es kan -aber im Nachhinein ein anderer Ordner gesucht werden). Es ist besser etwas wie eine Signaldatei für Änderungen zu -haben, und diese zu Prüfen bevor eine gecachete Instanz verwendet wird. - -.. code-block:: php - :linenos: - - // Es wird kein spezieller Cache Handler/Klasse verwendet - // Code ändern damit er zum Cache Handler passt - $signal_file = '/home/test/.mail.last_change'; - $mbox_basedir = '/home/test/mail/'; - $cache_id = 'Beispiel Nachrichten Cache ' . $mbox_basedir . $signal_file; - - $cache = new Your_Cache_Class(); - if (!$cache->isCached($cache_id) || - filemtime($signal_file) > $cache->getMTime($cache_id)) { - $mail = new Zend\Mail\Storage\Folder\Pop3(array('dirname' => - $mbox_basedir)); - } else { - $mail = $cache->get($cache_id); - } - - // irgendwas machen ... - - $cache->set($cache_id, $mail); - -.. _zend.mail.read-advanced.extending: - -Prokoll Klassen erweitern -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Entfernte Speicher verwenden zwei Klassen: ``Zend\Mail\Storage\`` und ``Zend\Mail\Protocol\``. Die -Protkoll Klasse übersetzt die Protokollbefehle und antwortet von und zu *PHP*, wie Methoden für die Befehle oder -Variablen mit verschiedenen Strukturen für Daten. Die andere/Haupt Klasse implementiert das Standard Interface. - -Wenn zusätzliche Protokoll Features benötigt werden kann die Protokoll Klasse erweitert werden und diese im -Konstruktor der Basisklasse verwendet werden. Als Beispiel nehmen wir an das verschiedene Ports abgeklopft werden -bevor auf POP3 verbunden werden kann. - -.. code-block:: php - :linenos: - - class Example_Mail_Exception extends Zend\Mail\Exception - { - } - - class Example_Mail_Protocol_Exception extends Zend\Mail\Protocol\Exception - { - } - - class Example_Mail_Protocol_Pop3_Knock extends Zend\Mail\Protocol\Pop3 - { - private $host, $port; - - public function __construct($host, $port = null) - { - // kein automatisches Verbinden in dieser Klasse - $this->host = $host; - $this->port = $port; - } - - public function knock($port) - { - $sock = @fsockopen($this->host, $port); - if ($sock) { - fclose($sock); - } - } - - public function connect($host = null, $port = null, $ssl = false) - { - if ($host === null) { - $host = $this->host; - } - if ($port === null) { - $port = $this->port; - } - parent::connect($host, $port); - } - } - - class Example_Mail_Pop3_Knock extends Zend\Mail\Storage\Pop3 - { - public function __construct(array $params) - { - // ... Parameter hier prüfen! ... - $protocol = new Example_Mail_Protocol_Pop3_Knock($params['host']); - - // Spezial "Ding" hier machen - foreach ((array) $params['knock_ports'] as $port) { - $protocol->knock($port); - } - - // den richtigen Status erhalten - $protocol->connect($params['host'], $params['port']); - $protocol->login($params['user'], $params['password']); - - // Eltern initialisieren - parent::__construct($protocol); - } - } - - $mail = new Example_Mail_Pop3_Knock(array('host' => 'localhost', - 'user' => 'test', - 'password' => 'test', - 'knock_ports' => - array(1101, 1105, 1111))); - -Wie gesehen werden kann wird angenommen das man immer verbunden, eingeloggt und, wenn es unterstützt wird, ein -Ordner im Konstruktor der Basisklasse ausgewählt ist. Das bedeutet, wenn eine eigene Protokollklasse verwendet -wird muß immer sichergestellt werden dass das durchgeführt wird, da sonst die nächste Methode fehlschlagen wird -wenn der Server das im aktuellen Status nicht zulässt. - -.. _zend.mail.read-advanced.quota: - -Quote verwenden (seit 1.5) -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``Zend\Mail\Storage\Writable\Maildir`` bietet Unterstützung für Maildir++ Quoten. Diese sind standardmäßig -ausgeschaltet, aber es ist möglich Sie manuell zu verwenden, wenn automatische Checks nicht gewünscht sind (das -bedeutet ``appendMessage()``, ``removeMessage()`` und ``copyMessage()`` führen keine Checks durch und fügen -keinen Eintrag zur maildirsize Datei hinzu). Wenn aktiviert, wird eine Ausnahme geworfen wenn versucht wird in -maildir zu schreiben wenn es bereits voll ist und die Quote überschritten wurde. - -Es gibt drei Methoden die für Quoten verwendet werden: ``getQuota()``, ``setQuota()`` und ``checkQuota()``: - -.. code-block:: php - :linenos: - - $mail = new Zend\Mail\Storage\Writable\Maildir(array('dirname' => - '/home/test/mail/')); - $mail->setQuota(true); // true zum einschalten, false zum ausschalten - echo 'Quotenprüfung ist jetzt ', $mail->getQuota() ? 'eingeschaltet' - : 'ausgeschaltet', "\n"; - // Quotenprüfung kann verwendet werden - // selbst wenn die Quotenprüfung ausgeschaltet ist - echo 'Sie sind ', $mail->checkQuota() ? 'über der Quote' - : 'nicht über der Quote', "\n"; - -``checkQuota()`` kann eine viel detailiertere Antwort zurückgeben: - -.. code-block:: php - :linenos: - - $quota = $mail->checkQuota(true); - echo 'Sie sind ', $quota['over_quota'] ? 'über der Quote' - : 'nicht über der Quote', "\n"; - echo 'Sie haben ', - $quota['count'], - ' von ', - $quota['quota']['count'], - ' Nachrichten und verwenden '; - echo $quota['size'], ' von ', $quota['quota']['size'], ' Oktets'; - -Wenn man eigene Quoten spezifizieren will statt die bereits in der maildirsize Datei spezifizierte zu verwenden -kann das mit ``setQuota()`` getan werden: - -.. code-block:: php - :linenos: - - // message count and octet size supported, order does matter - $quota = $mail->setQuota(array('size' => 10000, 'count' => 100)); - -Wenn eigene Quotenchecks hinzugefügt werden sollen können einzelne Buchstaben als Schlüssel verwendet werden und -Sie werden reserviert (aber logischerweise nicht geprüft). Es ist auch möglich -``Zend\Mail\Storage\Writable\Maildir`` zu erweitern um eigene Quoten zu definieren wenn die maildirsize Datei fehlt -(was in Maildir++ vorkommen kann): - -.. code-block:: php - :linenos: - - class Example_Mail_Storage_Maildir extends Zend\Mail\Storage\Writable\Maildir { - // getQuota wird mit $fromStorage = true durch die Quotenprüfung aufgerufen - public function getQuota($fromStorage = false) { - try { - return parent::getQuota($fromStorage); - } catch (Zend\Mail\Storage\Exception $e) { - if (!$fromStorage) { - // unbekannter Fehler: - throw $e; - } - // Die maildirsize Datei muß fehlen - - list($count, $size) = get_quota_from_somewhere_else(); - return array('count' => $count, 'size' => $size); - } - } - } - - diff --git a/docs/languages/de/modules/zend.mail.sending.rst b/docs/languages/de/modules/zend.mail.sending.rst deleted file mode 100644 index e8dc94bf3..000000000 --- a/docs/languages/de/modules/zend.mail.sending.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.sending: - -Versand über SMTP -================= - -Um eine E-Mail über SMTP zu versenden, muss ``Zend\Mail\Transport\Smtp`` erstellt und in ``Zend_Mail`` registriert -werden, bevor die ``send()`` Methode aufgerufen wird. Für alle verbleibenden Aufrufe von ``Zend\Mail\Mail::send()`` im -aktuellen Skript wird dann der SMTP Versand verwendet: - -.. _zend.mail.sending.example-1: - -.. rubric:: E-Mail Versand über SMTP - -.. code-block:: php - :linenos: - - $tr = new Zend\Mail\Transport\Smtp('mail.example.com'); - Zend\Mail\Mail::setDefaultTransport($tr); - -Die ``setDefaultTransport()`` Methode und der Konstruktor von ``Zend\Mail\Transport\Smtp`` sind nicht aufwendig. -Diese beiden Zeilen können beim Start des Skriptes (z.B., config.inc oder ähnliches) abgearbeitet werden, um das -Verhalten der ``Zend_Mail`` Klasse für den Rest des Skriptes zu konfigurieren. Somit bleiben Informationen zur -Konfiguration außerhalb der Anwendungslogik - ob E-Mail über SMTP oder `mail()`_ versandt werden, welcher -Mailserver verwendet wird, usw. - - - -.. _`mail()`: http://php.net/mail diff --git a/docs/languages/de/modules/zend.mail.smtp-authentication.rst b/docs/languages/de/modules/zend.mail.smtp-authentication.rst deleted file mode 100644 index d54d267cd..000000000 --- a/docs/languages/de/modules/zend.mail.smtp-authentication.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.smtp-authentication: - -SMTP Authentifizierung -====================== - -``Zend_Mail`` unterstützt die Verwendung von SMTP Authentifizierung, welche eingeschaltet werden kann durch die -Übergabe des 'auth' Parameters im Konfigurationsarray des ``Zend\Mail\Transport\Smtp`` Konstruktors. Die -vorhandenen eingebauten Authentifizierungsmethoden sind PLAIN, LOGIN und CRAM-MD5 welche alle einen Benutzernamen- -('username') und einen Passwortwert ('password') im Konfigurations Array erwarten. - -.. _zend.mail.smtp-authentication.example-1: - -.. rubric:: Authentifizierung innerhalb von Zend\Mail\Transport\Smtp einschalten - -.. code-block:: php - :linenos: - - $config = array('auth' => 'login', - 'username' => 'MeinBenutzername', - 'password' => 'Passwort'); - - $transport = new Zend\Mail\Transport\Smtp('mail.server.com', $config); - - $mail = new Zend\Mail\Mail(); - $mail->setBodyText('Das ist der Text des Mails.'); - $mail->setFrom('sender@test.com', 'Einige Sender'); - $mail->addTo('recipient@test.com', 'Einige Empfänger'); - $mail->setSubject('TestBetreff'); - $mail->send($transport); - -.. note:: - - **Authentifizierungs Typen** - - Der Authentifizierungs Typ ist Groß-Kleinschreibungs unempfindlich enthält aber keine Satzzeichen. Um z.B. - CRAM-MD5 zu verwenden müsste 'auth' => 'crammd5' dem ``Zend\Mail\Transport\Smtp`` Konstruktor übergeben - werden. - - diff --git a/docs/languages/de/modules/zend.mail.smtp-secure.rst b/docs/languages/de/modules/zend.mail.smtp-secure.rst deleted file mode 100644 index e355dc97a..000000000 --- a/docs/languages/de/modules/zend.mail.smtp-secure.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. EN-Revision: none -.. _zend.mail.smtp-secure: - -SMTP Übertragungen sichern -========================== - -``Zend_Mail`` unterstützt die Verwendung von TLS oder *SSL* um SMTP Verbindungen zu sichern. Das kann -eingeschaltet werden durch das Übergeben des 'ssl' Parameters an das Konfigurationsarray im -``Zend\Mail\Transport\Smtp`` Konstruktor indem entweder der Wert 'ssl' oder 'tls' übergeben wird. Ein Port kann -optional angegeben werden, andernfalls ist er standardmäßig 25 für TLS oder 465 für *SSL*. - -.. _zend.mail.smtp-secure.example-1: - -.. rubric:: Aktivieren einer sicheren Verbindung innerhalb von Zend\Mail\Transport\Smtp - -.. code-block:: php - :linenos: - - $config = array('ssl' => 'tls', - 'port' => 25); // Optionale unterstützte Portnummer - - $transport = new Zend\Mail\Transport\Smtp('mail.server.com', $config); - - $mail = new Zend\Mail\Mail(); - $mail->setBodyText('Das ist der Text der Mail.'); - $mail->setFrom('sender@test.com', 'Einige Sender'); - $mail->addTo('recipient@test.com', 'Einige Empfänger'); - $mail->setSubject('TestBetreff'); - $mail->send($transport); - - diff --git a/docs/languages/de/modules/zend.memory.memory-manager.rst b/docs/languages/de/modules/zend.memory.memory-manager.rst deleted file mode 100644 index 2d2a2c709..000000000 --- a/docs/languages/de/modules/zend.memory.memory-manager.rst +++ /dev/null @@ -1,171 +0,0 @@ -.. EN-Revision: none -.. _zend.memory.memory-manager: - -Memory Manager -============== - -.. _zend.memory.memory-manager.creation: - -Erstellen eines Memory Manager ------------------------------- - -Ein neuer Memory Manager (``Zend\Memory\Manager`` object) kann erstellt werden durch Verwendung der -``Zend\Memory\Memory::factory($backendName [, $backendOprions])`` Methode. - -Das erste Argument ``$backendName`` ist eine Zeichenkette die eine der Backend Implementationen benennt welche -durch ``Zend_Cache`` unterstützt werden. - -Das zweite Argument ``$backendOptions`` ist ein optionales Array für die Optionen des Backends. - -.. code-block:: php - :linenos: - - $backendOptions = array( - // Verzeichnis in dem die geswappten Memory Blöcke abgelegt werden - 'cache_dir' => './tmp/' - ); - - $memoryManager = Zend\Memory\Memory::factory('File', $backendOptions); - -``Zend_Memory`` verwendet :ref:`Zend_Cache Backends ` als Speicheranbieter. - -Der spezielle Name 'None' kann als Backend Name verwendet werden, zusätzlich zu den Standard ``Zend_Cache`` -Backends. - -.. code-block:: php - :linenos: - - $memoryManager = Zend\Memory\Memory::factory('None'); - -Wenn 'None' als Backend Name verwendet wird, dann tauscht der Memory Manager niemals die Memory Blöcke. Das ist -nützlich wenn man weiß das Speicher nicht limitiert ist oder die Gesamtgröße der Objekte nie das Speicherlimit -erreicht. - -Das 'None' Backend benötigt keine Definition von Optionen. - -.. _zend.memory.memory-manager.objects-management: - -Memory Objekte verwalten ------------------------- - -Diese Sektion beschreibt die Erstellung und Vernichtung von Objekten im Memory Manager, und die Einstellungen um -das Verhalten des Memory Managers zu kontrollieren. - -.. _zend.memory.memory-manager.objects-management.movable: - -Erstellung verschiebbarer Objekte -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Verschiebbare Objekte (Objekte, welche verschoben werden können) können erstellt werden mit Hilfe der -``Zend\Memory\Manager::create([$data])`` Methode: - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->create($data); - -Das ``$data`` Argument ist optional und wird verwendet um die Objekt Werte zu initialisieren. Wenn das ``$data`` -unterdrückt wird, ist der Wert eine leere Zeichenkette. - -.. _zend.memory.memory-manager.objects-management.locked: - -Erstellen verschlüsselter Objekte -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Verschlüsselte Objekte (Objekte, welche niemals getauscht werden) können erstellt werden mit Hilfe der -``Zend\Memory\Manager::createLocked([$data])`` Methode: - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->createLocked($data); - -Das ``$data`` Argument ist optional und wird verwendet um die Objekt Werte zu initialisieren. Wenn das ``$data`` -Argument unterdrückt wird, ist der Wert eine leere Zeichenkette. - -.. _zend.memory.memory-manager.objects-management.destruction: - -Objekte vernichten -^^^^^^^^^^^^^^^^^^ - -Memory Objekte werden automatische vernichtet und vom Speicher entfernt wenn sie ausserhalb des Bereichs sind: - -.. code-block:: php - :linenos: - - function foo() - { - global $memoryManager, $memList; - - ... - - $memObject1 = $memoryManager->create($data1); - $memObject2 = $memoryManager->create($data2); - $memObject3 = $memoryManager->create($data3); - - ... - - $memList[] = $memObject3; - - ... - - unset($memObject2); // $memObject2 wird hier zerstört - - ... - // $memObject1 wird hier zerstört - // Aber das $memObject3 Objekt ist noch immer referenziert - // durch $memList und ist nicht zerstört - } - -Das gilt für beide, verschiebbare und verschlüsselte Objekte. - -.. _zend.memory.memory-manager.settings: - -Memory Manager Einstellungen ----------------------------- - -.. _zend.memory.memory-manager.settings.memory-limit: - -Memory Limit -^^^^^^^^^^^^ - -Das Memory Limit ist eine Zahl von Bytes die zur Verwendung durch geladene verschiebbare Objekte erlaubt ist. - -Wenn das Laden oder Erstellen eines Objekts ein Überschreiten des Limits der Verwendung des Speichers verursachen -würde, tauscht der Memory Manager einige andere Objekte. - -Das Memory Limit kann empfangen oder gesetzt werden durch Verwendung der ``getMemoryLimit()`` und -``setMemoryLimit($newLimit)`` Methoden: - -.. code-block:: php - :linenos: - - $oldLimit = $memoryManager->getMemoryLimit(); // Memorylimit in Bytes empfangen - $memoryManager->setMemoryLimit($newLimit); // Memorylimit in Bytes setzen - -Ein negativer Wert für das Memory Limit bedeutet 'kein Limit'. - -Der Standardwert ist zweidrittel des Wertes von 'memory_limit' in php.ini oder 'kein Limit' (-1) wenn -'memory_limit' in der php.ini nicht gesetzt ist. - -.. _zend.memory.memory-manager.settings.min-size: - -MinSize -^^^^^^^ - -MinSize ist die minimalste Größe von Memory Objekten, welche vom Memory Manager getauscht werden können. Der -Memory Manager tauscht keine Objekte welche kleiner als dieser Wert sind. Das vermindert die Anzahl von -Tausch-/Lade- Operationen. - -Man kann die minimale Größe empfangen oder setzen durch Verwendung der ``getMinSize()`` und -``setMinSize($newSize)`` Methoden: - -.. code-block:: php - :linenos: - - $oldMinSize = $memoryManager->getMinSize(); // MinSize in Bytes empfangen - $memoryManager->setMinSize($newSize); // MinSize Limit in Bytes setzen - -Die standardmäßige Wert für die minimale Größe ist 16KB (16384 bytes). - - diff --git a/docs/languages/de/modules/zend.memory.memory-objects.rst b/docs/languages/de/modules/zend.memory.memory-objects.rst deleted file mode 100644 index c46b3bcca..000000000 --- a/docs/languages/de/modules/zend.memory.memory-objects.rst +++ /dev/null @@ -1,218 +0,0 @@ -.. EN-Revision: none -.. _zend.memory.memory-objects: - -Memory Objekte -============== - -.. _zend.memory.memory-objects.movable: - -Verschiebbar ------------- - -Um verschiebbare Memory Objekte zu Erstellen kann die ``create([$data])`` Methode des Memory Managers verwendet -werden: - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->create($data); - -"Verschiebbar" bedeutet das solche Objekte verschoben und von Speicher entfernt werden können und wieder geladen -werden wenn der Code der Anwendung auf das Objekt wieder zugreift. - -.. _zend.memory.memory-objects.locked: - -Gesperrt --------- - -Gesperrte Memory Objekte können erstellt werden mit Hilfe der ``createLocked([$data])`` Methode des Memory -Managers: - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->createLocked($data); - -"Gesperrt" bedeutet das solche Objekte niemals getauscht und vom Speicher entfernt werden. - -Gesperrte Objekte haben das selbe Interface wie verschiebbare Objekte (``Zend\Memory\Container\Interface``). -Deswegen können gesperrte Objekte an jedem Platz statt verschiebbaren Objekten verwendet werden. - -Es ist nützlich wenn eine Anwendung oder Entwickler entscheiden kann, das einige Objekte niemals getauscht werden -sollen, basierend auf Entscheidungen der Geschwindigkeit. - -Der Zugriff auf gesperrte Objekte ist schneller, weil der Memory Manager die Änderungen für diese Objekte nicht -verfolgen muß. - -Die Klasse der gelockten Objekte (``Zend\Memory\Container\Locked``) garantiert virtuell die selbe Performance wie -das Arbeiten mit einer Zeichenketten Variablen. Der Overhead ist ein einzelnes De-Referenzieren um die Eigenschaft -der Klasse zu erhalten. - -.. _zend.memory.memory-objects.value: - -Memory Container 'value' Eigenschaft ------------------------------------- - -Die '``value``' Eigenschaft des Memory Containers (gesperrt oder verschiebbar) kann verwendet werden um mit Memory -Objekt Daten zu arbeiten: - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->create($data); - - echo $memObject->value; - - $memObject->value = $newValue; - - $memObject->value[$index] = '_'; - - echo ord($memObject->value[$index1]); - - $memObject->value = substr($memObject->value, $start, $length); - -Ein alternaviter Weg um auf die Daten des Memory Objektes zuzugreifen ist die Verwendung der :ref:`getRef() -` Methode. Diese Methode **muß** verwendet werden für *PHP* Versionen vor -5.2. Sie könnte auch in einigen Fällen verwendet werden, wenn Gründe der Geschwindigkeit dafür sprechen. - -.. _zend.memory.memory-objects.api: - -Memory Container Interface --------------------------- - -Der Memory Container stellt die folgenden Methoden zur Verfügung: - -.. _zend.memory.memory-objects.api.getRef: - -getRef() Methode -^^^^^^^^^^^^^^^^ - -.. code-block:: php - :linenos: - - public function &getRef(); - -Die ``getRef()`` Methode gibt eine Referenz auf den Wert des Objektes zurück. - -Verschiebbare Objekte werden vom Cache geladen in dem Moment wenn das Objekt nicht bereits im Speicher vorhanden -ist. Wenn das Objekt vom Cache geladen wird, können das einen Tausch von anderen Objekten verursachen wenn das -Memory Limit überschritten werden würde wenn alle gemanageten Objekte im Speicher vorhanden sind. - -Die ``getRef()`` Methode **muß** verwendet werden um auf die Daten des Memory Objektes zuzugreifen für *PHP* -Versionen vor 5.2. - -Das Verfolgen von Änderungen an Daten benötigt zusätzliche Ressourcen. Die ``getRef()`` Methode gibt eine -Referenz zu der Zeichenkette zurück, welches direkt von der Benutzeranwendung verändert wird. Deswegen ist es -eine gute Idee die ``getRef()`` Methode für den Zugriff auf die Werte der Daten zu verwenden: - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->create($data); - - $value = &$memObject->getRef(); - - for ($count = 0; $count < strlen($value); $count++) { - $char = $value[$count]; - ... - } - -.. _zend.memory.memory-objects.api.touch: - -touch() Methode -^^^^^^^^^^^^^^^ - -.. code-block:: php - :linenos: - - public function touch(); - -Die ``touch()`` Methode sollte in Verbindung mit ``getRef()`` verwendet werden. Das signalisiert das der Wert des -Objektes sich verändert hat: - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->create($data); - ... - - $value = &$memObject->getRef(); - - for ($count = 0; $count < strlen($value); $count++) { - ... - if ($condition) { - $value[$count] = $char; - } - ... - } - - $memObject->touch(); - -.. _zend.memory.memory-objects.api.lock: - -lock() Methode -^^^^^^^^^^^^^^ - -.. code-block:: php - :linenos: - - public function lock(); - -Die ``lock()`` Methode versperrt Objekte im Speicher. Sie sollte verwendet werden um das tauschen von ausgewählten -Objekten zu verhindern. Normalerweise ist das nicht notwendig, da der Memory Manager einen intelligenten -Algorythmus verwendet um Kandidaten für den Tasuch zu eruieren. Aber wenn genau bekannt ist, das ein bestimmter -Teil des Codes nicht getauscht werden sollte, kann er gesperrt werden. - -Gesperrte Objekte im Speicher garantieren auch das die Referent die durch die ``getRef()`` Methode zurückgegeben -wird gültig ist bis das Objekt entsperrt wird: - -.. code-block:: php - :linenos: - - $memObject1 = $memoryManager->create($data1); - $memObject2 = $memoryManager->create($data2); - ... - - $memObject1->lock(); - $memObject2->lock(); - - $value1 = &$memObject1->getRef(); - $value2 = &$memObject2->getRef(); - - for ($count = 0; $count < strlen($value2); $count++) { - $value1 .= $value2[$count]; - } - - $memObject1->touch(); - $memObject1->unlock(); - $memObject2->unlock(); - -.. _zend.memory.memory-objects.api.unlock: - -unlock() Methode -^^^^^^^^^^^^^^^^ - -.. code-block:: php - :linenos: - - public function unlock(); - -Die ``unlock()`` Methode entsperrt Objekte wenn es nicht mehr notwendig ist diese zu sperren. Siehe das obige -Beispiel. - -.. _zend.memory.memory-objects.api.isLocked: - -isLocked() Methode -^^^^^^^^^^^^^^^^^^ - -.. code-block:: php - :linenos: - - public function isLocked(); - -Die ``isLocked()`` Methode kann verwendet werden um zu Prüfen ob das Objekt gesperrt ist. Sie gibt ``TRUE`` -zurück wenn das Objekt gesperrt ist, oder ``FALSE`` wenn es nicht gesperrt ist. Für "gesperrte" Objekte wird -immer ``TRUE`` zurückgegeben, und für "verschiebbare" Objekte kann entweder ``TRUE`` oder ``FALSE`` -zurückgegeben werden. - - diff --git a/docs/languages/de/modules/zend.memory.overview.rst b/docs/languages/de/modules/zend.memory.overview.rst deleted file mode 100644 index 05ce41f18..000000000 --- a/docs/languages/de/modules/zend.memory.overview.rst +++ /dev/null @@ -1,134 +0,0 @@ -.. EN-Revision: none -.. _zend.memory.overview: - -Übersicht -========= - -.. _zend.memory.introduction: - -Einführung ----------- - -Die ``Zend_Memory`` Komponente ist dafür gedacht Daten in Systemen mit limitiertem Speicher zu Verwalten. - -Memory Objekte (Memory Container) werden durch den Memory Manager bei Anfrage erzeugt und transparent -geswappt/geladen wenn dies notwendig wird. - -Wenn, zum Beispiel, ein gemanagtes Objekt erzeugt oder geladen wird, das den gesamten Speicherverbrauch -überschreiten würde, der vorher definiert wurde, werden einige gemanagte Objekte in den Cache Speicher ausserhalb -des Speichers kopiert. Auf diesen Weg wird der Gesamtspeicher der von den gemanagten Objekten verwendet wird nicht -das benötigte Limit überschreiten. - -Der Memory Manager verwendet :ref:`Zend_Cache backends ` als Speicheranbieter. - -.. _zend.memory.introduction.example-1: - -.. rubric:: Verwenden der Zend_Memory Komponente - -``Zend\Memory\Memory::factory()`` instantiiert das Speichermanager Objekt mit den definierten Backend Optionen. - -.. code-block:: php - :linenos: - - // Verzeichnis in welches die getauschten Speicherblöcke geschrieben werden - $backendOptions = array( - 'cache_dir' => './tmp/' - ); - - $memoryManager = Zend\Memory\Memory::factory('File', $backendOptions); - - $loadedFiles = array(); - - for ($count = 0; $count < 10000; $count++) { - $f = fopen($fileNames[$count], 'rb'); - $data = fread($f, filesize($fileNames[$count])); - $fclose($f); - - $loadedFiles[] = $memoryManager->create($data); - } - - echo $loadedFiles[$index1]->value; - - $loadedFiles[$index2]->value = $newValue; - - $loadedFiles[$index3]->value[$charIndex] = '_'; - -.. _zend.memory.theory-of-operation: - -Theorie der Verwendung ----------------------- - -Die ``Zend_Memory`` Komponente arbeitet mit den folgenden Konzepten: - - - - - Memory Manager - - - Memory Container - - - Verschlüsseltes Memory Objekt - - - Verschiebbares Memory Objekt - - - -.. _zend.memory.theory-of-operation.manager: - -Memory Manager -^^^^^^^^^^^^^^ - -Der Memory Manager erzeugt Memory Objekte (gesperrt oder verschiebbar) durch Anfrage der Anwendung des Benutzers -und gibt diese in einem Memory Container Objekt zurück. - -.. _zend.memory.theory-of-operation.container: - -Memory Container -^^^^^^^^^^^^^^^^ - -Der Memory Container hat ein virtuelles oder aktuelles Attribut ``value`` vom Typ String. Dieses Attribut enthält -Datenwerte die bei der Erstellung des Memory Objektes definiert werden. - -Es kann mit ``value`` Attributen wie auch mit Objekt Eigenschaften gearbeitet werden. - -.. code-block:: php - :linenos: - - $memObject = $memoryManager->create($data); - - echo $memObject->value; - - $memObject->value = $newValue; - - $memObject->value[$index] = '_'; - - echo ord($memObject->value[$index1]); - - $memObject->value = substr($memObject->value, $start, $length); - -.. note:: - - Wenn eine *PHP* Version vor 5.2 verwendet wird, sollte stattdessen die :ref:`getRef() - ` Methode verwendet werden statt direkt auf die Wert Eigenschaften - zuzugreifen. - -.. _zend.memory.theory-of-operation.locked: - -Verschlüsselter Memory -^^^^^^^^^^^^^^^^^^^^^^ - -Verschlüsselte Speicher Objekte werden immer im Speicher gespeichert. Daten welche im verschlüsselten Speicher -gespeichert sind, werden niemals in das Cache Backend getauscht. - -.. _zend.memory.theory-of-operation.movable: - -Verschiebbarer Memory -^^^^^^^^^^^^^^^^^^^^^ - -Verschiebbare Memory Objekte werden transparent geswappt und geladen von und in das Cache Backend durch -``Zend_Memory`` wenn das notwendig wird. - -Der Memory Manager swappt keine Objekte die eine kleinere Größe als das definierte Minimum besitzen, und zwar aus -Gründen der Geschwindigkeit. Siehe :ref:`diesen Abschnitt ` für -mehr Details. - - diff --git a/docs/languages/de/modules/zend.mime.message.rst b/docs/languages/de/modules/zend.mime.message.rst deleted file mode 100644 index 27e67857c..000000000 --- a/docs/languages/de/modules/zend.mime.message.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. EN-Revision: none -.. _zend.mime.message: - -Zend\Mime\Message -================= - -.. _zend.mime.message.introduction: - -Einführung ----------- - -``Zend\Mime\Message`` repräsentiert eine *MIME* konforme Nachricht, welche einen oder mehrere Abschnitte -(Repräsentiert durch :ref:`Zend\Mime\Part ` Objekte) beinhalten kann. Mit ``Zend\Mime\Message`` -können *MIME* konforme Nachrichten, durch die Klasse, erstellt werden. Verschlüsselungs- und -BoundaryGrenzbehandlung werden transparent durch die Klasse behandelt. MimeMessage Objekte können auch durch -übergebene Strings rekonstruiert werden (Experimentell). Verwendet durch :ref:`Zend_Mail `. - -.. _zend.mime.message.instantiation: - -Instanziierung --------------- - -Es gibt keinen expliziten Konstruktor für ``Zend\Mime\Message``. - -.. _zend.mime.message.addparts: - -MIME Abschnitte hinzufügen --------------------------- - -:ref:`Zend\Mime\Part ` Objekte können zu einem bestehenden ``Zend\Mime\Message`` Objekt -hinzugefügt werden durch aufruf von ``addPart($part)`` - -Ein Array mit allen ``Zend\Mime\Part`` Objekten der ``Zend\Mime\Message`` wird von der Methode ``getParts()`` -zurück gegeben. Das ``Zend\Mime\Part`` Objekt kann dann geändert werden, da es im Array als Referenz gespeichert -wird. Wenn Abschnitte zum Array hinzugefügt werden oder die Sequenz geändert wird, muß das Array dem -``Zend\Mime\Message`` Objekt zurückgegeben werden, durch Aufruf von ``setParts($partsArray)`` - -Die Funktion ``isMultiPart()`` gibt ``TRUE`` zurück, wenn mehr als ein Abschnitt im ``Zend\Mime\Message`` Objekt -registriert wurde, und das Objekt deshalb bei der Erstellung des aktuellen Outputs eine Multipart-Mime-Message -erstellen würde. - -.. _zend.mime.message.bondary: - -Grenzbehandlung ---------------- - -``Zend\Mime\Message`` erzeugt und verwendet normalerweise sein eigenes ``Zend_Mime`` Objekt zur Erstellung einer -Grenze. Wenn eine eigene Grenze erstellt wird, oder dass das Verhalten des ``Zend_Mime`` Objekts geändert werden -muß, welches von ``Zend\Mime\Message`` verwendet wird, kann ein eigenes Zend Mime Objekt instanziiert und bei -``Zend\Mime\Message`` registriert werden. Normalerweise muß das nicht gemacht werden. ``setMime(Zend_Mime $mime)`` -setzt eine spezielle Instanz von ``Zend_Mime`` welche durch diese ``Zend\Mime\Message`` verwendet wird. - -``getMime()`` gibt eine Instanz von ``Zend_Mime`` zurück, welche zur Wiedergabe der Nachricht verwendet wird, wenn -``generateMessage()`` aufgerufen wird. - -``generateMessage()`` gibt den ``Zend\Mime\Message`` Inhalt in einem String wieder. - -.. _zend.mime.message.parse: - -Parst einen String um ein Zend\Mime\Message Objekt zu erstellen (Experimentell) -------------------------------------------------------------------------------- - -Eine übergebene *MIME* konforme Nachricht in einem String kann dazu verwendet werden, um daraus ein -``Zend\Mime\Message`` Objekt wieder herzustellen. ``Zend\Mime\Message`` hat eine statische Factory Methode um den -String zu parsen und gibt ein ``Zend\Mime\Message`` Objekt zurück. - -``Zend\Mime\Message::createFromMessage($str, $boundary)`` entschlüsselt einen übergebenen String und gibt ein -``Zend\Mime\Message`` Objekt zurück welches anschließend durch ``getParts()`` überprüft werden kann. - - diff --git a/docs/languages/de/modules/zend.mime.part.rst b/docs/languages/de/modules/zend.mime.part.rst deleted file mode 100644 index 4de22b741..000000000 --- a/docs/languages/de/modules/zend.mime.part.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. EN-Revision: none -.. _zend.mime.part: - -Zend\Mime\Part -============== - -.. _zend.mime.part.introduction: - -Einführung ----------- - -Diese Klasse repräsentiert einen einzelnen Abschnitte einer *MIME* Nachricht. Sie enthält den aktuellen Inhalt -des Abschnitts der Nachricht und zusätzlich Informationen über Ihre Verschlüsselung, den Typ und den originalen -Dateinamen. Sie stellt ausserdem eine Methode, für die Erzeugung eines Strings aus den in Ihr gespeicherten Daten, -zur Verfügung. ``Zend\Mime\Part`` Objekte können zu :ref:`Zend\Mime\Message ` hinzugefügt -werden, um zu einer kompletten mehrteiligen Nachricht verknüpft zu werden. - -.. _zend.mime.part.instantiation: - -Instanziierung --------------- - -``Zend\Mime\Part`` wird instanziiert mit einem String welcher den Inhalt des neuen Abschnitts repräsentiert. Der -Typ wird angenommen mit OCTET-STREAM, die Verschlüsselung mit 8Bit. Nach der Instanziierung einer -``Zend\Mime\Part`` kann die Meta Informationen gesetzt werden durch direkten Zugriff auf die Attribute: - -.. code-block:: php - :linenos: - - public $type = Zend\Mime\Mime::TYPE_OCTETSTREAM; - public $encoding = Zend\Mime\Mime::ENCODING_8BIT; - public $id; - public $disposition; - public $filename; - public $description; - public $charset; - public $boundary; - public $location; - public $language; - -.. _zend.mime.part.methods: - -Methoden für das übertragen der des Teils der Nachricht zu einem String ------------------------------------------------------------------------ - -``getContent()`` gibt den verschlüsselten Inhalt des MimeParts als String zurück, wobei die Verschlüsselung -verwendet wird welche im Attribut $encoding definiert wurde. Gültige Werte sind Zend\Mime\Mime::ENCODING_* Zeichensatz -Konvertierungen werden nicht durchgeführt. - -``getHeaders()`` gibt den Mime-Headers für den MimePart zurück, erzeugt anhand der Informationen der öffentlich -zugänglichen Attribute. Die Attribute des Objektes müssen korrekt gesetzt sein, bevor diese Methode aufgerufen -wird. - - - - - ``$charset`` muß auf den aktuellen Charset des Inhaltes gesetzt werden, wenn dieser ein Texttyp ist (Text - oder *HTML*). - - - ``$id`` kann gesetzt werden für die Erkennung einer Content-ID für Inline Grafiken in einer *HTML* - Nachricht. - - - ``$filename`` enthält den Namen welche die Datei bekommt wenn sie heruntergeladen wird. - - - ``$disposition`` definiert ob die Datei als Anhang behandelt werden soll, oder ob sie in einer (HTML-) - Nachricht verwendet wird (Inline). - - - ``$description`` wird nur zur Zweck der Information verwendet. - - - ``$boundary`` definiert den String als umgebend. - - - ``$location`` kann als Ressource *URI* verwendet werden, der eine Relation zum Inhalt hat. - - - ``$language`` definiert die Sprache des Inhalts. - - - - diff --git a/docs/languages/de/modules/zend.mime.rst b/docs/languages/de/modules/zend.mime.rst deleted file mode 100644 index f5fc1fc6c..000000000 --- a/docs/languages/de/modules/zend.mime.rst +++ /dev/null @@ -1,93 +0,0 @@ -.. EN-Revision: none -.. _zend.mime.mime: - -Zend_Mime -========= - -.. _zend.mime.mime.introduction: - -Einführung ----------- - -``Zend_Mime`` ist eine Hilfsklasse für die Verarbeitung von mehrteiligen *MIME* Nachrichten. Es wird von -:ref:`Zend_Mail ` und :ref:`Zend\Mime\Message ` verwendet und kann von anderen -Anwendungen verwendet werden, die *MIME* Unterstützung benötigen. - -.. _zend.mime.mime.static: - -Statische Methoden und Konstanten ---------------------------------- - -``Zend_Mime`` stellt einige einfache statische Hilfsmethoden für die *MIME* Verarbeitung bereit: - - - - - ``Zend\Mime\Mime::isPrintable()``: Gibt ``TRUE`` zurück, wenn der String keine nicht druckbaren Zeichen enthält, - ansonsten wird ``FALSE`` zurückgegeben. - - - ``Zend\Mime\Mime::encode()``: Codiert einen String mit der spezifizierten Kodierung. - - - ``Zend\Mime\Mime::encodeBase64()``: Codiert einen String in die base64 Codierung. - - - ``Zend\Mime\Mime::encodeQuotedPrintable()``: Codiert einen String mit dem "quoted-printable" Mechanismus. - - - ``Zend\Mime\Mime::encodeBase64Header()``: Codiert einen String zu einer base64 Kodierung für Mail Header. - - - ``Zend\Mime\Mime::encodeQuotedPrintableHeader()``: Codiert einen String mit dem Quoted-Printable Mechanismus für - Mail Header. - - - -``Zend_Mime`` definiert einen Satz Konstanten, die üblicherweise von *MIME* Nachrichten verwendet werden: - - - - - ``Zend\Mime\Mime::TYPE_OCTETSTREAM``: 'application/octet-stream' - - - ``Zend\Mime\Mime::TYPE_TEXT``: 'text/plain' - - - ``Zend\Mime\Mime::TYPE_HTML``: 'text/html' - - - ``Zend\Mime\Mime::ENCODING_7BIT``: '7bit' - - - ``Zend\Mime\Mime::ENCODING_8BIT``: '8bit'; - - - ``Zend\Mime\Mime::ENCODING_QUOTEDPRINTABLE``: 'quoted-printable' - - - ``Zend\Mime\Mime::ENCODING_BASE64``: 'base64' - - - ``Zend\Mime\Mime::DISPOSITION_ATTACHMENT``: 'attachment' - - - ``Zend\Mime\Mime::DISPOSITION_INLINE``: 'inline' - - - ``Zend\Mime\Mime::MULTIPART_ALTERNATIVE``: 'multipart/alternative' - - - ``Zend\Mime\Mime::MULTIPART_MIXED``: 'multipart/mixed' - - - ``Zend\Mime\Mime::MULTIPART_RELATED``: 'multipart/related' - - - -.. _zend.mime.mime.instantiation: - -Zend_Mime instanziieren ------------------------ - -Wenn ein ``Zend_Mime`` instanziiert wird, wird eine *MIME* Abgrenzung gespeichert, die von allen nachfolgenden -nicht statischen Methodenaufrufen für dieses Objekt verwendet wird. Wenn der Konstruktur mit einem String -Parameter aufgerufen wird, wird dieser Wert als *MIME* Abgrenzung verwendet. Anderfalls wird eine zufällige *MIME* -Abgrenzung während der Konstruktionsphase generiert. - -Ein ``Zend_Mime`` Objekt hat die folgenden Methoden: - - - - - ``boundary()``: Gibt den String mit der *MIME* Abgrenzung zurück. - - - ``boundaryLine()``: Gibt die komplette Zeile der *MIME* Abgrenzung zurück. - - - ``mimeEnd()``: Gibt die komplette Endzeile der *MIME* Abgrenzung zurück. - - - - diff --git a/docs/languages/de/modules/zend.navigation.containers.rst b/docs/languages/de/modules/zend.navigation.containers.rst deleted file mode 100644 index 44b031cef..000000000 --- a/docs/languages/de/modules/zend.navigation.containers.rst +++ /dev/null @@ -1,784 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.containers: - -Container -========= - -Container haben Methoden für das Hinzufügen, Empfangen, Löschen und Durchlaufen von Seiten. Container -implementieren die `SPL`_ Interfaces ``RecursiveIterator`` und ``Countable``, was bedeutet das ein Container -durchlaufen werden kann indem die SPL Klasse ``RecursiveIteratorIterator`` verwendet wird. - -.. _zend.navigation.containers.creating: - -Erstellen von Containern ------------------------- - -``Zend\Navigation\Container`` ist abstrakt, und kann nicht direkt instanziiert werden. Verwende ``Zend\Navigation`` -wenn ein Container instanziiert werden soll. - -``Zend\Navigation`` kann komplett leer erstellt werden, oder indem ein Array genommen wird, oder ein -``Zend\Config`` Objekt mit Seiten in den Container gegeben wird. Jede seite in dem gegebenen Array/Config wird -eventuell an die ``addPage()`` Methode der Container Klasse übergeben, was bedeutet das jedes Element im -Array/Config ein Array oder Config Objekt sein kann, oder eine Instanz von ``Zend\Navigation\Page\AbstractPage``. - -.. _zend.navigation.containers.creating.example.array: - -.. rubric:: Erstellt einen Container indem ein Array verwendet wird - -.. code-block:: php - :linenos: - - /* - * Erstellt einen Container von einem Array - * - * Jedes Element im Array wird an Zend\Navigation\Page\AbstractPage::factory() übergeben - * wenn es erstellt wird. - */ - $container = new Zend\Navigation\Navigation(array( - array( - 'label' => 'Seite 1', - 'id' => 'home-link', - 'uri' => '/' - ), - array( - 'label' => 'Zend', - 'uri' => 'http://www.zend-project.com/', - 'order' => 100 - ), - array( - 'label' => 'Seite 2', - 'controller' => 'page2', - 'pages' => array( - array( - 'label' => 'Seite 2.1', - 'action' => 'page2_1', - 'controller' => 'page2', - 'class' => 'special-one', - 'title' => 'Dieses Element hat eine spezielle Klasse', - 'active' => true - ), - array( - 'label' => 'Seite 2.2', - 'action' => 'page2_2', - 'controller' => 'page2', - 'class' => 'special-two', - 'title' => 'Dieses Element hat auch eine spezielle Klasse' - ) - ) - ), - array( - 'label' => 'Seite 2 mit Parametern', - 'action' => 'index', - 'controller' => 'page2', - // Spezifiziert einen Parameter oder zwei - 'params' => array( - 'format' => 'json', - 'foo' => 'bar' - ) - ), - array( - 'label' => 'Seite 2 mit Parametern und einer Route', - 'action' => 'index', - 'controller' => 'page2', - // Spezifiziert einen Routen Namen und einen Parameter für die Route - 'route' => 'nav-route-example', - 'params' => array( - 'format' => 'json' - ) - ), - array( - 'label' => 'Seite 3', - 'action' => 'index', - 'controller' => 'index', - 'module' => 'mymodule', - 'reset_params' => false - ), - array( - 'label' => 'Seite 4', - 'uri' => '#', - 'pages' => array( - array( - 'label' => 'Seite 4.1', - 'uri' => '/page4', - 'title' => 'Seite 4 mit Verwendung von URI', - 'pages' => array( - array( - 'label' => 'Seite 4.1.1', - 'title' => 'Seite 4 mit Verwendung von MVC Parametern', - 'action' => 'index', - 'controller' => 'page4', - // Sagen wir das diese Seite aktiv ist - 'active' => '1' - ) - ) - ) - ) - ), - array( - 'label' => 'Seite 0?', - 'uri' => '/setting/the/order/option', - // Setzt die Reihenfolge auf -1, damit Sie als erstes erscheint - 'order' => -1 - ), - array( - 'label' => 'Seite 5', - 'uri' => '/', - // Diese Seite sollte nicht sichtbar sein - 'visible' => false, - 'pages' => array( - array( - 'label' => 'Seite 5.1', - 'uri' => '#', - 'pages' => array( - array( - 'label' => 'Seite 5.1.1', - 'uri' => '#', - 'pages' => array( - array( - 'label' => 'Seite 5.1.2', - 'uri' => '#', - // Sagen wir das die Seite aktiv ist - 'active' => true - ) - ) - ) - ) - ) - ) - ), - array( - 'label' => 'ACL Seite 1 (guest)', - 'uri' => '#acl-guest', - 'resource' => 'nav-guest', - 'pages' => array( - array( - 'label' => 'ACL Seite 1.1 (foo)', - 'uri' => '#acl-foo', - 'resource' => 'nav-foo' - ), - array( - 'label' => 'ACL Seite 1.2 (bar)', - 'uri' => '#acl-bar', - 'resource' => 'nav-bar' - ), - array( - 'label' => 'ACL Seite 1.3 (baz)', - 'uri' => '#acl-baz', - 'resource' => 'nav-baz' - ), - array( - 'label' => 'ACL Seite 1.4 (bat)', - 'uri' => '#acl-bat', - 'resource' => 'nav-bat' - ) - ) - ), - array( - 'label' => 'ACL Seite 2 (member)', - 'uri' => '#acl-member', - 'resource' => 'nav-member' - ), - array( - 'label' => 'ACL Seite 3 (admin)', - 'uri' => '#acl-admin', - 'resource' => 'nav-admin', - 'pages' => array( - array( - 'label' => 'ACL Seite 3.1 (nothing)', - 'uri' => '#acl-nada' - ) - ) - ), - array( - 'label' => 'Zend Framework', - 'route' => 'zf-route' - ) - )); - -.. _zend.navigation.containers.creating.example.config: - -.. rubric:: Erstellung eines Containers indem ein Config Objekt erstellt wird - -.. code-block:: php - :linenos: - - /* INHALT VON /path/to/navigation.xml: - - - - - */ - - $config = new Zend\Config\Xml('/path/to/navigation.xml', 'nav'); - $container = new Zend\Navigation\Navigation($config); - -.. _zend.navigation.containers.adding: - -Hinzufügen von Seiten ---------------------- - -Das Hinzufügen von Seiten in einen Container kann mit den Methoden ``addPage()``, ``addPages()`` oder -``setPages()`` durchgeführt werden. Das folgende Beispiel zeigt eine Erklärung des ganzen. - -.. _zend.navigation.containers.adding.example: - -.. rubric:: Hinzufügen von Seiten zu einem Container - -.. code-block:: php - :linenos: - - // Container erstellen - $container = new Zend\Navigation\Navigation(); - - // Seite durch die Angabe eine Instanz einer Page hinzufügen - $container->addPage(Zend\Navigation\Page\AbstractPage::factory(array( - 'uri' => 'http://www.example.com/' - ))) - - // Seite durch die Angabe eines Arrays hinzufügen - $container->addPage(array( - 'uri' => 'http://www.example.com/' - ))) - - // Seite durch die Angabe eines Config Objekts hinzufügen - $container->addPage(new Zend\Config(array( - 'uri' => 'http://www.example.com/' - ))) - - $pages = array( - array( - 'label' => 'Speichern' - 'action' => 'save', - ), - array( - 'label' => 'Löschen', - 'action' => 'delete' - ) - ); - - // Zwei Seiten hinzufügen - $container->addPages($pages); - - // Bestehende Seite entfernen und die gegebenen Seiten hinzufügen - $container->setPages($pages); - -.. _zend.navigation.containers.removing: - -Seiten löschen --------------- - -Das Löschen von Seiten kann mit ``removePage()`` oder ``removePages()`` durchgeführt werden. Die ersten Methode -akzeptiert eine Instanz einer Seite, oder ein Integer. Der Integer korrespondiert mit der ``order`` welche die -Seite hat. Die letztere Methode entfernt alle Seiten vom Container. - -.. _zend.navigation.containers.removing.example: - -.. rubric:: Seiten von einem Container entfernen - -.. code-block:: php - :linenos: - - $container = new Zend\Navigation\Navigation(array( - array( - 'label' => 'Seite 1', - 'action' => 'page1' - ), - array( - 'label' => 'Seite 2', - 'action' => 'page2', - 'order' => 200 - ), - array( - 'label' => 'Seite 3', - 'action' => 'page3' - ) - )); - - // Entfernt eine Seite implizit durch die Reihenfolge der Seite - $container->removePage(0); // Entfernt Seite 1 - - // Entfernt eine Seite durch die Instanz - $page3 = $container->findOneByAction('page3'); - $container->removePage($page3); // Entfernt Seite 3 - - // Entfernt eine Seite durch explizite angabe der Reihenfolge der Seite - $container->removePage(200); // Entfernt Seite 2 - - // Entfernt alle Seiten - $container->removePages(); // Entfernt alle Seiten - -.. _zend.navigation.containers.finding: - -Seiten finden -------------- - -Container haben Finder Methoden für das Empfangen von Seiten. Es gibt ``findOneBy($property, $value)``, -``findAllBy($property, $value)`` und ``findBy($property, $value, $all = false)``. Diese Methoden durchsuchen -rekursiv den Container nach Seiten die dem angegebenen ``$page->$property == $value`` entsprechen. Die erste -Methode, ``findOneBy()``, gibt eine einzelne Seite zurück die der angegebenen Eigenschaft mit dem angegebenen Wert -entspricht, oder ``NULL`` wenn Sie nicht gefunden werden kann. Die zweite Methode wird alle Seiten mit einer -Eigenschaft zurückgeben die dem angegebenen Wert entspricht. Die dritte Methode wird eine eine der zwei anderen -Methoden aufrufen, abhängig vom ``$all`` Flag. - -Die Finder Methoden können auch magisch verwendet werden indem der Name der Eigenschaft an ``findBy``, -``findOneBy`` oder ``findAllBy`` angehängt wird, z.B. ``findOneByLabel('Home')`` um die erste passende Seite mit -dem Label 'Home' zu finden. Andere Kombinationen sind ``findByLabel(...)``, ``findOnyByTitle(...)``, -``findAllByController(...)``, usw. Finder Methoden funktionieren auch mit eigenen Eigenschaften, so wie z.B. -``findByFoo('bar')``. - -.. _zend.navigation.containers.finding.example: - -.. rubric:: Seiten in einem Container finden - -.. code-block:: php - :linenos: - - $container = new Zend\Navigation\Navigation(array( - array( - 'label' => 'Seite 1', - 'uri' => 'page-1', - 'foo' => 'bar', - 'pages' => array( - array( - 'label' => 'Seite 1.1', - 'uri' => 'page-1.1', - 'foo' => 'bar', - ), - array( - 'label' => 'Seite 1.2', - 'uri' => 'page-1.2', - 'class' => 'my-class', - ), - array( - 'type' => 'uri', - 'label' => 'Seite 1.3', - 'uri' => 'page-1.3', - 'action' => 'about' - ) - ) - ), - array( - 'label' => 'Seite 2', - 'id' => 'page_2_and_3', - 'class' => 'my-class', - 'module' => 'page2', - 'controller' => 'index', - 'action' => 'page1' - ), - array( - 'label' => 'Seite 3', - 'id' => 'page_2_and_3', - 'module' => 'page3', - 'controller' => 'index' - ) - )); - - // Die 'id' muß nicht eindeutig sein, aber man sollte darauf achten das wenn - // man zwei Seiten mit der gleichen Id hat, diese die gleichen Id Attribute in - // Menüs und Breadcrumbs darstellen werden - $found = $container->findBy('id', - 'page_2_and_3'); // Gibt Seite 2 zurück - $found = $container->findOneBy('id', - 'page_2_and_3'); // Gibt Seite 2 zurück - $found = $container->findBy('id', - 'page_2_and_3', - true); // Gibt Seite 2 und 3 zurück - $found = $container->findById('page_2_and_3'); // Gibt Seite 2 zurück - $found = $container->findOneById('page_2_and_3'); // Gibt Seite 2 zurück - $found = $container->findAllById('page_2_and_3'); // Gibt Seite 2 und 3 zurück - - // Finde alle zu my-class passenden CSS Klassen - $found = $container->findAllBy('class', - 'my-class'); // Gibt Seite 1.2 und 2 zurück - $found = $container->findAllByClass('my-class'); // Gibt Seite 1.2 und 2 zurück - - // Finde die erste zu my-class passende CSS Klasse - $found = $container->findOneByClass('my-class'); // Gibt Seite 1.2 zurück - - // Findet alle zu non-existant passenden CSS Klassen - $found = $container->findAllByClass('non-existant'); // Gibt array() zurück - - // Findet die erste zu non-existant passende CSS Klasse - $found = $container->findOneByClass('non-existant'); // Gibt null zurück - - // Findet alle Seiten mit den eigenen Eigenschaften 'foo' = 'bar' - $found = $container->findAllBy('foo', 'bar'); // Gibt Seite 1 und 1.1 zurück - - // Um das gleiche auf Magische Weise zu ermöglichen, muß 'foo' kleingeschrieben - // sein weil 'foo' eine eigene Eigenschaft ist und deshalb der Name der - // Eigenschaft nicht zu 'Foo' normalisiert wird - $found = $container->findAllByfoo('bar'); - - // Findet alle mit controller = 'index' - $found = $container->findAllByController('index'); // Gibt Seite 2 und 3 zurück - -.. _zend.navigation.containers.iterating: - -Container durchsuchen ---------------------- - -``Zend\Navigation\Container`` implementiert ``RecursiveIteratorIterator``, und kann mit jeder ``Iterator`` Klasse -durchsucht werden. Um einen Container rekursiv zu durchsuchen, kann die ``RecursiveIteratorIterator`` Klasse -verwendet werden. - -.. _zend.navigation.containers.iterating.example: - -.. rubric:: Einen Container durchsuchen - -.. code-block:: php - :linenos: - - /* - * Erstellt einen Container von einem Array - */ - $container = new Zend\Navigation\Navigation(array( - array( - 'label' => 'Seite 1', - 'uri' => '#' - ), - array( - 'label' => 'Seite 2', - 'uri' => '#', - 'pages' => array( - array( - 'label' => 'Seite 2.1', - 'uri' => '#' - ), - array( - 'label' => 'Seite 2.2', - 'uri' => '#' - ) - ) - ) - array( - 'label' => 'Seite 3', - 'uri' => '#' - ) - )); - - // Durchsucht flach indem ein normales foreach verwendet wird: - // Ausgabe: Seite 1, Seite 2, Seite 3 - foreach ($container as $page) { - echo $page->label; - } - - // Durchsucht rekursiv indem RecursiveIteratorIterator verwendet wird - $it = new RecursiveIteratorIterator( - $container, RecursiveIteratorIterator::SELF_FIRST); - - // Ausgabe: Seite 1, Seite 2, Seite 2.1, Seite 2.2, Seite 3 - foreach ($it as $page) { - echo $page->label; - } - -.. _zend.navigation.containers.other: - -Andere Operationen ------------------- - -Die Methode ``hasPage(Zend\Navigation\Page\AbstractPage $page)`` prüft ob der Container die angegebene Seite -besitzt. Die Methode ``hasPages()`` prüft ob irgendeine Seite im Container existiert, und ist gleich mit -``count($container) > 1``. - -Die ``toArray()`` Methode konvertiert den Container und die Seiten in Ihm zu einem Array. Das kann für eine -Serialisierung und das Debugging nützlich sein. - -.. _zend.navigation.containers.other.example.toarray: - -.. rubric:: Einen Container in ein Array konvertieren - -.. code-block:: php - :linenos: - - $container = new Zend\Navigation\Navigation(array( - array( - 'label' => 'Seite 1', - 'uri' => '#' - ), - array( - 'label' => 'Seite 2', - 'uri' => '#', - 'pages' => array( - array( - 'label' => 'Seite 2.1', - 'uri' => '#' - ), - array( - 'label' => 'Seite 2.2', - 'uri' => '#' - ) - ) - ) - )); - - var_dump($container->toArray()); - - /* Ausgabe: - array(2) { - [0]=> array(15) { - ["label"]=> string(6) "Seite 1" - ["id"]=> NULL - ["class"]=> NULL - ["title"]=> NULL - ["target"]=> NULL - ["rel"]=> array(0) { - } - ["rev"]=> array(0) { - } - ["order"]=> NULL - ["resource"]=> NULL - ["privilege"]=> NULL - ["active"]=> bool(false) - ["visible"]=> bool(true) - ["type"]=> string(23) "Zend\Navigation\Page\Uri" - ["pages"]=> array(0) { - } - ["uri"]=> string(1) "#" - } - [1]=> array(15) { - ["label"]=> string(6) "Seite 2" - ["id"]=> NULL - ["class"]=> NULL - ["title"]=> NULL - ["target"]=> NULL - ["rel"]=> array(0) { - } - ["rev"]=> array(0) { - } - ["order"]=> NULL - ["resource"]=> NULL - ["privilege"]=> NULL - ["active"]=> bool(false) - ["visible"]=> bool(true) - ["type"]=> string(23) "Zend\Navigation\Page\Uri" - ["pages"]=> array(2) { - [0]=> array(15) { - ["label"]=> string(8) "Seite 2.1" - ["id"]=> NULL - ["class"]=> NULL - ["title"]=> NULL - ["target"]=> NULL - ["rel"]=> array(0) { - } - ["rev"]=> array(0) { - } - ["order"]=> NULL - ["resource"]=> NULL - ["privilege"]=> NULL - ["active"]=> bool(false) - ["visible"]=> bool(true) - ["type"]=> string(23) "Zend\Navigation\Page\Uri" - ["pages"]=> array(0) { - } - ["uri"]=> string(1) "#" - } - [1]=> - array(15) { - ["label"]=> string(8) "Seite 2.2" - ["id"]=> NULL - ["class"]=> NULL - ["title"]=> NULL - ["target"]=> NULL - ["rel"]=> array(0) { - } - ["rev"]=> array(0) { - } - ["order"]=> NULL - ["resource"]=> NULL - ["privilege"]=> NULL - ["active"]=> bool(false) - ["visible"]=> bool(true) - ["type"]=> string(23) "Zend\Navigation\Page\Uri" - ["pages"]=> array(0) { - } - ["uri"]=> string(1) "#" - } - } - ["uri"]=> string(1) "#" - } - } - */ - - - -.. _`SPL`: http://php.net/spl diff --git a/docs/languages/de/modules/zend.navigation.introduction.rst b/docs/languages/de/modules/zend.navigation.introduction.rst deleted file mode 100644 index 575229341..000000000 --- a/docs/languages/de/modules/zend.navigation.introduction.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.introduction: - -Einführung -========== - -``Zend\Navigation`` ist eine Komponente für das Verwalten von Verweisen zu Webseiten. Einfach gesagt: Es kann für -die Erstellung von Menüs, Brotkrümelnavigationen (Breadcrumbs), Dateibeziehungen (Links) und Sitemaps verwendet -werden, oder es dient als Grundlage für weitere navigationsrelevante Vorhaben. - -.. _zend.navigation.introduction.concepts: - -Seiten und Container --------------------- - -Es gibt zwei grundsätzliche Konzepte in ``Zend\Navigation``: - -.. _zend.navigation.introduction.pages: - -Seiten -^^^^^^ - -Eine Seite (``Zend\Navigation\Page\AbstractPage``) ist in ``Zend\Navigation``- in seiner einfachsten Form - -ein Objekt, das einen Verweis zu einer Webseite enthält. Zusätzlich zum Verweis selbst, enthält das Seitenobjekt -eine Viezahl von weiteren Eigenschaften die für eine Navigation relevant sind (wie z.B. ``label``, ``title`` usw.). - -Lesen Sie mehr darüber im Kapitel :ref:`Seiten `. - -.. _zend.navigation.introduction.containers: - -Container -^^^^^^^^^ - -Ein Navigationscontainer (``Zend\Navigation\AbstractContainer``) ist eine Containerklasse für Seiten. Diese hat -Methoden für das Hinzufügen, Empfangen, Löschen und für das Durchlaufen von Seiten. Die Klasse implementiert die -`SPL`_-Interfaces ``RecursiveIterator`` und ``Countable`` und kann somit mit den SPL-Iteratoren, wie -``RecursiveIteratorIterator``, durchlaufen werden. - -Lesen Sie mehr über Container im Kapitel :ref:`Container `. - -.. note:: - - ``Zend\Navigation\Page\AbstractPage`` erweitert ``Zend\Navigation\AbstractContainer``, was wiederum bedeutet, - dass eine Seite weitere Unterseiten haben kann. - -.. _zend.navigation.introduction.separation: - -Trennung von Daten (Model) und Darstellung (View) -------------------------------------------------- - -Klassen im Namensraum von ``Zend\Navigation`` handhaben keine Darstellung von Navigationselementen. Die -Darstellung wird von den Navigations-View-Helfern durchgeführt. Trotzdem enthalten Seiten Informationen die von -den View-Helfern bei der Darstellung verwendet werden (z.B.: Beschriftung, Klassenname (*CSS*), Titel, die -Eigenschaften ``lastmod`` und ``priority`` für Sitemaps, usw.). - -Lesen Sie mehr über die Darstellung von Navigationselementen im Abschnitt :ref:`Navigations-View-Helfer -` des Referenzhandbuches. - -.. _`SPL`: http://php.net/spl diff --git a/docs/languages/de/modules/zend.navigation.pages.common.rst b/docs/languages/de/modules/zend.navigation.pages.common.rst deleted file mode 100644 index cabb8c3ee..000000000 --- a/docs/languages/de/modules/zend.navigation.pages.common.rst +++ /dev/null @@ -1,84 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.pages.common: - -Übliche Seiten Features -======================= - -Alle Seiten Klassen müssen ``Zend\Navigation\Page\AbstractPage`` erweitern, und teilen deshalb ein übliches Set von Features -und Eigenschaften. Am ehesten zu beachten ist, das Sie die Optionen in der anbei zu sehenden Tabelle und den -gleichen Initialisierungs Prozess teilen. - -Options Schlüssel werden zu *set* Methoden gemappt. Das bedeutet das die Option *order* auf die Methode -``setOrder()`` gemappt wird, und *reset_params* auf die Methode ``setResetParams()``. Wenn es keine Setter Methode -für die Option gibt, wird diese als eigene Eigenschaft der Seite gesetzt. - -Lesen Sie mehr über das erweitern von ``Zend\Navigation\Page\AbstractPage`` in :ref:`Erstellung eigener Seiten Typen -`. - -.. _zend.navigation.pages.common.options: - -.. table:: Übliche Seiten Optionen - - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Schlüssel|Typ |Standardwert|Beschreibung | - +=========+===============================================================+============+=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================+ - |label |String |NULL |Ein Seitenlabel, wie 'Home' oder 'Blog'. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |id |String | int |NULL |Ein Id Tag/Attribut das verwendet werden kann wenn die Seite dargestellt wird, typischerweise in einem Anker Element. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |class |String |NULL |Eine CSS Klasse die verwendet werden kann wenn die Seite dargestellt wird, typischerweise ein Anker Element. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |title |String |NULL |Eine kurze Seitenbeschreibung, typischerweise für die Verwendung als title Attribut in einem Anker. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |target |String |NULL |Spezifiziert ein Ziel das für die Seite verwendet werden kann, typischerweise ein Anker Element. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |rel |Array |array() |Spezifiziert die Weiterleitungs-Relation für die Seite. Jedes Element im Array ist ein Schlüssel-Wert Paar, wobei der Schlüssel den Relation/Link Typ bestimmt, und der Wert ist ein Pointer zu der verlinkten Seite. Ein Beispiel eines Schlüssel-Wert Paares ist 'alternate' => 'format/plain.html'. Um die volle Flexibilität zu erlauben, gibt es keine Einschränkungen an den Relationswerten. Der Wert muß kein String sein. Lesen Sie über rel und rev im Kapitel der Link Helfer. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |rev |Array |array() |Spezifiziert die Rückwärts Relation für die Seite. Arbeitet genauso wie rel. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |order |String | int | NULL |NULL |Arbeitet die order für Elemente in Works like order for elements in Zend_Form. Wenn spezifiziert, dann wird die Seite in einer speziellen Reihenfolge durchlaufen, was bedeutet das man eine Seite dazu zwingen kann das eine Seite vor anderen durchlaufen wird indem das order Attribut auf eine kleinere Nummer gesetzt wird, z.B. -100. Wenn ein String angegeben wird, muß dieser in einen gültigen int aufgelöst werden können. Wenn NULL angegeben wird, wird er zurückgesetzt, was bedeutet dass die Reihenfolge verwendet wird mit der die Seite im Container hinzugefügt wurde.| - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |resource |String | Zend\Permissions\Acl\Resource\ResourceInterface | NULL|NULL |ACL Ressource die mit der Seite verknüpft werden soll. Lesen Sie mehr im Kapitel ACL Integration in View Helfern. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |privilege|String | NULL |NULL |ACL Privileg das mit der Seite assoziiert werden soll. Lesen Sie mehr im Kapitel über ACL Integration in View Helfern. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |active |bool |FALSE |Ob die Seite für die aktuelle Anfrage als aktiv betrachtet werden soll. Wenn active FALSE ist oder nicht angegeben wird, werden MVC Seiten Ihr Eigenschaften gegen das Anfrage Objekt prüfen wenn $page->isActive() aufgerufen wird. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |visible |bool |TRUE |Ob die Seite für den Benutzer sichtbar sein soll, oder nur ein Teil einer Struktur ist. Unsichtbare Seiten werden von View Helfern übersprungen. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |pages |Array | Zend_Config | NULL |NULL |Kind Seiten der Seite. Das sollte ein Array oder Zend_Config Objekt sein das entweder Seiten Optionen enthält die in die factory() Methode übergeben werden können, oder die aktuelle Zend\Navigation\Page\AbstractPage Instanz, oder einen Mix von beiden. | - +---------+---------------------------------------------------------------+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - - **Eigene Eigenschaften** - - Alle Seiten unterstützen das Setzen und Empfangen von eigenen Eigenschaften durch Verwendung der magischen - Methoden ``__set($name, $value)``, ``__get($name)``, ``__isset($name)`` und ``__unset($name)``. Eigene - Eigenschaften können jeden Wert haben, und sind im Array enthalten das von *$page->toArray()* zurückgegeben - wird, was bedeutet das Seiten erfolgreich serialisiert/de-serialisiert werden können, selbst wenn die Seiten - Eigenschaften enthalten die nicht nativ in der Seitenklasse sind. - - Sowohl native als auch eigene Eigenschaften können gesetzt werden indem *$page->set($name, $value)* verwendet - und empfangen indem *$page->get($name)* verwendet wird, oder durch die Verwendung der magischen Methoden. - -.. _zend.navigation.pages.common.example.customprops: - -.. rubric:: Eigene Seiten Eigenschaften - -Dieses Beispiel zeigt wie eigene Eigenschaften verwendet werden können. - -.. code-block:: php - :linenos: - - $page = new Zend\Navigation\Page\Mvc(); - $page->foo = 'bar'; - $page->meaning = 42; - - echo $page->foo; - - if ($page->meaning != 42) { - // Eine Aktion sollte durchgeführt werden - } - - diff --git a/docs/languages/de/modules/zend.navigation.pages.custom.rst b/docs/languages/de/modules/zend.navigation.pages.custom.rst deleted file mode 100644 index 44f72709c..000000000 --- a/docs/languages/de/modules/zend.navigation.pages.custom.rst +++ /dev/null @@ -1,89 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.pages.custom: - -Erstellung eigener Seitentypen -============================== - -Wenn ``Zend\Navigation\Page\AbstractPage`` erweitert wird, besteht normalerweise keine Notwendigkeit den Konstruktor oder die -Methoden ``setOptions()`` oder ``setConfig()`` zu überladen. Der Konstruktor der Seite nimmt einen einzelnen -Parameter (ein ``Array`` oder ein ``Zend\Config``-Objekt) entgegen, welches an ``setOptions()`` bzw. an ``setConfig()`` -weitergeleitet wird. Diese Methoden rufen dann die ``set()`` Methode auf, welche die Optionen in native oder eigene -Eigenschaften mappt. Wenn beispielsweise die Option ``internal_id`` angegeben wird, dann wird zuerst nach einer -Methode gesucht, die ``setInternalId()`` heißt. Existiert diese Methode, dann wird die Option entsprechend übergeben. -Wenn die Methode nicht existiert, wird die Option als eigene Eigenschaft der Seite gesetzt und ist über -``$internalId = $page->internal_id;`` oder ``$internalId = $page->get('internal_id');`` abrufbar. - -.. _zend.navigation.custom.example.simple: - -.. rubric:: Die einfachste Variante einer eigenen Seite - -Die einzige Methode, die eine eigene Seite enthalten muss, ist die ``getHref()`` Methode. - -.. code-block:: php - :linenos: - - class My\Simple\Page extends Zend\Navigation\Page\AbstractPage - { - public function getHref() - { - return 'something-completely-different'; - } - } - -.. _zend.navigation.custom.example.properties: - -.. rubric:: Eine eigene Seite mit Eigenschaften - -Wenn Eigenschaften in eine erweiterte Seite eingefügt werden, dann müssen die Methoden ``setOptions()`` oder -``setConfig()`` nicht überladen/modifizieren werden. - -.. code-block:: php - :linenos: - - class My\Navigation\Page extends Zend\Navigation\Page\AbstractPage - { - protected $foo; - protected $fooBar; - - public function setFoo($foo) - { - $this->foo = $foo; - } - - public function getFoo() - { - return $this->foo; - } - - public function setFooBar($fooBar) - { - $this->fooBar = $fooBar; - } - - public function getFooBar() - { - return $this->fooBar; - } - - public function getHref() - { - return $this->foo . '/' . $this->fooBar; - } - } - - // Kann jetzt Erstellt werden mit - $page = new My\Navigation\Page(array( - 'label' => 'Namen von Eigenschaften werden auf Setter-Methoden gemappt', - 'foo' => 'bar', - 'foo_bar' => 'baz' - )); - - // ...oder - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'type' => 'My\Navigation\Page', - 'label' => 'Namen von Eigenschaften werden auf Setter-Methoden gemappt', - 'foo' => 'bar', - 'foo_bar' => 'baz' - )); - - diff --git a/docs/languages/de/modules/zend.navigation.pages.factory.rst b/docs/languages/de/modules/zend.navigation.pages.factory.rst deleted file mode 100644 index aa37ce1f2..000000000 --- a/docs/languages/de/modules/zend.navigation.pages.factory.rst +++ /dev/null @@ -1,103 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.pages.factory: - -Erstellen von Seiten durch Verwendung der Page Factory -====================================================== - -Alle Seiten (also auch eigene Klassen), können durch Verwendung der Page Factory -``Zend\Navigation\Page\AbstractPage::factory()`` erstellt werden. Die Factory kann ein Array mit Optionen oder ein -``Zend\Config`` Objekt annehmen. Jeder Schlüssel im Array/Config entspricht einer Seiten Option, wie im Kapitel -:ref:`Seiten ` gezeigt. Wenn die Option *uri* angegeben wird und keine *MVC* Optionen -angegeben werden (*action, controller, module, route*) wird eine *URI* Seite erstellt. Wenn eine der *MVC* Optionen -angegeben wird, dann wird eine *MVC* Seite erstellt. - -Wenn *type* angegeben wird, nimmt die Factory an das der Wert der Name der Klasse ist die erstellt werden soll. -Wenn der Wert *mvc* oder *uri* ist wird eine MVC/URI Seite erstellt. - -.. _zend.navigation.pages.factory.example.mvc: - -.. rubric:: Erstellen einer MVC Seite durch Verwenden der Page Factory - -.. code-block:: php - :linenos: - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'label' => 'My MVC page', - 'action' => 'index' - )); - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'label' => 'Search blog', - 'action' => 'index', - 'controller' => 'search', - 'module' => 'blog' - )); - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'label' => 'Home', - 'action' => 'index', - 'controller' => 'index', - 'module' => 'index', - 'route' => 'home' - )); - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'type' => 'mvc', - 'label' => 'My MVC page' - )); - -.. _zend.navigation.pages.factory.example.uri: - -.. rubric:: Erstellen einer URI Seite durch Verwendung der Page Factory - -.. code-block:: php - :linenos: - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'label' => 'My URI page', - 'uri' => 'http://www.example.com/' - )); - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'label' => 'Search', - 'uri' => 'http://www.example.com/search', - 'active' => true - )); - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'label' => 'My URI page', - 'uri' => '#' - )); - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'type' => 'uri', - 'label' => 'My URI page' - )); - -.. _zend.navigation.pages.factory.example.custom: - -.. rubric:: Erstellung eines eigenen Seiten Typs durch Verwendung der Page Factory - -Um einen eigenen Seitentyp zu erstellen mit Hilfe der Verwendung der Factory, muß die Option *type* verwendet -werden um den Klassennamen zu spezifizieren der instanziiert werden muß. - -.. code-block:: php - :linenos: - - class My\Navigation\Page extends Zend\Navigation\Page\AbstractPage - { - protected $_fooBar = 'ok'; - - public function setFooBar($fooBar) - { - $this->_fooBar = $fooBar; - } - } - - $page = Zend\Navigation\Page\AbstractPage::factory(array( - 'type' => 'My\Navigation\Page', - 'label' => 'My custom page', - 'foo_bar' => 'foo bar' - )); - - diff --git a/docs/languages/de/modules/zend.navigation.pages.mvc.rst b/docs/languages/de/modules/zend.navigation.pages.mvc.rst deleted file mode 100644 index 6550d42b4..000000000 --- a/docs/languages/de/modules/zend.navigation.pages.mvc.rst +++ /dev/null @@ -1,178 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.pages.mvc: - -Zend\Navigation\Page\Mvc -======================== - -*MVC* Seiten werden definiert indem *MVC* Parameter verwendet werden wie von der ``Zend_Controller`` Komponent -bekannt. Eine *MVC* Seite wird intern in der ``getHref()`` Methode ``Zend\Controller\Action\Helper\Url`` verwenden -um hrefs zu erstellen, und die ``isActive()`` Methode wird die Parameter von ``Zend\Controller\Request\Abstract`` -mit den Seiten Parametern verknüpfen um zu erkennen ob die Seite aktiv ist. - -.. _zend.navigation.pages.mvc.options: - -.. table:: MVC Seiten Optionen - - +------------+------+------------+-----------------------------------------------------------------------------------------+ - |Schlüssel |Typ |Standardwert|Beschreibung | - +============+======+============+=========================================================================================+ - |action |String|NULL |Name der Aktion die verwendet wird wenn eine href zur Seite erstellt wird. | - +------------+------+------------+-----------------------------------------------------------------------------------------+ - |controller |String|NULL |Name des Controllers der verwendet wird wenn eine href zur Seite erstellt wird. | - +------------+------+------------+-----------------------------------------------------------------------------------------+ - |module |String|NULL |Name des Moduls das verwendet wird wenn eine href zur Seite erstellt wird. | - +------------+------+------------+-----------------------------------------------------------------------------------------+ - |params |Array |array() |Benutzer Parameter die verwendet werden wenn eine href zur Seite erstellt wird. | - +------------+------+------------+-----------------------------------------------------------------------------------------+ - |route |String|NULL |Name der Route die verwendet wird wenn eine href zur Seite erstellt wird. | - +------------+------+------------+-----------------------------------------------------------------------------------------+ - |reset_params|bool |TRUE |Ob Benutzer Parameter zurückgesetzt werden sollen wenn eine href zur Seite erstellt wird.| - +------------+------+------------+-----------------------------------------------------------------------------------------+ - -.. note:: - - Die drei Beispiele anbei nehmen ein Standard *MVC* Setup an mit der *default* Route an. - - Die zurückgegebene *URI* ist relativ zur *baseUrl* in ``Zend\Controller\Front``. Im Beispiel ist die baseUrl - der Einfachheit halber '/'. - -.. _zend.navigation.pages.mvc.example.getHref: - -.. rubric:: getHref() erstellt die Seiten URI - -Dieses Beispiel zeigt das *MVC* Seiten intern ``Zend\Controller\Action\Helper\Url`` verwenden um *URI*\ s zu -erstellen wenn *$page->getHref()* aufgerufen wird. - -.. code-block:: php - :linenos: - - // getHref() gibt / zurück - $page = new Zend\Navigation\Page\Mvc(array( - 'action' => 'index', - 'controller' => 'index' - )); - - // getHref() gibt /blog/post/view zurück - $page = new Zend\Navigation\Page\Mvc(array( - 'action' => 'view', - 'controller' => 'post', - 'module' => 'blog' - )); - - // getHref() gibt /blog/post/view/id/1337 zurück - $page = new Zend\Navigation\Page\Mvc(array( - 'action' => 'view', - 'controller' => 'post', - 'module' => 'blog', - 'params' => array('id' => 1337) - )); - -.. _zend.navigation.pages.mvc.example.isActive: - -.. rubric:: isActive() erkennt ob eine Seite aktiv ist - -Dieses Beispiel zeigt das *MVC* Seiten erkennen ob sie aktiv sind indem die Parameter verwendet werden die im -Anfrage Objekt gefunden werden. - -.. code-block:: php - :linenos: - - /* - * Ausgeführte Anfrage: - * - module: default - * - controller: index - * - action: index - */ - $page1 = new Zend\Navigation\Page\Mvc(array( - 'action' => 'index', - 'controller' => 'index' - )); - - $page2 = new Zend\Navigation\Page\Mvc(array( - 'action' => 'bar', - 'controller' => 'index' - )); - - $page1->isActive(); // returns true - $page2->isActive(); // returns false - - /* - * Ausgeführte Anfrage: - * - module: blog - * - controller: post - * - action: view - * - id: 1337 - */ - $page = new Zend\Navigation\Page\Mvc(array( - 'action' => 'view', - 'controller' => 'post', - 'module' => 'blog' - )); - - // Gibt true zurück, weil die Anfrage die gleichen Module, Controller - // und Aktion hat - $page->isActive(); - - /* - * Ausgefürte Anfrage: - * - module: blog - * - controller: post - * - action: view - */ - $page = new Zend\Navigation\Page\Mvc(array( - 'action' => 'view', - 'controller' => 'post', - 'module' => 'blog', - 'params' => array('id' => null) - )); - - // Gibt false zurück weil die Seite den id Parameter in der - // Anfrage gesetzt haben muß - $page->isActive(); // gibt false zurück - -.. _zend.navigation.pages.mvc.example.routes: - -.. rubric:: Routen verwenden - -Routen können mit *MVC* Seite verwendet werden. Wenn eine Seite eine Route hat, wird diese Route in ``getHref()`` -verwendet um die *URL* für die Seite zu erstellen. - -.. note:: - - Beachte, das wenn die *route* Eigenschaft in einer Seite verwendet wird, man auch die Standard Parameter - spezifizieren sollte die diese Route definieren (module, controller, action, usw.), andernfalls ist die - ``isActive()`` Methode nicht dazu in der Lage zu erkennen ob die Seite aktiv ist oder nicht. Der Grund hierfür - ist, das es aktuell keinen Weg gibt die Standardparameter von einem ``Zend\Controller\Router\Route\Interface`` - Objekt zu erhalten, oder die aktuelle Route von einem ``Zend\Controller\Router\Interface`` Objekt. - -.. code-block:: php - :linenos: - - // Die folgende Route wird den ZF Router hinzugefügt - Zend\Controller\Front::getInstance()->getRouter()->addRoute( - 'article_view', // route name - new Zend\Controller\Router\Route( - 'a/:id', - array( - 'module' => 'news', - 'controller' => 'article', - 'action' => 'view', - 'id' => null - ) - ) - ); - - // Eine Seite wird mit der 'route' Option erstellt - $page = new Zend\Navigation\Page\Mvc(array( - 'label' => 'A news article', - 'route' => 'article_view', - 'module' => 'news', // wird für isActive() benötigt, siehe oben - 'controller' => 'article', // wird für isActive() benötigt, siehe oben - 'action' => 'view', // wird für isActive() benötigt, siehe oben - 'params' => array('id' => 42) - )); - - // Gibt /a/42 zurück - $page->getHref(); - - diff --git a/docs/languages/de/modules/zend.navigation.pages.rst b/docs/languages/de/modules/zend.navigation.pages.rst deleted file mode 100644 index 019775e95..000000000 --- a/docs/languages/de/modules/zend.navigation.pages.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.pages: - -Seiten -====== - -``Zend\Navigation`` wird mit zwei Seitentypen ausgeliefert: - -- :ref:`MVC-Seiten ` – diese verwenden die Klasse ``Zend\Navigation\Page\Mvc`` -- :ref:`URI-Seiten ` – diese verwenden die Klasse ``Zend\Navigation\Page\Uri`` - -MVC-Seiten zeigen auf Seiten der eigenen Webanwendung, welche durch MVC-Parameter (*action*, -*controller*, *route*, *params*) definiert werden. URI-Seiten haben nur die Eigenschaft *uri*, -welche die Möglichkeit bietet, auf externe Webesiten zu verlinken oder sonstige Links zu erzeugen -(z.B. *foo*). - -.. include:: zend.navigation.pages.common.rst -.. include:: zend.navigation.pages.mvc.rst -.. include:: zend.navigation.pages.uri.rst -.. include:: zend.navigation.pages.custom.rst -.. include:: zend.navigation.pages.factory.rst \ No newline at end of file diff --git a/docs/languages/de/modules/zend.navigation.pages.uri.rst b/docs/languages/de/modules/zend.navigation.pages.uri.rst deleted file mode 100644 index 26e49eb31..000000000 --- a/docs/languages/de/modules/zend.navigation.pages.uri.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. EN-Revision: none -.. _zend.navigation.pages.uri: - -Zend\Navigation\Page\Uri -======================== - -Seiten des Typs ``Zend\Navigation\Page\Uri`` können verwendet werden um auf Seiten von anderen Domains oder Websites -zu verweisen, oder um eigene Logik für die Seite zu implementieren. *URI* Seiten sind sehr einfach gehalten. -Zusätzlich zu den normalen Seitenoptionen kennt eine *URI*-Seite nur noch die Option *uri*. Der Wert von *uri* kann -durch die Methode ``$page->getHref()`` zurückgegeben werden. Dies kann ``String`` oder ``NULL`` sein. - -.. note:: - - ``Zend\Navigation\Page\Uri`` versucht nicht automatisch zu ermitteln, ob die Seite aktiv ist, wenn - ``$page->isActive()`` aufgerufen wird. Die Methode liefert nur den aktuell festgelegten Wert zurück. Um also - eine *URI*-Seite aktiv zu setzen, muß man händisch ``$page->setActive()`` aufrufen oder *active* als Option - bei der Erstellung der Seite angeben. - -.. _zend.navigation.pages.uri.options: - -.. table:: Optionen für URI-Seiten - - +------+------+--------+------------------------------------------------------+ - |Option|Typ |Standard|Beschreibung | - +======+======+========+======================================================+ - |uri |String|NULL |URI zur Seite. Das kann ``String`` oder ``NULL`` sein.| - +------+------+--------+------------------------------------------------------+ \ No newline at end of file diff --git a/docs/languages/de/modules/zend.oauth.getting-started.rst b/docs/languages/de/modules/zend.oauth.getting-started.rst deleted file mode 100644 index a94070cde..000000000 --- a/docs/languages/de/modules/zend.oauth.getting-started.rst +++ /dev/null @@ -1,183 +0,0 @@ -.. EN-Revision: none -.. _zend.oauth.introduction.getting-started: - -Beginnen -======== - -Da das OAuth Protokoll jetzt erklärt wurde sehen wir uns ein einfaches Beispiel mit Quellcode an. Unser neuer -Konsument wird Twitter Statusübertragungen verwenden. Um das tun zu können muss er bei Twitter registriert sein -um einen OAuth Konsumentenschlüssel und ein Konsumentengeheimnis zu empfangen. Diese werden verwendet um einen -Zugriffstoken zu erhalten bevor wir die Twitter *API* verwenden um eine Statusmeldung zu schicken. - -Angenommen wir haben einen Schlüssel und ein Geheimnis bekommen, dann können wir den OAuth Workflow starten indem -eine ``ZendOauth\Consumer`` Instanz wie folgt eingerichtet und eine Konfiguration übergeben wird (entweder ein -Array oder ein ``Zend_Config`` Objekt). - -.. code-block:: php - :linenos: - - $config = array( - 'callbackUrl' => 'http://example.com/callback.php', - 'siteUrl' => 'http://twitter.com/oauth', - 'consumerKey' => 'gg3DsFTW9OU9eWPnbuPzQ', - 'consumerSecret' => 'tFB0fyWLSMf74lkEu9FTyoHXcazOWpbrAjTCCK48A' - ); - $consumer = new ZendOauth\Consumer($config); - -callbackUrl ist die URI von der wir wollen das Sie Twitter von unserem Server anfragt wenn Informationen gesendet -werden. Wir sehen uns das später an. siteUrl ist die Basis URL der OAuth *API* Endpunkte von Twitter. Die -komplette Liste der Endpunkt enthält http://twitter.com/oauth/request_token, http://twitter.com/oauth/access_token -und http://twitter.com/oauth/authorize. Die grundsätzliche siteUrl verwendet eine Konvention welche auf diese drei -OAuth Endpunkte verweist (als Standard) um einen Anfragetoken, den Zugriffstoken oder die Authorisierung zu -erhalten. Wenn sich der aktuelle Endpunkt eines beliebigen Services vom Standardset unterscheidet, dann können -diese drei URIs separat gesetzt werden indem die Methoden ``setRequestTokenUrl()``, ``setAccessTokenUrl()``, und -``setAuthorizeUrl()``, oder die Konfigurationsfelder requestTokenUrl, accessTokenUrl und authorizeUrl verwendet -werden. - -consumerKey und consumerSecret werden von Twitter empfangen wenn sich die eigene Anwendung für den OAuth Zugriff -registriert. Das wird auch bei jedem OAuth aktivierten Service so angewendet, so dass jeder einen Schlüssel und -ein Geheimnis für die eigene Anwendung anbietet. - -Alle diese Konfigurationsoptionen müssen durch Verwendung von Methodenaufrufen gesetzt werden indem Sie einfach -von callbackUrl auf setCallbackUrl() konvertiert werden. - -Zusätzlich sollte beachtet werden das verschiedene andere Konfigurationswerte nicht explizit verwendet werden: -requestMethod und requestScheme. Standardmäßig sendet ``ZendOauth\Consumer`` Anfragen als POST (ausgenommen bei -einer Weiterleitung welche ``GET`` verwendet). Der konsumierende Client (siehe später) enthält auch seine -Authorisierung in Art eines Headers. Einige Services können, zu Ihrer Diskretion, Alternativen benötigen. Man -kann requestMethod (welche standardmäßig ZendOauth\Oauth::POST ist) zum Beispiel auf ZendOauth\Oauth::GET zurückgesetzt, -und requestScheme von seinem Standardwert ZendOauth\Oauth::REQUEST_SCHEME_HEADER entweder auf -ZendOauth\Oauth::REQUEST_SCHEME_POSTBODY oder auf ZendOauth\Oauth::REQUEST_SCHEME_QUERYSTRING. Typischerweise sollten die -Standardwerte bis auf ein paar bestimmte Ausnahmen problemlos funktionieren. Für Details sehen Sie bitte in die -Dokumentation des Service Providers. - -Der zweite Teil der Anpassung definiert wie *HMAC* arbeitet wenn es für alle Anfragen berechnet und verglichen -wird. Das wird durch Verwendung des Konfigurationsfeldes signatureMethod oder durch ``setSignatureMethod()`` -konfiguriert. Standardmäßig ist es HMAC-SHA1. Man kann es auch auf die vom Provider bevorzugte Methode setzen -inklusive RSA-SHA1. Für RSA-SHA1 sollte man die privaten und öffentlichen RSA Schlüssel über die -Konfigurationsfelder rsaPrivateKey und rsaPublicKey oder die Methoden ``setRsaPrivateKey()`` und -``setRsaPublicKey()`` konfigurieren. - -Der erste Teil des OAuth Workflows holt sich einen Anfragetoken. Das wird bewerkstelligt indem folgendes verwendet -wird: - -.. code-block:: php - :linenos: - - $config = array( - 'callbackUrl' => 'http://example.com/callback.php', - 'siteUrl' => 'http://twitter.com/oauth', - 'consumerKey' => 'gg3DsFTW9OU9eWPnbuPzQ', - 'consumerSecret' => 'tFB0fyWLSMf74lkEu9FTyoHXcazOWpbrAjTCCK48A' - ); - $consumer = new ZendOauth\Consumer($config); - - // Holt den Anfragetoken - $token = $consumer->getRequestToken(); - -Der neue Anfragetoken (eine Instanz von ``ZendOauth\Token\Request``) ist nicht authorisiert. Um Ihn mit einem -authorisierten Token zu wechseln mit dem wir auf die Twitter *API* zugreifen können, muss Ihn der Benutzer -authorisieren. Wir bewerkstelligen das indem der Benutzer auf den Authorisierungsendpunkt von Twitter umgeleitet -wird: - -.. code-block:: php - :linenos: - - $config = array( - 'callbackUrl' => 'http://example.com/callback.php', - 'siteUrl' => 'http://twitter.com/oauth', - 'consumerKey' => 'gg3DsFTW9OU9eWPnbuPzQ', - 'consumerSecret' => 'tFB0fyWLSMf74lkEu9FTyoHXcazOWpbrAjTCCK48A' - ); - $consumer = new ZendOauth\Consumer($config); - - // Holt den Anfragetoken - $token = $consumer->getRequestToken(); - - // Den token im Speicher fixieren - $_SESSION['TWITTER_REQUEST_TOKEN'] = serialize($token); - - // Den Benutzer umleiten - $consumer->redirect(); - -Der Benutzer wird jetzt auf Twitter umgeleitet. Er wird gefragt den Anfragetoken zu authorisieren, welcher an den -Anfragestring der umgeleiteten URI angehängt ist. Angenommen er akzeptiert und vervollständigt die -Authorisierung, dann wird er wieder umgeleitet. Dieses Mal auf unsere Callback URL die vorher gesetzt wurde -(Beachte das die Callback URL auch in Twitter registriert wurde als wir unsere Anwendung registriert haben). - -Bevor der Benutzer umgeleitet wird, sollten wir den Anfragetoken im Speicher fixieren. Der Einfachheit halber -verwenden wir nur die Session des Benutzer, aber man kann sehr einfach eine Datenbank für den gleichen Zweck -verwenden, solange der Anfragetoken mit dem aktuellen Benutzer verbunden bleibt, damit er empfangen werden kann -wenn dieser zu unserer Anwendung zurückkommt. - -Die umgeleitete URI von Twitter enthält einen authorisierten Zugriffstoken. Wir können Code einbauen um diesen -Zugriffstoken wie folgt herauszuschneiden - dieser Sourcecode würde im ausgeführten Code unserer Callback URI -existieren. Sobald er herausgeschnitten wurde können wir den vorherigen Anfragetoken entfernen, und statt dessen -den Zugriffstoken für die zukünftige Verendung mit der *API* von Twitter fixieren. Nochmals, wir fixieren einfach -die Session des Benutzer, aber in Wirklichkeit kann ein Zugriffstoken eine lange Lebenszeit haben, und sollte -deshalb wirklich in einer Datenbank abgespeichert werden. - -.. code-block:: php - :linenos: - - $config = array( - 'callbackUrl' => 'http://example.com/callback.php', - 'siteUrl' => 'http://twitter.com/oauth', - 'consumerKey' => 'gg3DsFTW9OU9eWPnbuPzQ', - 'consumerSecret' => 'tFB0fyWLSMf74lkEu9FTyoHXcazOWpbrAjTCCK48A' - ); - $consumer = new ZendOauth\Consumer($config); - - if (!empty($_GET) && isset($_SESSION['TWITTER_REQUEST_TOKEN'])) { - $token = $consumer->getAccessToken( - $_GET, - unserialize($_SESSION['TWITTER_REQUEST_TOKEN']) - ); - $_SESSION['TWITTER_ACCESS_TOKEN'] = serialize($token); - - // Jetzt da wir den Zugriffstoken haben können wir den Anfragetoken löschen - $_SESSION['TWITTER_REQUEST_TOKEN'] = null; - } else { - // Fehlgeschlagene Anfrage? Ein Gauner versucht etwas? - exit('Ungültige Callback Anfrage. Oops. Entschuldigung.'); - } - -Erfolg! Wir haben einen authorisierten Zugriffstoken - zu dieser Zeit verwenden wir schon die *API* von Twitter. Da -dieser Zugriffstoken bei jeder einzelnen *API* Anfrage enthalten sein muss, bietet ``ZendOauth\Consumer`` einen -fix-fertigen *HTTP* Client an (eine Subklasse von ``Zend\Http\Client``) welcher entweder für sich verwendet -werden, oder der als eigener *HTTP* Client an eine andere Bibliothek oder Komponente übergeben werden kann. Hier -ist ein Beispiel für die eigenständige Verwendung. Das kann von überall aus der Anwendung heraus getan werden, -solange man Zugriff auf die OAuth Konfiguration hat, und den endgültigen authorisierten Zugriffstoken empfangen -kann. - -.. code-block:: php - :linenos: - - $config = array( - 'callbackUrl' => 'http://example.com/callback.php', - 'siteUrl' => 'http://twitter.com/oauth', - 'consumerKey' => 'gg3DsFTW9OU9eWPnbuPzQ', - 'consumerSecret' => 'tFB0fyWLSMf74lkEu9FTyoHXcazOWpbrAjTCCK48A' - ); - - $statusMessage = 'Ich sende über Twitter und verwende ZendOauth!'; - - $token = unserialize($_SESSION['TWITTER_ACCESS_TOKEN']); - $client = $token->getHttpClient($configuration); - $client->setUri('http://twitter.com/statuses/update.json'); - $client->setMethod(Zend\Http\Client::POST); - $client->setParameterPost('status', $statusMessage); - $response = $client->request(); - - $data = Zend\Json\Json::decode($response->getBody()); - $result = $response->getBody(); - if (isset($data->text)) { - $result = 'true'; - } - echo $result; - -Als Notiz zum eigenen Client, kann dieser an den meisten Services von Zend Framework übergeben werden, oder an -andere Klassen welche ``Zend\Http\Client`` verwenden um damit den Standardclient zu ersetzen welcher andernfalls -verwendet werden würde. - - diff --git a/docs/languages/de/modules/zend.oauth.introduction.rst b/docs/languages/de/modules/zend.oauth.introduction.rst deleted file mode 100644 index 3a88ba401..000000000 --- a/docs/languages/de/modules/zend.oauth.introduction.rst +++ /dev/null @@ -1,36 +0,0 @@ -.. EN-Revision: none -.. _zend.oauth.introduction: - -Einführung zu OAuth -=================== - -OAuth erlaubt es Zugriffe auf private Daten welche in einer Website gespeicher sind von jeder Anwendung aus zu -gestatten ohne dazu gezwungen zu sein den Benutzernamen oder das Passwort herauszugeben. Wenn man darüber nachdenk -ist die Praxis der Herausgabe von Benutzername und Passwort für Sites wie Yahoo Mail oder Twitter seit einer -ganzen Weile endemisch. Dies hat einige Bedenken ausgelöst weil es nichts gibt um zu verhindern das Anwendungen -diese Daten missbrauchen. Ja, einige Serives mögen vertrauenswürdig erscheinen aber dies kann nie garantiert -werden. OAuth löst dieses Problem indem es die Notwendigkeit eliminiert Benutzernamen und Passwörter zu teilen, -und es mit einem vom Benutzer kontrollierten Authorisationsprozess ersetzt. - -Dieser Authorisationsprozess basiert auf Tokens. Wenn man eine Anwendung authorisiert (wobei eine Anwendung jede -Webbasierende- oder Desktop- anwendung enthält) auf die eigenen Daten zuzugreifen, wird diese einen Access Token -erhalten der mit dem eigenen Account assoziiert ist. Bei Verwendung dieses Access Tokens kann die Anwendungen auf -die privaten Daten zugreifen ohne dauernd die Zugangsdaten zu benötigen. Insgesamt ist dieses Prokoll einer -delegationsartigen Authorisierung eine sicherere Lösung des Problems auf private Daten über eine beliebige -Webservice *API* zuzugreifen. - -OAuth ist keine komplett neue Idee, es ist mehr ein standardisiertes Protokoll welches auf existierende -Eigenschaften von Protokollen wie Google AuthSub, Yahoo BBAuth, Flickr *API*, usw. aufsetzt. Alle von Ihnen -arbeiten im weiteren Sinne auf der Basis einer standardisierten Benutzerkennung für eine Art Access Token. Der -Vorteil einer standardisierten Spezifikation wie OAuth ist, das Sie nur eine einzelne Implementation benötigt im -gegensatz zu vielen unterschiedlichen abhängig vom verwendeten Webservice. Diese Standardisierung hat nicht -unabhängig von den Major Players stattgefunden, und aktuell unterstützen viele bereits OAuth als Alternative und -wollen in Zukunft Ihre eigenen Lösungen damit ersetzen. - -Zend Framework's ``ZendOauth`` implementiert aktuell über die Klasse ``ZendOauth\Consumer`` einen vollständigen -OAuth Konsumenten welcher der OAuth Core 1.0 Revision A Spezifikation (24 Juni 2009) entspricht. - -.. include:: zend.oauth.protocol-workflow.rst -.. include:: zend.oauth.security-architecture.rst -.. include:: zend.oauth.getting-started.rst - diff --git a/docs/languages/de/modules/zend.oauth.protocol-workflow.rst b/docs/languages/de/modules/zend.oauth.protocol-workflow.rst deleted file mode 100644 index 657f08373..000000000 --- a/docs/languages/de/modules/zend.oauth.protocol-workflow.rst +++ /dev/null @@ -1,62 +0,0 @@ -.. EN-Revision: none -.. _zend.oauth.introduction.protocol-workflow: - -Workflow des Protokolls -======================= - -Bevor OAuth implementiert wird macht es Sinn zu verstehen wie das Protokoll arbeitet. Hierfür nehmen wir ein -Beispiel von Twitter welches aktuell bereits OAuth basierend auf der OAuth Core 1.0 Revision A Spezifikation -imeplementiert. Dieses Beispiel sieht das Protokoll aus der Perspektive des Benutzers (der den Zugriff gestattet), -dem Konsumenten (der den Zugriff anfragt) und dem Provider (der die privaten Daten des Benutzers hat). Ein Zugriff -kann nur-lesend, oder lesend und schreibend sein. - -Durch Zufall hat unser Benutzer entschieden das er einen neuen Service verwenden will der TweetExpress genannt wird -und behauptet in der Lage zu sein Blog Posts bei Twitter in wenigen Sekunden nochmals zu posten. TweetExpress ist -bei Twitter eine registrierte Anwendung was bedeutet das es Zugriff auf einen Konsumentenschlüssel und ein -Geheimnis des Konsumenten hat (alle OAuth Anwendungen müssen diese vom Provider haben auf welchen Sie zugreifen -wollen) welche seine Anfragen bei Twitter identifizieren und sicherstellen das alle Anfragen signiert werden -können indem das Geheimnis des Konsumenten verwendet wird um deren Herkunft zu prüfen. - -Um TweetExpress zu verwenden wird man danach gefragt sich für einen neuen Account zu registrieren, und das der -Registrierung wird sichergestellt das man dafüber informiert ist das TweetExpress den eigenen Twitter Account mit -dem Service assoziiert. - -In der Zwischenzeit was TweenExpress beschäftigt. Bevor das Einverständnis von Twitter gegeben wird, hat es eine -*HTTP* Anfrage an den Service von Twitter geschickt und nach einem neuen unauthorisierten Anfrage Token gefragt. -Dieser Token ist aus der Perspektive von Twitter nicht Benutzerspezifisch, aber TweetExpress man Ihn spezifisch -für den aktuellen Benutzer verwenden und sollte Ihn mit seinem Account verknüpfen und Ihn für eine künftige -Verwendung speichern. TweetExpress leitet den Benutzer nun zu Twitter um damit er den Zugriff von TweetExpress -erlauben kann. Die URL für diese Umleitung wird signiert indem das Konsumentengeheimnis von TweetExpress verwendet -wird und Sie enthält den unauthorisierten Anfrage Token als Parameter. - -An diesem Punkt kann der Benutzer gefragt werden sich in Twitter anzumelden und wird jetzt mit einem Twitter -Bildschirm konfrontiert welcher Ihn fragt ob er diese Anfrage von TweetExpress für den Zugriff auf die *API* von -Twitter im Auftrag des Benutzers gestattet. Twitter speichert die Antwort von der wir annehmen das Sie positiv war. -Basierend auf dem Einverständnis des Benutzers speichert Twitter den aktuell unauthorisierten Anfrage Token als -vom Benutzer akzeptiert (was Ihn Benutzerspezifisch macht) und erzeugt einen neuen Wert in der Form eines -Überprüfungscodes. Der Benutzer wird jetzt auf eine spezifische Callback URL zurückgeleitet welche von -TweetExpress verwendet wird (diese Callback URL kann bei Twitter registriert sein, oder dynamisch gesetzt werden -indem bei den Anfragen ein oauth_callback Parameter verwendet wird). Die Umleitungs-URL wird den neu erzeugten -Überprüfungscode enthalten. - -Die Callback URL von TweetExpress löst eine Überprüfung der Anfrage aus um zu erkennen ob der Benutzer seine -Zustimmung an Twitter gegeben hat. Wir nehmen an das dies der Fall war, dann kann jetzt sein nicht authorisierter -Anfrage Token gegen einen voll authorisierten Anfrage Token getauscht werden indem eine Anfrage an Twitter -zurückgesendet wird inklusive dem Anfrage Token und dem empfangenen Überprüfungscode. Twitter sollte jetzt eine -Antwort zurücksenden welche diesen Zugriffstoken enthält welcher in allen Anfragen verwendet werden muss um -Zugriff auf die *API* von Twitter im Auftrag des Benutzers zu erhalten. Twitter macht das nur einmal sobald -bestätigt wurde das der angehängte Anfrage Token noch nicht verwendet wurde um einen anderen Anfrage Token zu -erhalten. Ab diesem Punkt kann TweetExpress dem Benutzer die Anfrage der Akzeptanz bestätigen und den originalen -Anfrage Token löschen da er nicht länger benötigt wird. - -Ab diesem Punkt kann TweetExpress die *API* von Twitter verwenden um neue Tweets im Sinne des Benutzers zu schicken -indem einfach auf die Endpunkte der *API* mit einer Anfrage zugegriffen wird welche digital signiert wurde (über -HMAC-SHA1) mit einer Kombination von dem Konsumenten Geheimnis von TweetExpress und dem Zugriffsschlüssel der -verwendet wird. - -Auch wenn Twitter den Zugriffstoken nicht ablaufen lässt, steht es dem Benutzer frei TweetExpress zu -de-authorisieren damit es nicht mehr auf seine Einstellungen des Twitter Accounts zugreifen kann. Sobald er -de-authorisiert wurde, wird der Zugriff von TweetExpress abgeschnitten und sein eigener Zugriffstoken wird als -ungültig dargestellt. - - diff --git a/docs/languages/de/modules/zend.oauth.security-architecture.rst b/docs/languages/de/modules/zend.oauth.security-architecture.rst deleted file mode 100644 index 3273c63c5..000000000 --- a/docs/languages/de/modules/zend.oauth.security-architecture.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. EN-Revision: none -.. _zend.oauth.introduction.security-architecture: - -Architektur der Sicherheit -========================== - -OAuth wurde speziell designt um über eine unsichere *HTTP* Verbindung zu arbeiten und deshalb ist die Verwendung -von *HTTPS* nicht notwendig obwohl es natürlich wünschenswert wäre wenn es vorhanden ist. Sollte eine *HTTPS* -Verbindung möglich sein bietet OAuth die Implementation einer Signaturmethode an welche PLAINTEXT heißt und -verwendet werden kann. Über eine typische unsichere *HTTP* Verbindung muss die Verwendung von PLAINTEXT verhindert -werden und ein alternatives Schema wird verwendet. Die OAuth Spezifikation definiert zwei solcher Signaturmethoden: -HMAC-SHA1 und RSA-SHA1. Beide werden von ``ZendOauth`` vollständig unterstützt. - -Diese Signaturmethoden sind recht einfach zu verstehen. Wie man sich vorstellen kann macht die PLAINTEXT -Signaturmethode nichts das erwähnenswert wäre da Sie auf *HTTPS* aufsetzt. Wenn man aber PLAINTEXT über *HTTP* -verwenden würde, dann würde ein signifikantes Problem bestehen: Es gibt keinen Weg um sicherzustellen das der -Inhalt einer OAuth-aktivierten Anfrage (welche einen OAuth Zugriffstoken enthalten würde) beim Routen verändert -wurde. Das ist der Fall weil unsichere *HTTP* Anfragen immer das Risiko des Lauschens, von Man In The Middle (MITM) -Attacken, oder andere Risiken haben können in denen eine Anfrage weiterbearbeitet werden könnten und damit -Arbeiten im Sinne des Angreifers ausgeführt werden indem sich dieser als Originalanwendung maskiert ohne das dies -vom Serviceprovider bemerkt wird. - -HMAC-SHA1 und RSA-SHA1 vermindern dieses Risiko indem alle OAuth Anfragen mit dem originalen von der Anwendung -registrierten Konsumentengeheimnis digital signiert werden. Angenommen nur der Konsument und der Provider wissen -was das Geheimnis ist, dann kann ein Mann in der Mitte soviele Anfragen verändern wie er will - aber er wird nicht -in der Lage sein sie gültig zu signieren und unsignierte oder ungültig signierte Anfragen würden von beiden -Parteien ausgeschieden werden. Digitale Signaturen bieten deshalb eine Garantie das gültig signierte Anfragen von -der erwarteten Partei kommen und beim Routen nicht verändert wurden. Das ist der Kern warum OAuth über eine -unsichere Verbindung arbeiten kann. - -Wie diese digitalen Signaturen arbeiten hängt von der verwendeten Methode ab, z.B. HMAC-SHA1, RSA-SHA1 oder -möglicherweise eine andere Methode welche vom Serviceprovider definiert wird. HMAC-SHA1 ist ein einfacher -Mechanismus welcher einen Nachrichten Authentifizierungscode (MAC) erzeugt indem eine kryptographische Hash -Funktion (z.B. SHA1) in Verbindung mit einem geheimen Schlüssel verwendet wird der nur dem Sender und dem -Empfänger der Nachricht bekannt sind (z.b. das Konsumentengeheimnis von OAuth kombiniert mit dem authorisierten -Zugriffsschlüssel). Dieser Hashing Mechanismus wird den Parametern und dem Inhalt aller OAuth Anfragen angehängt -und zu einem "Basissignatur String" zusammengefügt wie es von der OAuth Spezifikation definiert ist. - -RSA-SHA1 operiert auf ähnlichen Prinzipien ausser dass das Geheimnis welches geteilt wird, wie man es erwarten -würde, der private RSA Schlüssel jeder Partei ist. Beide Seiten haben den öffentlichen Schlüssel des anderen -mit dem die digitalen Signaturen geprüft werden. Das führt verglichen mit HMAC-SHA1 zu einem Riskolevel da die -RSA Methode keinen Zugriffsschlüssel als teil des geteilten Geheimnisses verwendet. Dies bedeutet dass wenn der -private RSA Schlüssel eines Konsumenten kompromitiert ist, sind es alle zugeordneten Zugriffstoken dieses -Konsumenten auch. RSA führt zu einem alles oder gar nichts Schema. Generell tendiert die Mehrheit der -Serviceprovider welche OAuth Authorisierung anbieten dazu HMAC-SHA1 standardmäßig zu verwenden, und jene welche -RSA-SHA1 anbieten können eine Fallback Unterstützung für HMAC-SHA1 anbieten. - -Wärend digitale Signaturen zur Sicherheit von OAuth beitragen sind Sie trotzdem für andere Formen von Attacken -angreifbar, wie Replay Attacken welche vorhergehende Anfragen aufgezeichnet und zu einer Zeit geprüft und signiert -wurden. Ein Angreifen können jetzt exakt die gleiche Anfrage zum Provider wie er will und zu jeder Zeit senden und -seine Ergebnisse auffangen. Das führt zu einem signifikanten Risiko aber es ist recht einfach sich davor zu -schützen - einen eindeutigen String (z.b. eine Nonce) bei allen Anfragen hinzufügen welcher sich bei jeder -Anfrage ändert (dies verändert laufend den Signaturstring) kann aber niemals wiederverwendet werden weil Provider -verwendete Nonces zusammen mit einem bestimmten Fenster aktiv verfolgen welches vom Timestamp definiert wird der -einer Anfrage auch angehängt wird. Man würde erwarten das wenn die Verfolgung einer bestimmten Nonce gestoppt -wird, das wiederabspielen funktionieren würde, aber das ignoriert den Timestamp der verwendet werden kann um das -Alter einer Anfrage zu ermitteln zu welcher Sie digital signiert wurde. Man kann also annehmen dass die eine Woche -alte Anfrage in einem Wiederholungsversuch abgespielt wird, auf ähnliche Weise verworfen wird. - -Als letzter Punkt erwähnt, ist dies keine exzessive Ansicht der Sicherheitsarchitektur in OAuth. Was passiert zum -Beispiel wenn *HTTP* Anfragen welche sowohl den Zugriffstoken als auch das Geheimnis des Konsumenten enthalten -abgehört werden? Das System ist auf der einen Seite von einer klaren Übermittlung von allem abhängig solange -*HTTPS* nicht aktiv ist. Deshalb ist die naheliegende Feststellung das *HTTPS*, dort wo es möglich ist zu -bevorzugen ist und *HTTP* nur an solchen Orten eingesetzt wird so es nicht anders möglich oder nicht erschwinglich -ist. - - diff --git a/docs/languages/de/modules/zend.open-id.consumer.rst b/docs/languages/de/modules/zend.open-id.consumer.rst deleted file mode 100644 index 7de1b691d..000000000 --- a/docs/languages/de/modules/zend.open-id.consumer.rst +++ /dev/null @@ -1,666 +0,0 @@ -.. EN-Revision: none -.. _zend.openid.consumer: - -ZendOpenId\Consumer Grundlagen -=============================== - -``ZendOpenId\Consumer`` kann verwendet werden um OpenID Authentifizierung auf Webseiten zu implementieren. - -.. _zend.openid.consumer.authentication: - -OpenID Authentifikation ------------------------ - -Aus der Sicht eines Website Entwicklers, geschieht die Authentifikation von OpenID in drei Schritten: - -. Zeige das OpenID Authentifikations Formular - -. Akzeptiere die OpenID Identität und übergib Sie an den OpenID Provider - -. Überprüfe die Antwort des OpenID Providers - -Das OpenID Authentifikations Protokoll benötigt aktuell mehrere, aber viele von Ihnen sind innerhalb von -``ZendOpenId\Consumer`` gekapselt, und deshalb für den Entwickler transparent. - -Der End-Benutzer initiiert den OpenID Authentifikations Prozess indem er Seine oder Ihre Identifikations Daten in -der entsprechenden Form übermittelt. Das folgende Beispiel zeigt ein einfaches Formular das einen OpenID -Identifikator akzeptiert. Es gilt zu beachten dass das Beispiel nur einen Login demonstriert. - -.. _zend.openid.consumer.example-1: - -.. rubric:: Das einfache OpenID Login Formular - -.. code-block:: php - :linenos: - - -
- OpenID Login - - -
- -Dieses Formular übergibt bei der Übertragung eine OpenID Identität an das folgende *PHP* Skript welches den -zweiten Schritt der Authentifizierung durchführt. Das *PHP* Skript muss in diesem Schritt nur die -``ZendOpenId\Consumer::login()`` Methode aufrufen. Das erste Argument dieser Methode akzeptiert eine OpenID -Identität, und das zweite ist die *URL* des Skripts das den dritten und letzten Schritt der Authentifizierung -behandelt. - -.. _zend.openid.consumer.example-1_2: - -.. rubric:: Der Authentifizierungs Anfrage Handler - -.. code-block:: php - :linenos: - - $consumer = new ZendOpenId\Consumer(); - if (!$consumer->login($_POST['openid_identifier'], 'example-1_3.php')) { - die("OpenID Login fehlgeschlagen."); - } - -Die ``ZendOpenId\Consumer::login()`` Methode führt eine Suche nach einem gegebenen Identifikator durch und -findet, bei Erfolg, die Adresse des Identitäts Providers und dessen Lokalen Idenzifizierer durch. Dann erstellt es -eine Assoziation zum gegebenen Provider sodas beide, die Site und der Provider, um das gleiche Geheimnis teilen das -verwendet wird um nachfolgende Nachrichten zu verschlüsseln. Letztendlich wird eine Authentifikations Anfrage an -den Provider übergeben. Diese Anfrage leitet den Web-Browser des End-Benutzers zu einer OpenID Server Site um, wo -der Benutzer die Möglichkeit habt den Authentifizierungs Prozess fortzuführen. - -Ein OpenID Provider fragt nochmalerweise Benutzer nach Ihrem Passwort (wenn Sie vorher noch nicht angemeldet -waren), wenn der Benutzer dieser Site vertraut und welche Informationen zu der Site zurückgegeben werden können. -Diese Interaktionen sind für den OpenID Konsument nicht sichtbar sodas es für Ihn keine Möglichkeit gibt das -Benutzerpasswort oder andere Informationen zu bekommen bei denen der Benutzer nicht gesagt hat das der OpenId -Provider Sie teilen darf. - -Bei Erfolg wird ``ZendOpenId\Consumer::login()`` nicht zurückkommen, sondern eine *HTTP* Umleitung durchführt. -Trotzdem wird im Falle eine Fehler ein ``FALSE`` zurückgeben wird. Fehler können durch eine ungültige -Identität, einen Provider der nicht antwortet, Kommunikations Fehler, usw. auftreten. - -Der dritte Schritt der Authentifikation wird durch die Antwort vom OpenID Provider initiiert, nachdem dieser das -Benutzerpasswort authentifiziert hat. Diese Antwort wird indirekt, als *HTTP* Umleitung übergeben, indem der -Webbrowsers des End-Benutzers verwendet wird. Der Konsument muß nun einfach prüfen ob die Antwort gültig ist. - -.. _zend.openid.consumer.example-1_3: - -.. rubric:: Der Authentifizierungs Antwort Prüfer - -.. code-block:: php - :linenos: - - $consumer = new ZendOpenId\Consumer(); - if ($consumer->verify($_GET, $id)) { - echo "GÜLTIG ". htmlspecialchars($id); - } else { - echo "UNGÜLTIG" . htmlspecialchars($id); - } - -Diese Prüfung wird durchgeführt indem die ``ZendOpenId\Consumer::verify`` Methode verwendet wird, welche ein -ganzes Array von HTTP Anfrage Argumenten entgegennimmt und prüft ob diese Antwort durch den OpenID Provider -richtig signiert wurde. Sie kann die erhaltete OpenID Identität, die vom Endbenutzer im ersten Schritt angegeben -wurde, zuordnen, indem ein zweites, optionales, Argument eingegeben wird. - -.. _zend.openid.consumer.combine: - -Alle Schritte in einer Seite kombinieren ----------------------------------------- - -Das folgende Beispiel kombiniert alle drei Schritte in einem Skript. Es bietet keine neuen Funktionalitäten. Der -Vorteil der Verwendung eines einzelnen Skripts ist, das Entwickler keine *URL*'s für das Skript definieren muss, -das den nächsten Schritt durchführt. Standardmäßig verwenden alle Schritte die gleiche *URL*. Trotzdem enthält -das Skript nun etwas Dispatchcode um den korrekten Code für jeden Schritt der Authentifikation aufzurufen. - -.. _zend.openid.consumer.example-2: - -.. rubric:: Das komplette Skript für ein OpenID Login - -.. code-block:: php - :linenos: - - $status = ""; - if (isset($_POST['openid_action']) && - $_POST['openid_action'] == "login" && - !empty($_POST['openid_identifier'])) { - - $consumer = new ZendOpenId\Consumer(); - if (!$consumer->login($_POST['openid_identifier'])) { - $status = "OpenID Login fehlgeschlagen."; - } - } else if (isset($_GET['openid_mode'])) { - if ($_GET['openid_mode'] == "id_res") { - $consumer = new ZendOpenId\Consumer(); - if ($consumer->verify($_GET, $id)) { - $status = "GÜLTIG " . htmlspecialchars($id); - } else { - $status = "UNGÜLTIG " . htmlspecialchars($id); - } - } else if ($_GET['openid_mode'] == "cancel") { - $status = "ABGEBROCHEN"; - } - } - ?> - - " ?> -
-
- OpenID Login - - -
-
- - -Zusätzlich unterscheidet dieser Code zwischen abgebrochen und ungültigen Authentifizierungs Antworten. Der -Provider gibt eine abgebrochene Antwort zurück, wenn der Identitäts Provider die gegebene Identität nicht -unterstützt, der Benutzer nicht angemeldet ist, oder der Benutzer der Seite nicht vertraut. Eine ungültige -Antwort zeigt an das die Antwort dem OpenId Protokoll nicht entspricht oder nicht korrekt signiert wurde. - -.. _zend.openid.consumer.realm: - -Konsumenten Bereiche --------------------- - -Wenn eine OpenID-aktivierte Site eine Authentifikations Anfrage an einen Provider übergibt, identifiziert diese -sich selbst mit einer Bereichs *URL*. Diese *URL* kann als Root der vertrauten Site betrachtet werden. Wenn der -Benutzer der Bereichs *URL* vertraut, dann sollte er oder Sie das auch bei der passenden und den untergeordneten -*URL*\ s tun. - -Standardmäßig wird die Bereichs *URL* automatisch auf die *URL* des Verzeichnisses gesetzt indem das Login Skript -ist. Dieser Standardwert ist für die meisten, aber nicht alle, Fälle ausreichend. Manchmal sollte einer komplette -Domain, und nicht einem Verzeichnis vertraut werden. Oder sogar einer Kombination von verschiedenen Servern in -einer Domain. - -Um den Standardwert zu überschreiben müssen Entwickler die Bereichs *URL* als drittes Argument an die -``ZendOpenId\Consumer::login`` Methode übergeben. Im folgenden Beispiel fragt eine einzelne Interaktion nach -vertrauten Zugriff auf alle php.net Sites. - -.. _zend.openid.consumer.example-3_2: - -.. rubric:: Authentifizierungs Anfrage für spezielle Bereiche - -.. code-block:: php - :linenos: - - $consumer = new ZendOpenId\Consumer(); - if (!$consumer->login($_POST['openid_identifier'], - 'example-3_3.php', - 'http://*.php.net/')) { - die("OpenID Login fehlgeschlagen."); - } - -Dieses Beispiel implementiert nur den zweiten Schritt der Authentifikation; der erste und dritte Schritt sind die -identisch mit dem ersten Beispiel. - -.. _zend.openid.consumer.check: - -Sofortige Prüfung ------------------ - -In einigen Fällen muß eine Anwendung nur prüfen ob ein Benutzer bereits auf einem vertrauten OpenID Server -eingeloggt ist ohne einer Interaktion mit dem Benutzer. Die ``ZendOpenId\Consumer::check`` Methode führt genau -das durch. Sie wird mit den gleichen Argumenten wie ``ZendOpenId\Consumer::login`` ausgeführt, aber Sie zeigt dem -Benutzer keine OpenID Serverseiten. Aus Sicht des Benutzers ist dieser Prozess transparent, und es scheint als ob -er die Site nie verlässt. Der dritte Schritt ist erfolgreich wenn der Benutzer bereits angemeldet ist und der Site -vertraut, andernfalls ist er erfolglos. - -.. _zend.openid.consumer.example-4: - -.. rubric:: Sofortige Prüfung ohne Interaktion - -.. code-block:: php - :linenos: - - $consumer = new ZendOpenId\Consumer(); - if (!$consumer->check($_POST['openid_identifier'], 'example-4_3.php')) { - die("OpenID Login fehlgeschlaten."); - } - -Das Beispiel implementiert nur den zweiten Schritt der Authentifikation; der erste und dritte Schritt sind dem -obigen Beispiel ähnlich. - -.. _zend.openid.consumer.storage: - -ZendOpenId\Consumer\Storage ----------------------------- - -Es gibt drei Schritte beim Authentifizierungs Prozess von OpenID, und jeder wird durch eine separate *HTTP* Anfrage -durchgeführt. Um die Informationen zwischen den Anfragen zu speichern verwendet ``ZendOpenId\Consumer`` einen -internen Speicher. - -Entwickler müssen sich nicht notwendigerweise um die Speicherung kümmern weil ``ZendOpenId\Consumer`` -standardmäßig einen dateibasierten Speicher im temporären Verzeichnis verwendet, ähnlich wie *PHP* Sessions. -Trotzdem ist dieser Speicher nicht in allen Situationen richtig. Einige Entwickler wollen Informationen in einer -Datenbank speichern, wärend andere einen üblichen Speicher für große Server-Farmen verwenden wollen. -Glücklicherweise können Entwickler den Standardspeicher sehr einfach mit Ihrem eigenen tauschen. Um einen eigenen -Speichermechanismus zu spezifizieren muß nur die ``ZendOpenId\Consumer\Storage`` Klasse erweitert werden und -diese Unterklasse dem ``ZendOpenId\Consumer`` Konstruktor im ersten Argument übergeben werden. - -Das folgende Beispiel demonstriert einen einfachen Speicher Mechanismus der ``Zend_Db`` als sein Backend verwendet -und drei Gruppen von Funktionen bereitstellt. Der erste Gruppe enthält Funktionen für die Arbeit mit -Assoziationen, wärend die zweite Gruppe erkannte Informationen cacht, und die dritte Gruppe kann verwendet werden -um zu prüfen ob die Antwort eindeutig ist. Die Klasse kann einfach mit bestehenden oder neuen Datenbanken -verwendet werden; wenn die benötigten Tabellen nicht existieren, wird er Sie erstellen. - -.. _zend.openid.consumer.example-5: - -.. rubric:: Datenbank Speicher - -.. code-block:: php - :linenos: - - class DbStorage extends ZendOpenId\Consumer\Storage - { - private $_db; - private $_association_table; - private $_discovery_table; - private $_nonce_table; - - // Übergib das Zend\Db\Adapter Objekt und die Namen der - // benötigten Tabellen - public function __construct($db, - $association_table = "association", - $discovery_table = "discovery", - $nonce_table = "nonce") - { - $this->_db = $db; - $this->_association_table = $association_table; - $this->_discovery_table = $discovery_table; - $this->_nonce_table = $nonce_table; - $tables = $this->_db->listTables(); - - // Erstelle die Assoziationstabellen wenn Sie nicht existieren - if (!in_array($association_table, $tables)) { - $this->_db->getConnection()->exec( - "create table $association_table (" . - " url varchar(256) not null primary key," . - " handle varchar(256) not null," . - " macFunc char(16) not null," . - " secret varchar(256) not null," . - " expires timestamp" . - ")"); - } - - // Erstelle die Discoverytabellen wenn Sie nicht existieren - if (!in_array($discovery_table, $tables)) { - $this->_db->getConnection()->exec( - "create table $discovery_table (" . - " id varchar(256) not null primary key," . - " realId varchar(256) not null," . - " server varchar(256) not null," . - " version float," . - " expires timestamp" . - ")"); - } - - // Erstelle die Nouncetabellen wenn Sie nicht existieren - if (!in_array($nonce_table, $tables)) { - $this->_db->getConnection()->exec( - "create table $nonce_table (" . - " nonce varchar(256) not null primary key," . - " created timestamp default current_timestamp" . - ")"); - } - } - - public function addAssociation($url, - $handle, - $macFunc, - $secret, - $expires) - { - $table = $this->_association_table; - $secret = base64_encode($secret); - $this->_db->insert($table, array( - 'url' => $url, - 'handle' => $handle, - 'macFunc' => $macFunc, - 'secret' => $secret, - 'expires' => $expires, - )); - return true; - } - - public function getAssociation($url, - &$handle, - &$macFunc, - &$secret, - &$expires) - { - $table = $this->_association_table; - $this->_db->delete( - $table, $this->_db->quoteInto('expires < ?', time()) - ); - $select = $this-_db->select() - ->from($table, array('handle', 'macFunc', 'secret', 'expires')) - ->where('url = ?', $url); - $res = $this->_db->fetchRow($select); - - if (is_array($res)) { - $handle = $res['handle']; - $macFunc = $res['macFunc']; - $secret = base64_decode($res['secret']); - $expires = $res['expires']; - return true; - } - return false; - } - - public function getAssociationByHandle($handle, - &$url, - &$macFunc, - &$secret, - &$expires) - { - $table = $this->_association_table; - $this->_db->delete( - $table, $this->_db->quoteInto('expires < ', time()) - ); - $select = $this->_db->select() - ->from($table, array('url', 'macFunc', 'secret', 'expires') - ->where('handle = ?', $handle); - $res = $select->fetchRow($select); - - if (is_array($res)) { - $url = $res['url']; - $macFunc = $res['macFunc']; - $secret = base64_decode($res['secret']); - $expires = $res['expires']; - return true; - } - return false; - } - - public function delAssociation($url) - { - $table = $this->_association_table; - $this->_db->query("delete from $table where url = '$url'"); - return true; - } - - public function addDiscoveryInfo($id, - $realId, - $server, - $version, - $expires) - { - $table = $this->_discovery_table; - $this->_db->insert($table, array( - 'id' => $id, - 'realId' => $realId, - 'server' => $server, - 'version' => $version, - 'expires' => $expires, - )); - - return true; - } - - public function getDiscoveryInfo($id, - &$realId, - &$server, - &$version, - &$expires) - { - $table = $this->_discovery_table; - $this->_db->delete($table, $this->quoteInto('expires < ?', time())); - $select = $this->_db->select() - ->from($table, array('realId', 'server', 'version', 'expires')) - ->where('id = ?', $id); - $res = $this->_db->fetchRow($select); - - if (is_array($res)) { - $realId = $res['realId']; - $server = $res['server']; - $version = $res['version']; - $expires = $res['expires']; - return true; - } - return false; - } - - public function delDiscoveryInfo($id) - { - $table = $this->_discovery_table; - $this->_db->delete($table, $this->_db->quoteInto('id = ?', $id)); - return true; - } - - public function isUniqueNonce($nonce) - { - $table = $this->_nonce_table; - try { - $ret = $this->_db->insert($table, array( - 'nonce' => $nonce, - )); - } catch (Zend\Db\Statement\Exception $e) { - return false; - } - return true; - } - - public function purgeNonces($date=null) - { - } - } - - $db = Zend\Db\Db::factory('Pdo_Sqlite', - array('dbname'=>'/tmp/openid_consumer.db')); - $storage = new DbStorage($db); - $consumer = new ZendOpenId\Consumer($storage); - -Dieses Beispiel zeigt keinen OpenID Authentifikations Code, aber dieser Code würde der gleiche sein wie der für -die anderen Beispiel in diesem Kapitel. - -.. _zend.openid.consumer.sreg: - -Einfache Registrations Erweiterung ----------------------------------- - -Zusätzlich zur Authentifikation kann OpenID Standard für einen leichtgewichtigen Profiltausch verwendet werden, -um Informationen über einen Benutzer über mehrere Sites hinweg portabel zu machen. Dieses Feature wird nicht -durch die OpenID Authentifikations Spezifikation abgedeckt, aber vom OpenID Einfachen Registrierungs Erweiterungs -Protokoll unterstützt. Dieses Protokoll erlaubt es OpenID-aktivierten Sites nach Informationen über End-Benutzern -von OpenID Providers zu fragen. Diese Informationen können folgendes beinhalten: - -- **nickname**- ein UTF-8 String den der End-Benutzer als Spitzname verwendet. - -- **email**- die Email Adresse des Benutzers wie in Sektion 3.4.1 von RFC2822 spezifiziert. - -- **fullname**- eine UTF-8 String Repräsentation des kompletten Namens des Benutzers. - -- **dob**- das Geburtsdatum des Benutzers im Format 'YYYY-MM-DD'. Jeder Wert dessen Repräsentation weniger als die - speifizierte Anzahl an Ziffern in diesem Format verwendet sollte mit Nullen aufgefüllt werden. In anderen - Worten, die Länge dieses Wertes muß immer 10 sein. Wenn der Benutzer irgendeinen Teil dieses Wertes (z.B. Jahr, - Monat oder Tag) nicht angeben will, dann muß dieser auf Null gesetzt werden. Wenn ein Benutzer zum Beispiel - angeben will das sein Geburtsdatum in das Jahr 1980 fällt, aber nicht den Monat oder Tag angeben will, dann - sollte der zurückgegebene Wert '1980-00-00' sein. - -- **gender**- das Geschlecht des Benutzers: "M" für männlich, "F" für weiblich - -- **postcode**- ein UTF-8 String der dem Postleitzahl System des Landes des End-Benutzers entspricht - -- **country**- das Land des Wohnsitzes des Benutzers wie in ISO3166 spezifiziert - -- **language**- die bevorzugte Sprache des Benutzers wie in ISO639 spezifiziert - -- **timezone**- ein *ASCII* String von der Zeitzonen Datenbank. Zum Beispiel, "Europe/Paris" oder - "America/Los_Angeles". - -Eine OpenID-aktivierte Web-Seite kann nach jeder beliebigen Kombination dieser Felder fragen. Sie kann auch einige -Informationen strikt fordern und es Benutzern erlauben zusätzliche Informationen anzubieten oder zu verstecken. -Das folgende Beispiel Instanziiert die ``ZendOpenId\Extension\Sreg`` Klasse die einen **nickname** (Spitzname) -benötigt und optional eine **email** (E-Mail) und einen **fullname** (vollständigen Namen) benötigt. - -.. _zend.openid.consumer.example-6_2: - -.. rubric:: Anfragen mit einer einfachen Registrations Erweiterung senden - -.. code-block:: php - :linenos: - - $sreg = new ZendOpenId\Extension\Sreg(array( - 'nickname'=>true, - 'email'=>false, - 'fullname'=>false), null, 1.1); - $consumer = new ZendOpenId\Consumer(); - if (!$consumer->login($_POST['openid_identifier'], - 'example-6_3.php', - null, - $sreg)) { - die("OpenID Login fehlgeschlagen."); - } - -Wie man sieht akzeptiert der ``ZendOpenId\Extension\Sreg`` Konstruktor ein Array von OpenId Feldern. Das Array hat -den Namen der Felder als Indezes zu einem Flag das anzeigt ob das Feld benötigt wird oder nicht. ``TRUE`` bedeutet -der Wert wird benötigt und ``FALSE`` bedeutet das Feld ist optional. Die Methode ``ZendOpenId\Consumer::login`` -akzeptiert eine Erweiterung oder ein Array von Erweiterungen als sein viertes Argument. - -Im dritten Schritt der Authentifikation sollte das ``ZendOpenId\Extension\Sreg`` Objekt an -``ZendOpenId\Consumer::verify`` übergeben werden. Anschließend wird die Methode -``ZendOpenId\Extension\Sreg::getProperties``, bei erfolgreicher Authentifizierung, ein assoziatives Array von -benötigten Feldern zurückgeben. - -.. _zend.openid.consumer.example-6_3: - -.. rubric:: Antworten mit einer einfachen Registierungs Erweiterung prüfen - -.. code-block:: php - :linenos: - - $sreg = new ZendOpenId\Extension\Sreg(array( - 'nickname'=>true, - 'email'=>false, - 'fullname'=>false), null, 1.1); - $consumer = new ZendOpenId\Consumer(); - if ($consumer->verify($_GET, $id, $sreg)) { - echo "GÜLTIG " . htmlspecialchars($id) . "
\n"; - $data = $sreg->getProperties(); - if (isset($data['nickname'])) { - echo "Spitzname: " . htmlspecialchars($data['nickname']) . "
\n"; - } - if (isset($data['email'])) { - echo "Email: " . htmlspecialchars($data['email']) . "
\n"; - } - if (isset($data['fullname'])) { - echo "Vollständiger Name: " . htmlspecialchars($data['fullname']) - . "
\n"; - } - } else { - echo "UNGÜLTIG " . htmlspecialchars($id); - } - -Wenn das ``ZendOpenId\Extension\Sreg`` Objekt ohne Argumente erstellt wurde, sollte der Benutzercode selbst das -Vorhandensein der benötigten Daten prüfen. Trotzdem, wenn das Objekt mit der gleichen Liste an benötigten -Feldern wie im zweiten Schritt erstellt wird, wird es automatisch die Existenz der benötigten Daten prüfen. In -diesem Fall wird ``ZendOpenId\Consumer::verify`` ``FALSE`` zurückgeben wenn irgendeines der benötigten Felder -fehlt. - -``ZendOpenId\Extension\Sreg`` verwendet standardmäßig die Version 1.0 weil die Spezifikation der Version 1.1 -noch nicht fertiggestellt wurde. Trotzdem unterstützen einige Bibliotheken die Version 1.0 nicht vollständig. Zum -Beispiel benötigt www.myopenid.com einen SREG Namensraum in den Anfragen der nur in 1.1 vorhanden ist. Um mit so -einem Server zu Arbeiten muß man die Version 1.1 explizit im ``ZendOpenId\Extension\Sreg`` Konstruktor setzen. - -Das zweite Argument des ``ZendOpenId\Extension\Sreg`` Konstruktors ist eine Policy *URL*, die dem Benutzer durch -den Identitäts Provider zur Verfügung gestellt werden sollte. - -.. _zend.openid.consumer.auth: - -Integration mit Zend_Auth -------------------------- - -Zend Framework bietet eine spezielle Klasse für die Unterstützung von Benutzer Authentifikation: ``Zend_Auth``. -Diese Klasse kann zusammen mit ``ZendOpenId\Consumer`` verwendet werden. Das folgende Beispiel zeigt wie -``OpenIdAdapter`` das ``Zend\Auth\Adapter\Interface`` mit der ``authenticate()`` Methode implementiert. Diese -führt eine Authentifikations Anfrage und Verifikation durch. - -Der große Unterschied zwischen diesem Adapter und dem bestehenden ist, das er mit zwei *HTTP* Anfragen arbeitet -und einen Dispatch code enthält um den zweiten oder dritten Schritt der OpenID Authentifikation durchzuführen. - -.. _zend.openid.consumer.example-7: - -.. rubric:: Zend_Auth Adapter für OpenID - -.. code-block:: php - :linenos: - - class OpenIdAdapter implements Zend\Auth\Adapter\Interface { - private $_id = null; - - public function __construct($id = null) { - $this->_id = $id; - } - - public function authenticate() { - $id = $this->_id; - if (!empty($id)) { - $consumer = new ZendOpenId\Consumer(); - if (!$consumer->login($id)) { - $ret = false; - $msg = "Authentifizierung fehlgeschlagen."; - } - } else { - $consumer = new ZendOpenId\Consumer(); - if ($consumer->verify($_GET, $id)) { - $ret = true; - $msg = "Authentifizierung erfolgreich"; - } else { - $ret = false; - $msg = "Authentifizierung fehlgeschlagen"; - } - } - return new Zend\Auth\Result($ret, $id, array($msg)); - } - } - - $status = ""; - $auth = Zend\Auth\Auth::getInstance(); - if ((isset($_POST['openid_action']) && - $_POST['openid_action'] == "login" && - !empty($_POST['openid_identifier'])) || - isset($_GET['openid_mode'])) { - $adapter = new OpenIdAdapter(@$_POST['openid_identifier']); - $result = $auth->authenticate($adapter); - if ($result->isValid()) { - ZendOpenId\OpenId::redirect(ZendOpenId\OpenId::selfURL()); - } else { - $auth->clearIdentity(); - foreach ($result->getMessages() as $message) { - $status .= "$message
\n"; - } - } - } else if ($auth->hasIdentity()) { - if (isset($_POST['openid_action']) && - $_POST['openid_action'] == "logout") { - $auth->clearIdentity(); - } else { - $status = "Du bist angemeldet als " . $auth->getIdentity() . "
\n"; - } - } - ?> - - -
- OpenID Login - - - -
- -Mit ``Zend_Auth`` wird die Identität des End-Benutzes in den Session Daten gespeichert. Sie kann mit -``Zend\Auth\Auth::hasIdentity`` und ``Zend\Auth\Auth::getIdentity`` geprüft werden. - -.. _zend.openid.consumer.mvc: - -Integration mit Zend_Controller -------------------------------- - -Zuletzt ein paar Worte über die Integration in Model-View-Controller Anwendungen: Solche Zend Framework -Anwendungen werden implementiert durch Verwenden der ``Zend_Controller`` Klasse und Sie verwenden die -``Zend\Controller\Response\Http`` Klasse um *HTTP* Antworten vorzubereiten und an den Web Browser des Benutzers -zurückzusenden. - -``ZendOpenId\Consumer`` bietet keine GUI Möglichkeiten aber es führt *HTTP* Umleitungen bei erflgreichen -``ZendOpenId\Consumer::login`` und ``ZendOpenId\Consumer::check`` durch. Diese Umleitungen könnten nicht richtig -funktionieren, oder sogar überhaupt nicht, wenn einige Daten bereits an den Web Browser gesendet wurden. Um *HTTP* -Umleitungen im *MVC* Code richtig durchzuführen sollte die echte ``Zend\Controller\Response\Http`` als letztes -Argument an ``ZendOpenId\Consumer::login`` oder ``ZendOpenId\Consumer::check`` gesendet werden. - - diff --git a/docs/languages/de/modules/zend.open-id.introduction.rst b/docs/languages/de/modules/zend.open-id.introduction.rst deleted file mode 100644 index 7c9547c68..000000000 --- a/docs/languages/de/modules/zend.open-id.introduction.rst +++ /dev/null @@ -1,107 +0,0 @@ -.. EN-Revision: none -.. _zend.openid.introduction: - -Einführung -========== - -``ZendOpenId`` ist eine Zend Framework Komponente die eine einfache *API* für das Erstellen von -OpenID-verwendenden Sites und Identitäts Providern bietet. - -.. _zend.openid.introduction.what: - -Was ist OpenID? ---------------- - -OpenID ist ein Set von Protokollen für Benutzer-zentrierte digitale Identitäts Provider. Diese Protokolle -erlauben Benutzern online die Erstellung einer Identität, indem ein Identitäts Provider verwendet wird. Diese -Identität kann auf jeder Seite verwendet werden die OpenID unterstützt. Die Verwendung von OpenID-erlaubenden -Sites gestattet es Benutzern, das Sie sich traditionelle Authentifizierungs Tokens nicht merken müssen, wie -Benutzernamen und Passwörter für jede Seite. Alle OpenID-erlaubenden Sites akzeptieren eine einzelne OpenID -Identität. Diese Identität ist typischerweise eine *URL*. Das kann die *URL* der persönlichen Seite eines -Benutzers sein, ein Blog oder eine andere Ressource die zusätzliche Daten zu Ihm liefert. Das bedeutet das ein -Benutzer nur mehr einen Identifikator für alle Seiten, die er oder Sie benutzt, benötigt. OpenID ist eine offene, -dezentralisierte und freie Benutzer-zentrierte Lösung. Benutzer können auswählen welcher OpenID Anbieter -verwendet werden soll, oder sogar Ihren eigenen persönlichen Identitäts Server erstellen. Es wird keine zentrale -Authorität benötigt um OpenID-erlaubende Sites zuzulassen oder zu registrieren noch irgendwelche Identitäts -Provider. - -Für weitere Informationen über OpenId siehe die `offizielle OpenID Seite`_. - -.. _zend.openid.introduction.how: - -Wie funktioniert das ? ----------------------- - -Der Zweck der ``ZendOpenId`` Komponente ist es das OpenID Authentifizierungsprotokoll zu implementieren, wie im -folgenden Sequenzdiagramm beschrieben: - -.. image:: ../images/zend.openid.protocol.jpg - :width: 559 - :align: center - -. Authentifizierung wird durch den Endbenutzer initiiert, welcher seinen OpenID Identifikator zum OpenID - Konsumenten, durch einen User-Agenten, übergibt. - -. Der OpenID Konsument führt eine Normalisierung und Begutachtung des vom Benutzer gelieferten Identifikators - durch. Durch diesen Prozess erhält der Benutzer den geforderten Identifikator, die *URL* des OpenID Providers - und eine OpenID Protokoll Version. - -. Der OpenID Konsument führt eine optionale Assoziierung mit dem Provider durch wobei Diffie-Hellman Schlüssel - verwendet werden. Als Ergebnis haben beide Parteien ein übliches "geteiltes Geheimnis" das für das - unterschreiben und verifizieren der nachfolgenden Nachrichten verwendet wird. - -. Der OpenID Konsument leitet den Benutzer-Agenten zur *URL* des OpenID Providers mit einer OpenID - Authentifizierungs Anfrage weiter. - -. Der OpenID Provider prüft ob der Benutzer-Agent bereits authentifiziert wurde, und wenn nicht bietet er es an. - -. Der Endbenutzer gibt das benötigte Passwort an. - -. Der OpenID Provider prüft ob es erlaubt ist die Identität des Benutzers zum gegebenen Konsumenten zu - übergeben, und fragt den Benutzer wenn das notwendig ist. - -. Der Benutzer erlaubt oder verweigert das übergeben seiner Identität. - -. Der OpenID Provider leitet den Benutzer-Agenten zum OpenID Konsumenten zurück mit einer "Authentifizierung - durchgeführt" oder "fehlgeschlagen" Anfrage. - -. Der OpenID Konsument verifiziert die vom Provider empfangenen Informationen durch die Verwendung des geteilten - Geheimnisses das er in Schritt 3 erhalten hat oder durch das Senden einer direkten Anfrage zum OpenID Provider. - -.. _zend.openid.introduction.structure: - -ZendOpenId Struktur --------------------- - -``ZendOpenId`` besteht aus zwei Unterpaketen. Das erste ist ``ZendOpenId\Consumer`` für die Entwicklung von -OpenID-verwendenden Servern und der zweite ist ``ZendOpenId\Provider`` für die Entwicklung von OpenID Servern. -Diese sind komplett unabhängig voneinander und können separat verwendet werden. - -Der einzige gemeinsame Code der von diesen Unterpaketen verwendet wird ist die OpenID Simply Registry Erweiterung -die von der ``ZendOpenId\Extension\Sreg`` Klasse implementiert wird und ein Set von Hilfs Funktionen die von der -``ZendOpenId`` Klasse implementiert werden. - -.. note:: - - ``ZendOpenId`` hat Vorteile davon wenn die `GMP Erweiterung`_ vorhanden ist. Es sollte Angedacht werden die GMP - Erweiterung für eine verbesserte Performance einzuschalten wenn ``ZendOpenId`` verwendet wird.OpenID - -.. _zend.openid.introduction.standards: - -Unterstützte OpenId Standards ------------------------------ - -Die ``ZendOpenId`` Komponente unterstützt die folgenden Standards: - -- OpenID Authentifizierungs Protokoll Version 1.1 - -- OpenID Authentifizierungs Protokoll Version 2.0 Entwurf 11 - -- OpenID Einfache Registrierungs Erweiterung Version 1.0 - -- OpenID Einfache Registrierungs Erweiterung Version 1.1 Entwurf 1 - - - -.. _`offizielle OpenID Seite`: http://www.openid.net/ -.. _`GMP Erweiterung`: http://php.net/gmp diff --git a/docs/languages/de/modules/zend.open-id.provider.rst b/docs/languages/de/modules/zend.open-id.provider.rst deleted file mode 100644 index e256aba96..000000000 --- a/docs/languages/de/modules/zend.open-id.provider.rst +++ /dev/null @@ -1,384 +0,0 @@ -.. EN-Revision: none -.. _zend.openid.provider: - -ZendOpenId\Provider -==================== - -``ZendOpenId\Provider`` kann verwendet werden um OpenID Server zu implementieren. Dieses Kapitel bietet Beispiele -die Demonstrieren wie ein sehr einfacher Server erstellt werden kann. Für die Implementierung eines produktiven -OpenId Servers (wie zum Beispiel `www.myopenid.com`_) kann es aber notwendig sein mit komplexeren Problemen -umzugehen. - -.. _zend.openid.provider.start: - -Schellstart ------------ - -Das folgende Beispiel beinhaltet Code für das Erstellen eines Benutzerzugang indem -``ZendOpenId\Provider::register`` verwendet wird. Das Link-Element mit ``rel="openid.server"`` zeigt auf das -eigene Serverscript. Wenn diese Identität zu einer OpenID-aktivierten Seite übertragen wird, wird eine -Authentifizierung zu diesem Server durchgeführt. - -Der Code vor dem Tag ist nur ein Trick der automatisch den Benutzerzugang erstellt. Man benötigt solch -einen Code nicht wenn echte Identitäten verwendet werden. - -.. _zend.openid.provider.example-1: - -.. rubric:: Die Identität - -.. code-block:: php - :linenos: - - hasUser(TEST_ID)) { - $server->register(TEST_ID, TEST_PASSWORD); - } - ?> - - - - - - -Das folgende Identitäts-Serverscript behandelt zwei Arten von Anfragen von OpenID-aktivierten Sites (for -Assoziation und Authentifizierung). Beide von Ihnen werden von der gleichen Methode behandelt: -``ZendOpenId\Provider::handle``. Die zwei Argumente für ``ZendOpenId\Provider`` Konstruktor sind die *URL*\ s -des Logins und der Vertrauten Seite, welche die Eingabe des End-Benutzers abfragen. - -Bei Erfolg gibt die Methode ``ZendOpenId\Provider::handle`` einen String zurück der zur OpenID-aktivierten Seite -zurück übergeben werden sollte. Bei einem Fehler wird ``FALSE`` zurückgegeben. Dieses Beispiel gibt eine *HTTP* -403 Antwort zurück wenn ``ZendOpenId\Provider::handle`` fehlschlägt. Man erhält diese Antwort wenn man dieses -Skript mit einem Web-Browser öffnet, weil es eine nicht-OpenID konforme Anfrage sendet. - -.. _zend.openid.provider.example-2: - -.. rubric:: Einfacher Identitäts Provider - -.. code-block:: php - :linenos: - - $server = new ZendOpenId\Provider("example-8-login.php", - "example-8-trust.php"); - $ret = $server->handle(); - if (is_string($ret)) { - echo $ret; - } else if ($ret !== true) { - header('HTTP/1.0 403 Forbidden'); - echo 'Verboten'; - } - -.. note:: - - Es ist eine gute Idee eine sichere Verbindung (HTTPS) für diese Skripte zu verwenden - und speziell für die - folgenden interaktiven Scripte - um den Diebstahl von Passwörtern zu verhindern. - -Das folgende Skript implementiert einen Login Schirm für einen Identitäts Server indem ``ZendOpenId\Provider`` -verwendet wird und leitet zu dieser Seite weiter wenn ein benötigter Benutzer sich noch nicht eingeloggt hat. Auf -dieser Seite gibt der Benutzer sein Passwort an um sich anzumelden. - -Es sollte das Passwort "123" verwendet werden das im obigen Identitäts Skript verwendet wurde. - -Bei Abschicken, ruft das Skript ``ZendOpenId\Provider::login`` mit der akzeptierten Benutzer Identität und dem -Passwort auf, und leitet anschließend zum Hauptskript des Identitäts Providers zurück. Bei Erfolg baut -``ZendOpenId\Provider::login`` eine Session zwischen dem Benutzer und dem Identitäts-Provider auf und speichert -die Informationen über den Benutzer der nun angemeldet ist. Alle folgenden Anfragen vom gleichen Benutzer -benötigen keine Login-Prozedur mehr - selbst wenn diese von einer anderen OpenID aktivierten Web-Seite kommen. - -.. note:: - - Es ist zu beachten das die Session nur zwischen den End-Benutzer und dem Identitäts-Provider existiert. OpenID - aktivierte Seiten wissen nichts darüber. - -.. _zend.openid.provider.example-3: - -.. rubric:: Einfacher Login Schirm - -.. code-block:: php - :linenos: - - login($_POST['openid_identifier'], - $_POST['openid_password']); - ZendOpenId\OpenId::redirect("example-8.php", $_GET); - } - ?> - - -
-
- OpenID Login - - - - - - - - - - - - - -
Name: - -
Passwort: - -
  - -
-
-
- - - -Der Fakt das der Benutzer jetzt angemeldet ist bedeutet nicht das die Authentifizierung notwendigerweise -erfolgreich sein muß. Der Benutzer kann entscheiden das er der betreffenden OpenID aktivierten Seite nicht -vertraut. Der folgende Vertrauens-Schirm erlaubt dem Endbenutzer diese Wahl zu treffen. Diese Wahl kann entweder -nur für die aktuelle Anfrage oder für "immer" gemacht werden. Im zweiten Fall werden Informationen über -vertrauenswürdige/nicht vertrauenswürdige Seiten in einer internen Datenbank gespeichert, und alle folgenden -Authentifizierungs Anfragen von dieser Seite werden automatisch gehandhabt ohne einer Interaktion des Benutzers. - -.. _zend.openid.provider.example-4: - -.. rubric:: Einfacher Vertrauens Schirm - -.. code-block:: php - :linenos: - - allowSite($server->getSiteRoot($_GET)); - } - $server->respondToConsumer($_GET); - } else if (isset($_POST['deny'])) { - if (isset($_POST['forever'])) { - $server->denySite($server->getSiteRoot($_GET)); - } - ZendOpenId\OpenId::redirect($_GET['openid_return_to'], - array('openid.mode'=>'cancel')); - } - } - ?> - - -

Eine Seite die sich als - getLoggedInUser());?>"> - getLoggedInUser());?> - - ihre Identitäts URL ist. -

-
- -
- - - -
- - - -Produktive OpenID Server unterstützen normalerweise die einfache Registrierungs Erweiterung die es Benutzern -erlaubt einige Informationen über ein Benutzerformular beim Provider nachzufragen. In diesem Fall kann die -Vertraute Seite erweitert werden um die Eingabe von angefragten Feldern zu erlauben oder ein spezielles -Benutzerprofil auszuwählen. - -.. _zend.openid.provider.all: - -Kombinierte Skripte -------------------- - -Es ist möglich alle Provider Funktionalitäten in einem Skript zusammen zu kombinieren. In diesem Fall werden -Login und Vertraute *URL*\ s unterdrückt, und ``ZendOpenId\Provider`` nimmt an das diese auf die gleiche Seite -zeigen mit einem zusätzlichen "openid.action"``GET`` Argument. - -.. note:: - - Das folgende Beispiel ist nicht komplett. Es bietet kein GUI für End-Benutzer wie es sein sollte, aber es - führt automatisches Login und Vertrauen durch. Das wird getan um das Beispiel zu vereinfachen, und echte Server - müssen Code von den vorherigen Beispielen inkludieren. - -.. _zend.openid.provider.example-5: - -.. rubric:: Alles zusammen - -.. code-block:: php - :linenos: - - $server = new ZendOpenId\Provider(); - - define("TEST_ID", ZendOpenId\OpenId::absoluteURL("example-9-id.php")); - define("TEST_PASSWORD", "123"); - - if ($_SERVER['REQUEST_METHOD'] == 'GET' && - isset($_GET['openid_action']) && - $_GET['openid_action'] === 'login') { - $server->login(TEST_ID, TEST_PASSWORD); - unset($_GET['openid_action']); - ZendOpenId\OpenId::redirect(ZendOpenId\OpenId::selfUrl(), $_GET); - } else if ($_SERVER['REQUEST_METHOD'] == 'GET' && - isset($_GET['openid_action']) && - $_GET['openid_action'] === 'trust') { - unset($_GET['openid_action']); - $server->respondToConsumer($_GET); - } else { - $ret = $server->handle(); - if (is_string($ret)) { - echo $ret; - } else if ($ret !== true) { - header('HTTP/1.0 403 Forbidden'); - echo 'Verboten'; - } - } - -Wenn man dieses Beispiel mit den vorherigen Beispielen vergleicht, die in einzelne Seiten aufgeteilt sind, sieht -man zusätzlich zum Dispatch Code, nur einen Unterschied: ``unset($_GET['openid_action'])``. Dieser Aufruf von -``unset()`` ist notwendig um die nächste Anfrage zum Haupthandler zu routen. - -.. _zend.openid.provider.sreg: - -Einfache Registrierungs Erweiterung (SREG) ------------------------------------------- - -Wieder ist der Code vor dem Tag nur ein Trick um die Funktionalität zu demonstrieren. Er erstellt einen -neuen Benutzerzugang und assoziiert Ihn mit einem Profil (Spitzname und Passwort). Solche Tricks werden bei -ausgelieferten Providern nicht benötigt wo sich End Benutzer auf OpenID Servern registrieren und Ihre Profile -eintragen. Die Implementierung dieses GUI würde den Rahmen dieses Handbuches sprengen. - -.. _zend.openid.provider.example-6: - -.. rubric:: Identität mit Profil - -.. code-block:: php - :linenos: - - hasUser(TEST_ID)) { - $server->register(TEST_ID, TEST_PASSWORD); - $server->login(TEST_ID, TEST_PASSWORD); - $sreg = new ZendOpenId\Extension\Sreg(array( - 'nickname' =>'test', - 'email' => 'test@test.com' - )); - $root = ZendOpenId\OpenId::absoluteURL("."); - ZendOpenId\OpenId::normalizeUrl($root); - $server->allowSite($root, $sreg); - $server->logout(); - } - ?> - - - - - - - - - -Die Identität sollte jetzt der OpenID-aktivierten Webseite übergeben werden (verwende das einfache Registrierungs -Erweiterung Beispiel aus dem vorherigen Kapitel) und sie sollte das folgende OpenID Server Skript verwenden. - -Dieses Skript ist eine Variation des Skripts im "Alles zusammen" Beispiel. Es verwendet den gleichen automatischen -Login Mechanismus, aber es enthält keinen Code für die Vertrauens-Seite. Der Benutzer hat dem Beispielskript -bereits für immer vertraut. Dieses Vertrauen wurde durch den Aufruf der ``ZendOpenId\Provider::allowSite()`` -Methode im Identitäts Skript hergestellt. Die gleiche Methode assoziiert das Profil mit der vertrauten *URL*. -Dieses Profil wird automatisch für eine Anfrage von der vertrauten *URL* zurückgegeben. - -Um die einfache Registrierungs Erweiterung funktionsfähig zu machen ist einfach die Übergabe einer Instanz von -``ZendOpenId\Extension\Sreg`` als zweites Argument der ``ZendOpenId\Provider::handle()`` Methode. - -.. _zend.openid.provider.example-7: - -.. rubric:: Provider mit SREG - -.. code-block:: php - :linenos: - - $server = new ZendOpenId\Provider(); - $sreg = new ZendOpenId\Extension\Sreg(); - - define("TEST_ID", ZendOpenId\OpenId::absoluteURL("example-10-id.php")); - define("TEST_PASSWORD", "123"); - - if ($_SERVER['REQUEST_METHOD'] == 'GET' && - isset($_GET['openid_action']) && - $_GET['openid_action'] === 'login') { - $server->login(TEST_ID, TEST_PASSWORD); - unset($_GET['openid_action']); - ZendOpenId\OpenId::redirect(ZendOpenId\OpenId::selfUrl(), $_GET); - } else if ($_SERVER['REQUEST_METHOD'] == 'GET' && - isset($_GET['openid_action']) && - $_GET['openid_action'] === 'trust') { - echo "UNTRUSTED DATA" ; - } else { - $ret = $server->handle(null, $sreg); - if (is_string($ret)) { - echo $ret; - } else if ($ret !== true) { - header('HTTP/1.0 403 Forbidden'); - echo 'Verboten'; - } - } - -.. _zend.openid.provider.else: - -Sonst noch was? ---------------- - -Das Erstellen von OpenID Providern ist eine viel seltenere Aufgabe als die Erstellung von OpenID-aktivierten Sites, -weswegen dieses Handbuch nicht alle ``ZendOpenId\Provider`` Features so ausführlich abdeckt wie es für -``ZendOpenId\Consumer`` getan wurde. - -Zusammenfassend enthält ``ZendOpenId\Provider``: - -- Ein Set von Methoden um ein End-Benutzer GUI zu Erstellen das es Benutzern erlauben sich zu registrieren und Ihre - vertrauten Seiten und Profile zu managen. - -- Einen abstrakten Speicherlayer um Informationen über Benutzer, Ihre Seiten und Ihre Profile zu speichern. Es - speichert auch Assoziationen zwischen Providern und OpenID-aktivierten Seiten. Dieser Layer ist ähnlich dem der - ``ZendOpenId\Consumer`` Klasse. Er verwendet standardmäßg auch den Dateispeicher, kann aber mit anderen - Backends abgeleitet werden. - -- Einen Abtraktions Benutzer-Assoziierungs Layer der Web-Browser von Benutzern mit eingeloggten Identitäten - verknüpfen kann. - -Die ``ZendOpenId\Provider`` Klasse versucht nicht alle möglichen Features abzudecken die von OpenID Servern -implementiert werden können, z.B. wie digitale Zertifikate, kann aber einfach erweitert werden durch -``ZendOpenId\Extension``\ s oder durch standardmäßige Objektorientierte Erweiterungen. - - - -.. _`www.myopenid.com`: http://www.myopenid.com diff --git a/docs/languages/de/modules/zend.paginator.advanced.rst b/docs/languages/de/modules/zend.paginator.advanced.rst deleted file mode 100644 index 73752e294..000000000 --- a/docs/languages/de/modules/zend.paginator.advanced.rst +++ /dev/null @@ -1,195 +0,0 @@ -.. EN-Revision: none -.. _zend.paginator.advanced: - -Advanced usage -============== - -.. _zend.paginator.advanced.adapters: - -Eigene Adapter für Quelldaten ------------------------------ - -An irgendeinem Punkt kann es passieren das man auf einen Datentyp stößt der nicht von den mitgelieferten Adaptern -abgedeckt wird. In diesem Fall muß man seinen eigenen schreiben. - -Um das zu tun, muß man ``Zend\Paginator\Adapter\Interface`` implementieren. Es gibt zwei Methoden die hierfür -benötigt werden: - -- count() - -- getItems($offset, $itemCountPerPage) - -Zusätzlich kann es gewünscht sein einen Konstruktor zu implementieren der die Datenquelle als Parameter -entgegennimmt und als geschützte oder private Eigenschaft abspeichert. Wie man das realisieren will liegt komplett -in Eigenverantwortung. - -Wenn man jemals schon das SPL Interface `Countable`_ verwendet hat, wird man mit ``count()`` umgehen können. -``Zend_Paginator`` verwendet es als totale Anzahl an Elementen in der Datensammlung. Zusätzlich bietet die -``Zend_Paginator`` Instanz eine ``countAllItems()`` Methode die auf die ``count()`` Methode des Adapters -weiterleitet. - -Die ``getItems()`` Methode ist nur etwas komplizierter. Hierfür, wird der Adapter mit einem Offset und der Anzahl -an Einträgen die pro Seite dargestellt werden sollen, gefüttert. Man muß den entsprechenden Bereich an Daten -zurückgeben. Für ein Array wurde das wie folgt funktionieren: - -.. code-block:: php - :linenos: - - return array_slice($this->_array, $offset, $itemCountPerPage); - -Man sollte einen Blick auf die mitgelieferten Adapter werfen (alle welche ``Zend\Paginator\Adapter\Interface`` -implementieren) um eine Idee zu bekommen wie man das selbst implementieren könnte. - -.. _zend.paginator.advanced.scrolling-styles: - -Eigene Scrolling Stile ----------------------- - -Das Erstellen von eigenen Scrolling Stilen erfordert das man ``Zend\Paginator\ScrollingStyle\Interface`` -implementiert, welche eine einzelne Methode, ``getPages()``, definiert. Speziell, - -.. code-block:: php - :linenos: - - public function getPages(Zend_Paginator $paginator, $pageRange = null); - -Diese Methode sollten eine untere und obere Grenze für die Seitenzahl innerhalb der sogenannten "lokalen" Seiten -berechnen (das sind Seiten nahe der aktuellen Seite). - -Solange es keinen anderen Scrolling Stil erweitert (siehe zum Beispiel ``Zend\Paginator\ScrollingStyle\Elastic``, -wird der eigene Scrolling Stil üblicherweise mit etwas ähnlichem sie der folgenden Codezeile enden: - -.. code-block:: php - :linenos: - - return $paginator->getPagesInRange($lowerBound, $upperBound); - -Es ist nichts speziellen an diesem Aufruf; es ist mehr eine übliche Methode um die Gültigkeit der unteren und -oberen Grenze zu prüfen und ein Array des Bereichs an den Paginator zurückzugeben. - -Wenn man bereit ist den neuen Scrolling Stil zu benutzen, muß man ``Zend_Paginator`` bekanntgeben in welchem -Verzeichnis er nachschauen muß. Um das zu tun muß das folgende ausgeführt werden: - -.. code-block:: php - :linenos: - - $prefix = 'My_Paginator_ScrollingStyle'; - $path = 'My/Paginator/ScrollingStyle/'; - Zend\Paginator\Paginator::addScrollingStylePrefixPath($prefix, $path); - -.. _zend.paginator.advanced.caching: - -Caching features ----------------- - -``Zend_Paginator`` kann gesagt werden das es die Daten die Ihm bereits übergeben wurden, cachen soll, um zu -verhindern das der Adapter sie jedes mal wenn Sie verwendet werden holen muß. Um dem Paginator zu sagen das die -Daten des Adapters automatisch gecacht werden, muß der-``setCache()`` Methode nur eine ``Zend\Cache\Core`` Instanz -übergeben werden. - -.. code-block:: php - :linenos: - - $paginator = Zend\Paginator\Paginator::factory($someData); - $fO = array('lifetime' => 3600, 'automatic_serialization' => true); - $bO = array('cache_dir'=>'/tmp'); - $cache = Zend\cache\cache::factory('Core', 'File', $fO, $bO); - Zend\Paginator\Paginator::setCache($cache); - -Sobald ``Zend_Paginator`` eine ``Zend\Cache\Core`` Instanz erhalten hat, werden Daten gecacht. Manchmal will man -Daten nicht cachen selbst wenn man bereits eine Cacheinstanz übergeben hat. Man sollte dann hierfür -``setCacheEnable()`` verwenden. - -.. code-block:: php - :linenos: - - $paginator = Zend\Paginator\Paginator::factory($someData); - // $cache ist eine Zend\Cache\Core Instanz - Zend\Paginator\Paginator::setCache($cache); - // ... später im Skript - $paginator->setCacheEnable(false); - // Der Cache ist nun ausgeschaltet - -Wenn ein Cache gesetzt ist, werden Daten automatisch in Ihm gespeichert und von Ihm herausgeholt. Es kann nützlich -sein den Cache manuell zu entleeren. Das kann durch den Aufruf von ``clearPageItemCache($pageNumber)`` getan -werden. Wenn kein Parameter übergeben wird, wird der komplette Cache entleert. Optional kann ein Parameter -übergeben werden der die Seitenanzahl repräsentiert die den Cache löschen : - -.. code-block:: php - :linenos: - - $paginator = Zend\Paginator\Paginator::factory($someData); - Zend\Paginator\Paginator::setCache($cache); - $items = $paginator->getCurrentItems(); - // Seite 1 ist nun in Cache - $page3Items = $paginator->getItemsByPage(3); - // Seite 3 ist nun in Cache - - // Den Cache für die Ergebnisse der Seite 3 löschen - $paginator->clearPageItemCache(3); - - // Alle Cachedaten löschen - $paginator->clearPageItemCache(); - -Das Ändern das Anzahl der Teile pro Seite wird den kompletten Cache leeren, das er ungültig geworden wäre : - -.. code-block:: php - :linenos: - - $paginator = Zend\Paginator\Paginator::factory($someData); - Zend\Paginator\Paginator::setCache($cache); - // Einige Teile holen - $items = $paginator->getCurrentItems(); - - // Alle Cachedaten werden ausgegeben : - $paginator->setItemCountPerPage(2); - -Es ist auch möglich zu sehen welche Daten im Cache sind und direkt nach Ihnen zu fragen. Hierfür kann -``getPageItemCache()`` verwendet werden: - -.. code-block:: php - :linenos: - - $paginator = Zend\Paginator\Paginator::factory($someData); - $paginator->setItemCountPerPage(3); - Zend\Paginator\Paginator::setCache($cache); - - // Einige Teile holen - $items = $paginator->getCurrentItems(); - $otherItems = $paginator->getItemsPerPage(4); - - // Die gecachten Teile als zwei-dimensionales Array sehen - var_dump($paginator->getPageItemCache()); - -.. _zend.paginator.advanced.aggregator: - -Zend\Paginator\AdapterAggregate Interface ------------------------------------------ - -Abhängig von der Anwendung kann es gewünscht sein Objekte zu Seiten zu verarbeiten, dessen interne Datenstruktur -identisch zu existierenden Adaptern ist, aber bei denen man nicht will das die eigene Kapselung gebrochen wird um -Zugriff auf diese Daten zu erlauben. In anderen Fällen könnte ein Objekt in einer "hat einen Adapter" Relation -stehen, statt in einer "ist ein Adapter" Relation die ``Zend\Paginator\Adapter\Abstract`` promotet. Für diese -Fälle kann man das ``Zend\Paginator\AdapterAggregate`` Interface verwenden das sich so verhält wie das -``IteratorAggregate`` Interface der SPL Erweiterung von *PHP*. - -.. code-block:: php - :linenos: - - interface Zend\Paginator\AdapterAggregate - { - /** - * Return a fully configured Paginator Adapter from this method. - * - * @return Zend\Paginator\Adapter\Abstract - */ - public function getPaginatorAdapter(); - } - -Das Interface ist sehr klein und erwartet nur das eine Instanz von ``Zend\Paginator\Adapter\Abstract`` -zurückgegeben wird. Eine Aggregate Instanz des Adapters wird dann von beiden erkannt, sowohl -``Zend\Paginator\Paginator::factory()`` als auch dem Constructor von ``Zend_Paginator`` und entsprechend behandelt. - - - -.. _`Countable`: http://www.php.net/~helly/php/ext/spl/interfaceCountable.html diff --git a/docs/languages/de/modules/zend.paginator.configuration.rst b/docs/languages/de/modules/zend.paginator.configuration.rst deleted file mode 100644 index 165252d3b..000000000 --- a/docs/languages/de/modules/zend.paginator.configuration.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. EN-Revision: none -.. _zend.paginator.configuration: - -Konfiguration -============= - -``Zend_Paginator`` hat verschiedene Konfigurationsmethoden die aufgerufen werden können: - -.. _zend.paginator.configuration.table: - -.. table:: Konfigurationsmethoden für Zend_Paginator - - +--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Methode |Beschreibung | - +====================+=========================================================================================================================================================================================================================================================================+ - |setCurrentPageNumber|Setzt die aktuelle Seitennummer (Standardwert 1). | - +--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setItemCountPerPage |Setzt die maximale Anzahl an Einträgen zu auf einer Seite angezeigt werden sollen (Standardwert 10). | - +--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setPageRange |Setzt eine Anzahl an Einträgen die im der Seitenkontrolle angezeigt werden sollen (Standardwert 10). Achtung: Die meiste Zeit wird diese Zahl exakt verwendet, aber Scrolling Styles haben die Option Sie nur als Richtlinie oder Startwert zu verwenden (z.B., Elastic).| - +--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |setView |Setzt die View Instanz für die Bequemlichkeit der Darstellung. | - +--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - diff --git a/docs/languages/de/modules/zend.paginator.introduction.rst b/docs/languages/de/modules/zend.paginator.introduction.rst deleted file mode 100644 index 4ad7e4377..000000000 --- a/docs/languages/de/modules/zend.paginator.introduction.rst +++ /dev/null @@ -1,26 +0,0 @@ -.. EN-Revision: none -.. _zend.paginator.introduction: - -Einführung -========== - -``Zend_Paginator`` ist eine flexible Komponente für die seitenweise Verarbeitung von Sammlungen von Daten und -deren Darstellung zum Benutzer. - -Die primären Designziele von ``Zend_Paginator`` sind wie folgt: - - - - - Seitenweise Verarbeitung jeglicher Daten, nicht nur relationale Datenbanken - - - Nur die Ergebnisse holen die Dargestellt werden sollen - - - Benutzer nicht dazu zwingen nur einen Weg der Anzeige von Daten oder der Darstellung von Seitenweisen - Kontrollen anzuhängen. - - - Lose Kopplung von ``Zend_Paginator`` zu anderen Zend Framework Komponenten damit Benutzer welche es wünschen - Sie auch unabhängig von ``Zend_View``, ``Zend_Db`` usw, verwenden können - - - - diff --git a/docs/languages/de/modules/zend.paginator.usage.rst b/docs/languages/de/modules/zend.paginator.usage.rst deleted file mode 100644 index 90f03fcf4..000000000 --- a/docs/languages/de/modules/zend.paginator.usage.rst +++ /dev/null @@ -1,431 +0,0 @@ -.. EN-Revision: none -.. _zend.paginator.usage: - -Verwendung -========== - -.. _zend.paginator.usage.paginating: - -Seitendarstellung von Datensammlungen -------------------------------------- - -Um Elemente in Seiten darzustellen muß ``Zend_Paginator`` einen generellen Weg des Zugriffs auf diese Daten haben. -Für diesen Zweck, läuft jeder Datenzugriff über Datenquellen Adapter. Verschiedene Adapter werden mit dem Zend -Framework standardmäßig ausgeliefert: - -.. _zend.paginator.usage.paginating.adapters: - -.. table:: Adapter für Zend_Paginator - - +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Adapter |Beschreibung | - +=============+=========================================================================================================================================================================================================+ - |Array |Verwendet ein PHP Array | - +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |DbSelect |Verwendet eine Instanz von Zend\Db\Select, welche ein Array zurückgibt | - +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |DbTableSelect|Verwendet eine Instanz von Zend\Db\Table\Select, welche eine Instanz von Zend\Db\Table\Rowset\Abstract zurückgibt. Das gibt zusätzliche Information pber das Ergebnisset, wie z.B. die Namen der Spalten.| - +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Iterator |Verwendet eine Instanz von Iterator | - +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Null |Zend_Paginator nicht für das Verwalten von seitenweisen Daten verwenden. Man kann trotzdem die Vorteile des Features der Seitenkontrolle verwenden. | - +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - - Statt jede passende Zeile einer gegebenen Abfrage auszuwählen, empfangen die DbSelect und DbTableSelect Adapter - nur die kleinste Anzahl an Daten die für die Darstellung der aktuellen Seite notwendig sind. - - Deswegen wird dynamisch eine zweite Abfrage erzeugt um die komplette Anzahl an passenden Zeilen festzustellen. - Trotzdem ist es möglich die Anzahl oder die Abfrage für die Anzahl selbst direkt zu übergeben. Siehe die - ``setRowCount()`` Methode im DbSelect Adapter für weitere Informationen. - -Um eine Instanz von ``Zend_Paginator`` zu erstellen, muß ein Adapter an den Konstruktor übergeben werden: - -.. code-block:: php - :linenos: - - $paginator = new Zend\Paginator\Paginator(new Zend\Paginator\Adapter\Array($array)); - -Der Einfachheit halber kann man für die mit dem Zend Framework mitgelieferten Adapter die statische ``factory()`` -verwenden: - -.. code-block:: php - :linenos: - - $paginator = Zend\Paginator\Paginator::factory($array); - -.. note:: - - Im Falle des ``NULL`` Adapters, muß dem Konstruktor eine Elementanzahl mitgegeben werden da keine Datensammlung - vorliegt. - -Auch wenn die Instanz in diesem Fall technische zu verwenden ist, muß in der Controller Aktion der -Seitendarstellung mitgeteilt werden welche Seitennummer der Benutzer angefragt hat. Das erlaubt Ihm auf die -seitenweisen Daten zuzugreifen. - -.. code-block:: php - :linenos: - - $paginator->setCurrentPageNumber($page); - -Der einfachste Weg um diesen Wert zu verfolgen ist über eine *URL*. Auch wenn wir empfehlen einen -``Zend\Controller\Router\Interface``-kompatiblen Router zu verwenden um dies zu bewerkstelligen, ist das keine -Notwendigkeit. - -Das folgende ist eine Beispielroute die in einer *INI* Konfigurationsdatei verwendet werden könnte: - -.. code-block:: php - :linenos: - - routes.example.route = articles/:articleName/:page - routes.example.defaults.controller = articles - routes.example.defaults.action = view - routes.example.defaults.page = 1 - routes.example.reqs.articleName = \w+ - routes.example.reqs.page = \d+ - -Mit der obigen Route (und der Verwendung der Zend Framework *MVC* Komponenten), kann die aktuelle Seitenzahl wie -folgt gesetzt werden: - -.. code-block:: php - :linenos: - - $paginator->setCurrentPageNumber($this->_getParam('page')); - -Es sind auch andere Optionen vorhanden; siehe :ref:`Konfiguration ` für zusätzliche -Informationen. - -Schlußendlich muß die Paginator Instanz der View angehängt werden. Wenn ``Zend_View`` mit dem ViewRenderer -Action Helfer verwendet wird, dann funktioniert das folgende: - -.. code-block:: php - :linenos: - - $this->view->paginator = $paginator; - -.. _zend.paginator.usage.dbselect: - -Die Adapter DbSelect und DbTableSelect --------------------------------------- - -Die Verwendung der meisten Adapter ist recht zielgerichtet. Trotzdem benötigen die Datenbank Adapter detailiertere -Erklärungen betreffend dem Empfang und dem Zählen von Daten aus der Datenbank. - -Um die DbSelect und DbTableSelect Adapter zu verwenden muß man die Daten nicht direkt von der Datenbank empfangen. -Beide Adapter führen den Empfang selbst durch, und Zählen auch die Anzahl der Seiten. Wenn zusätzliche Arbeit -basieren auf den Ergebnissen des Adapters getan werden soll, kann die ``getItems()`` Methode des Adapters in der -eigenen Anwendung erweitert werden. - -Zusätzlich holen diese Adapter **nicht** alle Einträge von der Datenbank um sie zu zählen. Stattdessen -manipuliert der Adapter die originale Abfrage um die entsprechende COUNT Abfrage zu erzeugen. Paginator führt dann -diese COUNT Abfrage aus um die Anzahl der Zeilen zu erhalten. Das erfordert eine zusätzliche Beanspruchung der -Datenbank, ist aber um ein vielfaches schneller als das komplette Ergebnisset zu holen und ``count()`` zu -verwenden. Speziell bei einer großen Anzahl an Daten. - -Der Datenbank Adapter versucht die effizienteste Abfrage zu erstellen die auf ziemlich allen modernen Datenbanken -ausgefürt wird. Trotzdem ist es möglich das, abhängig von der eigenen Datenbank oder sogar dem Setup des eigenen -Schemas, ein effizienterer Weg existiert um die Anzahl der Zeilen zu erhalten. Für dieses Szenario erlaubt es der -Datenbank Adapter eine eigene COUNT Abfrage zu setzen. Wenn man zum Beispiel die Anzahl der Blog Posts in einer -eigenen Tabelle speichert, kann eine schnellere Abfrage der Anzahl mit dem folgenden Setup erreicht werden: - -.. code-block:: php - :linenos: - - $adapter = new Zend\Paginator\Adapter\DbSelect($db->select()->from('posts')); - $adapter->setRowCount( - $db->select() - ->from( - 'item_counts', - array( - Zend\Paginator\Adapter\DbSelect::ROW_COUNT_COLUMN => 'post_count' - ) - ) - ); - - $paginator = new Zend\Paginator\Paginator($adapter); - -Dieser Ansatz wird jetzt wahrscheinlich keine große Performance Verbesserung bei kleinen Datemengen und oder -einfachen Abfragen ergeben. Aber bei komplexen Abfragen und großen Datenmengen kann ein ähnlicher Weg eine -signifikante Performance Verbesserung ergeben. - -.. _zend.paginator.rendering: - -Seiten mit View Skripten darstellen ------------------------------------ - -Das View Skript wird verwendet um die Seitenelemente darzustellen (wenn ``Zend_Paginator`` verwendet wird um das zu -tun) und die Seitenkontrollen anzuzeigen. - -Weil ``Zend_Paginator`` Das *SPL* Interface `IteratorAggregate`_ integriert, ist das Durchlaufen von Elementen und -deren Darstellung einfach. - -.. code-block:: php - :linenos: - - - -

Beispiel

- paginator)): ?> -
    - paginator as $item): ?> -
  • - -
- - - paginationControl($this->paginator, - 'Sliding', - 'my_pagination_control.phtml'); ?> - - - -Der Aufruf des View Helfers fast am Ende ist zu beachten. PaginationControl nimmt bis zu vier Parameter: die -Paginator Instanz, einen Scrolling Stil, eine partielle View und ein Array von zusätzlichen Parametern. - -Die zweiten und dritten Parameter sind sehr wichtig. Wobei die partielle View verwendet wird um festzustellen wie -die Seitenkontrollen **aussehen** sollten, und der Scrolling Stil verwendet wird um zu kontrollieren wie er sich -**verhalten** sollte. Angenommen die partielle View ist im Stil einer Suchseiten Kontrolle, wie anbei: - -.. image:: ../images/zend.paginator.usage.rendering.control.png - :align: center - -Was passiert wenn der Benutzer den "next" Link ein paar Mal anklickt? Nun, viele Dinge könnten geschehen. Die -aktuelle Seitennummer könnte in der Mitte stehen wärend man durchklickt (wie Sie es auf Yahoo macht!), oder Sie -könnte bis zum Ende des Seitenbereichs ansteigen und dann auf der linken Seite erscheinen wenn der Benutzer ein -weiteres Mal "next" klickt. Die Seitennummer könnte sogar größer und kleiner werden wärend der Benutzer auf sie -zugreift (oder "scrollt). (wie es auf Google geschieht). - -Es gibt view Scrolling Stile die mit dem Zend Framework geliefert werden: - -.. _zend.paginator.usage.rendering.scrolling-styles: - -.. table:: Scrolling Stile für Zend_Paginator - - +--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Scrolling Stil|Beschreibung | - +==============+=======================================================================================================================================================================================================================+ - |All |Gibt alle Seiten zurück. Das ist für Seitenkontrollen mit Dropdownmenüs nützlich wenn Sie relativ wenig Seiten haben. In diesen Fällen ist es oft gewünscht alle vorhandenen Seiten dem Benutzer auf einmal anzuzeigen.| - +--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Elastic |Eine Google-artiger Scrolling Stil der sich erweitert und verkleinert wenn ein Benutzer durch die Seiten scrollt. | - +--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Jumping |Wenn Benutzer scrollen, steigt die Seitenzahl bis zum Ende eines gegebenen Bereichs, und startet anschließend wieder beim Beginn eines neuen Bereichs. | - +--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |Sliding |Ein Yahoo!-artiger Scrolling Stil der die aktuelle Seitenzahl in der Mitte des Seitenbereichs platziert, oder so nahe wie möglich. Das ist der Standardstil. | - +--------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -Der vierte und letzte Parameter ist reserviert für ein assoziatives Array an zusätzlichen Variablen das in der -partiellen View vorhanden sein sill (über ``$this``). Für Instanzen, können diese Werte extra *URL* Parameter -für Seitendarstellungslinks enthalten. - -Durch das Setzen von einer standardmäßigen partiellen View, einem standardmäßigen Scrolling Stil und einer View -Instanz kann dei Aufruf der PaginationControl komplett eliminiert werden: - -.. code-block:: php - :linenos: - - Zend\Paginator\Paginator::setDefaultScrollingStyle('Sliding'); - Zend\View\Helper\PaginationControl::setDefaultViewPartial( - 'my_pagination_control.phtml' - ); - $paginator->setView($view); - -Wenn alle diese Werte gesetzt sind, kann die Seitenkontrolle im View Skript mit einem einfachen echo Statement -dargestellt werden: - -.. code-block:: php - :linenos: - - paginator; ?> - -.. note:: - - Natürlich ist es möglich ``Zend_Paginator`` mit anderen Template Engines zu verwenden. Mit Smarty zum - Beispiel, würde man das folgendermaßen bewerkstelligen: - - .. code-block:: php - :linenos: - - $smarty->assign('pages', $paginator->getPages()); - - Man könnte die Seitenverte von einem Template wie folgt erhalten: - - .. code-block:: php - :linenos: - - {$pages->pageCount} - -.. _zend.paginator.usage.rendering.example-controls: - -Beispiel der Seitenkontrolle -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Das folgende Beispiel von Seitenkontrollen wird Ihnen hoffentlich helfen um erstmals anzufangen: - -Such-Seitendarstellung - -.. code-block:: php - :linenos: - - - - pageCount): ?> -
- - previous)): ?> - - < Vorher - | - - < Vorher | - - - - pagesInRange as $page): ?> - current): ?> - - - | - - | - - - - - next)): ?> - - Nächster > - - - Nächster > - -
- - -Element Seitendarstellung: - -.. code-block:: php - :linenos: - - - - pageCount): ?> -
- firstItemNumber; ?> - lastItemNumber; ?> - of totalItemCount; ?> - - - previous)): ?> - - First - | - - First | - - - - previous)): ?> - - < Vorheriger - | - - < Vorheriger | - - - - next)): ?> - - Nächster > - | - - Nächster > | - - - - next)): ?> - - Last - - - Last - - -
- - -Dropdown Seitendarstellung: - -.. code-block:: php - :linenos: - - pageCount): ?> - - - - - - -.. _zend.paginator.usage.rendering.properties: - -Tabelle von Eigenschaften -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die folgenden Optionen von für eine Seitenkontrolle bei View Partials vorhanden: - -.. _zend.paginator.usage.rendering.properties.table: - -.. table:: Eigenschaften die bei View Partials vorhanden sind - - +----------------+-------+------------------------------------------------------------------+ - |Eigenschaft |Typ |Beschreibung | - +================+=======+==================================================================+ - |first |integer|Erste Seitennummer (z.B., 1) | - +----------------+-------+------------------------------------------------------------------+ - |firstItemNumber |integer|Absolute Nummer des ersten Elements auf dieser Seite | - +----------------+-------+------------------------------------------------------------------+ - |firstPageInRange|integer|Erste Seite des Bereichs der vom Scrolling Stil zurückgegeben wird| - +----------------+-------+------------------------------------------------------------------+ - |current |integer|Aktuelle Seitenzahl | - +----------------+-------+------------------------------------------------------------------+ - |currentItemCount|integer|Anzahl der Elemente auf dieser Seite | - +----------------+-------+------------------------------------------------------------------+ - |itemCountPerPage|integer|Maximale Anzahl der Elemente die auf jeder Seite vorhanden sind | - +----------------+-------+------------------------------------------------------------------+ - |last |integer|Letzte Seitennummer | - +----------------+-------+------------------------------------------------------------------+ - |lastItemNumber |integer|Absolute Zahl des letzten Elements auf dieser Seite | - +----------------+-------+------------------------------------------------------------------+ - |lastPageInRange |integer|Letzte Seite im Bereich der vom Scrolling Stil zurückgegeben wird | - +----------------+-------+------------------------------------------------------------------+ - |next |integer|Nächste Seitenzahl | - +----------------+-------+------------------------------------------------------------------+ - |pageCount |integer|Anzahl an Seiten | - +----------------+-------+------------------------------------------------------------------+ - |pagesInRange |array |Array von Seiten das vom Scrolling Stil zurückgegeben wird | - +----------------+-------+------------------------------------------------------------------+ - |previous |integer|Vorherige Seitenzahl | - +----------------+-------+------------------------------------------------------------------+ - |totalItemCount |integer|Komplette Anzahl an Elementen | - +----------------+-------+------------------------------------------------------------------+ - - - -.. _`IteratorAggregate`: http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html diff --git a/docs/languages/de/modules/zend.permissions.acl.advanced.rst b/docs/languages/de/modules/zend.permissions.acl.advanced.rst deleted file mode 100644 index b300e784b..000000000 --- a/docs/languages/de/modules/zend.permissions.acl.advanced.rst +++ /dev/null @@ -1,82 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.advanced: - -Fortgeschrittene Verwendung -=========================== - -.. _zend.permissions.acl.advanced.storing: - -Dauerhafte Speicherung von ACL-Daten ------------------------------------- - -``Zend\Permissions\Acl`` wurde so entwickelt, dass keine spezielle Backend Technologie benötigt wird, wie z.B. eine Datenbank -oder ein Cache Server, um die *ACL*-Daten zu speichern. Ihre vollständige *PHP*-Implementation ermöglicht -angepasste Administrationstools, die relativ einfach und flexibel auf ``Zend\Permissions\Acl`` aufbauen. Viele Situationen -erfordern eine interaktive Wartung der *ACL* und ``Zend\Permissions\Acl`` stellt Methoden für das Einrichten und Abfragen der -Zugriffskontrolle einer Anwendung. - -Die Speicherung der *ACL*-Daten ist deshalb die Aufgabe des Entwicklers, da sich die Anwendungsfälle für -verschiedene Situationen erwartungsgemäß stark unterscheiden. Da ``Zend\Permissions\Acl`` serialisierbar ist, können -*ACL*-Objekte mit der *PHP*-Funktion `serialize()`_ serialisiert werden und das Ergebnis kann überall gespeichert -werden, wo es der Entwickler möchte, wie z.B. in einer Datei, in einer Datenbank oder mit einem Cache-Mechanismus. - -.. _zend.permissions.acl.advanced.assertions: - -Schreiben von bedingten ACL-Regeln mit Zusicherungen ----------------------------------------------------- - -Manchmal soll eine Regel für das Erlauben oder Verbieten des Zugriffs auf eine Ressource nicht absolut sein, -sondern von verschiedenen Kriterien abhängen. Nehmen wir zum Beispiel an, dass ein bestimmter Zugriff erlaubt sei, -aber nur zwischen 08:00 und 17:00 Uhr. Ein anderes Beispiel könnte sein, dass der Zugriff verboten wird, weil eine -Anfrage von einer bestimmten IP-Adresse kommt, die als Missbrauchsquelle markiert worden ist. ``Zend\Permissions\Acl`` bietet -eine eingebaute Unterstützung für die Implementierung von Regeln, die auf Bedingungen basieren, die der -Entwickler benötigt. - -``Zend\Permissions\Acl`` bietet Unterstützung für bedingte Regeln mit dem ``Zend\Permissions\Acl\Assert\AssertInterface``. Um das -Regelzusicherungsinterface benutzen zu können, schreibt der Entwickler eine Klasse, welche die Methode -``assert()`` des Interfaces implementiert: - -.. code-block:: php - :linenos: - - class CleanIPAssertion implements Zend\Permissions\Acl\Assert\AssertInterface - { - public function assert(Zend\Permissions\Acl $acl, - Zend\Permissions\Acl\Role\RoleInterface $role = null, - Zend\Permissions\Acl\Resource\ResourceInterface $resource = null, - $privilege = null) - { - return $this->_isCleanIP($_SERVER['REMOTE_ADDR']); - } - - protected function _isCleanIP($ip) - { - // ... - } - } - -Sobald eine Zusicherungsklasse verfügbar ist, muss der Entwickler eine Instanz dieser Zusicherungsklasse bei der -Zuordnung bedingter Regeln übergeben. Eine Regel, die mit einer Zusicherung angelegt wird, wird nur angewendet, -wenn die Zusicherungsmethode ``TRUE`` zurück gibt. - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - $acl->allow(null, null, null, new CleanIPAssertion()); - -Der obige Code legt eine bedingte Erlaubnisregel an, die den Zugriff für alle Rechte auf alles und von jedem -erlaubt, außer wenn die anfordernde IP auf einer "Blacklist" ist. Wenn die Anfrage von einer IP kommt, die nicht -als "sauber" betrachtet wird, wird die Erlaubnisregel nicht angewandt. Da die Regel auf alle Rollen, alle -Ressourcen und alle Rechte zutrifft, würde eine "unsaubere" IP zu einem Zugriffsverbot führen. Dies ist ein -besonderer Fall und es sollte verstanden werden, dass in allen anderen Fällen (d.h. wenn eine spezielle Rolle, -Ressource oder Recht für die Regel spezifiziert wird) eine fehlerhafte Zusicherung dazu führt, dass die Regel -nicht angewandt wird und andere Regeln verwendet werden um zu ermitteln, ob der Zugriff erlaubt oder verboten ist. - -Der Methode ``assert()`` eines Zusicherungsobjektes werden die *ACL*, Rolle, Ressource und die Rechte übergeben, -auf welche die Autorisierungsabfrage (d.h., ``isAllowed()``) passt, um den Kontext für die Zusicherungsklasse -bereit zu stellen, um die Bedingungen zu ermitteln wo erforderlich. - - - -.. _`serialize()`: http://php.net/serialize diff --git a/docs/languages/de/modules/zend.permissions.acl.intro.rst b/docs/languages/de/modules/zend.permissions.acl.intro.rst deleted file mode 100644 index e60383e21..000000000 --- a/docs/languages/de/modules/zend.permissions.acl.intro.rst +++ /dev/null @@ -1,293 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.introduction: - -Einführung -========== - -``Zend\Permissions\Acl`` stellt eine Implementation von leichtgewichtigen und flexiblen Zugriffskontrolllisten (englisch -"access control list", *ACL*) für die Rechteverwaltung bereit. Im Allgemeinen kann eine Anwendung derartige *ACL*\ -s verwenden, um den Zugriff auf bestimmte, geschützte Objekte durch andere anfordernde Objekte zu kontrollieren. - -In dieser Dokumentation: - -- ist eine **Ressource** ein Objekt, auf das der Zugriff kontrolliert wird. - -- ist eine **Rolle** ein Objekt, das den Zugriff auf eine Ressource anfordern kann. - -Einfach ausgedrückt **fordern Rollen den Zugriff auf Ressourcen an**. Wenn z.B. ein Parkplatzwächter den Zugriff -auf ein Auto anfordert, ist der Parkplatzwächter die anfordernde Rolle und das Auto die Ressource, weil der -Zugriff auf das Auto nicht jedem erlaubt ist. - -Durch die Spezifikation und die Verwendung einer *ACL* kann eine Anwendung kontrollieren, wie Rollen den Zugriff -auf Ressourcen eingeräumt bekommen. - -.. _zend.permissions.acl.introduction.resources: - -Ressourcen ----------- - -Das Erstellen einer Ressource ist in ``Zend\Permissions\Acl`` sehr einfach. ``Zend\Permissions\Acl`` stellt die Ressource -``Zend\Permissions\Acl\Resource\ResourceInterface`` bereit, um das Erstellen von Ressourcen in Anwendungen zu ermöglichen. Eine Klasse -muss nur dieses Interface implementieren, das nur aus einer einzelnen Methode, ``getResourceId()``, besteht, damit -``Zend\Permissions\Acl`` das Objekt als Ressource erkennen kann. Zusätzlich ist ``Zend\Permissions\Acl\Resource`` in ``Zend\Permissions\Acl`` als -einfache Ressourcen-Implementation enthalten, damit Entwickler sie wenn nötig erweitern können. - -``Zend\Permissions\Acl`` stellt eine Baumstruktur bereit, in die mehrere Ressourcen aufgenommen werden können. Weil Ressourcen -in solch einer Baumstruktur abgelegt werden, können sie vom Allgemeinen (von der Baumwurzel) bis zum Speziellen -(zu den Baumblättern) organisiert werden. Abfragen auf einer bestimmten Ressource durchsuchen automatisch die -Ressourcenhierarchie nach Regeln, die einer übergeordneten Ressource zugeordnet wurden, um die einfache Vererbung -von Regeln zu ermöglichen. Wenn zum Beispiel eine Standardregel für jedes Gebäude einer Stadt gelten soll, -würde man diese Regel einfach der Stadt zuordnen, anstatt die selbe Regel jedem Gebäude zuzuordnen. Einige -Gebäude können dennoch Ausnahmen zu solch einer Regel erfordern, und dies kann in ``Zend\Permissions\Acl`` einfach durch die -Zuordnung solcher Ausnahmeregeln zu jedem der Gebäude erreicht werden, die eine Ausnahme erfordern. Eine Ressource -kann nur von einer einzigen übergeordneten Ressource erben, obwohl diese übergeordnete Ressource ihre eigenen -übergeordneten Ressourcen haben kann, und so weiter. - -``Zend\Permissions\Acl`` unterstützt außerdem Rechte auf Ressourcen (z.B. "erstellen", "lesen", "aktualisieren", "löschen") -damit der Entwickler Regeln zuordnen kann, die alle Rechte oder bestimmte Rechte von einer oder mehreren Ressourcen -beeinflussen. - -.. _zend.permissions.acl.introduction.roles: - -Rollen ------- - -Wie bei den Ressourcen ist auch das Erstellen einer Rolle sehr einfach. Alle Rollen müssen -``Zend\Permissions\Acl\Role\RoleInterface`` implementieren. Dieses Interface besteht aus einer einzelnen Methode, ``getRoleId()``, -zusätzlich wird ``Zend\Permissions\Acl\GenericRole`` von ``Zend\Permissions\Acl`` als einfache Rollen Implementation angeboten, damit Entwickler -sie bei Bedarf erweitern können. - -In ``Zend\Permissions\Acl`` kann eine Rolle von einer oder mehreren Rollen erben. Dies soll die Vererbung von Regeln zwischen -den Rollen ermöglichen. Zum Beispiel kann eine Benutzerrolle, wie "Sally" zu einer oder mehreren übergeordneten -Rollen gehören, wie "Editor" und "Administrator". Der Entwickler kann zu "Editor" und "Administrator" getrennt -Regeln zuordnen und "Sally" würde diese Regeln von beiden erben, ohne dass "Sally" direkt Regeln zugeordnet werden -müssen. - -Auch wenn die Möglichkeit der Vererbung von verschiedenen Rollen sehr nützlich ist, führt die mehrfache -Vererbung auch einen gewissen Grad an Komplexität ein. Das folgende Beispiel illustriert die mehrdeutigen -Bedingungen und wie ``Zend\Permissions\Acl`` sie auflöst. - -.. _zend.permissions.acl.introduction.roles.example.multiple_inheritance: - -.. rubric:: Mehrfache Vererbung zwischen Rollen - -Der folgende Code definiert drei Basisrollen - "guest", "member" und "admin" - von denen andere Rollen erben -können. Dann wird eine Rolle "someUser" eingerichtet, die von den drei anderen Rollen erbt. Die Reihenfolge, in -der diese Rollen im ``$parents`` Array erscheinen, ist wichtig. Wenn notwendig, sucht ``Zend\Permissions\Acl`` nach -Zugriffsregeln nicht nur für die abgefragte Rolle (hier "someUser"), sondern auch für die Rollen, von denen die -abgefragte Rolle erbt (hier "guest", "member" und "admin"): - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('guest')) - ->addRole(new Zend\Permissions\Acl\Role\GenericRole('member')) - ->addRole(new Zend\Permissions\Acl\Role\GenericRole('admin')); - - $parents = array('guest', 'member', 'admin'); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('someUser'), $parents); - - $acl->add(new Zend\Permissions\Acl\Resource\GenericResource('someResource')); - - $acl->deny('guest', 'someResource'); - $acl->allow('member', 'someResource'); - - echo $acl->isAllowed('someUser', 'someResource') ? 'allowed' : 'denied'; - -Da keine Regel speziell für die Rolle "someUser" und "someResource" definiert wurde, muss ``Zend\Permissions\Acl`` nach Regeln -suchen, die für Rollen definiert wurden, von denen "someUser" erbt. Zuerst wird die "admin"-Rolle besucht, aber -dort ist keine Zugriffsregel definiert. Als nächste wird die "member"-Rolle besucht und ``Zend\Permissions\Acl`` findet hier -eine Regel, die angibt, dass "member" der Zugriff auf "someResource" erlaubt ist. - -Wenn ``Zend\Permissions\Acl`` fortfahren würde, die für weitere übergeordnete Rollen definierten Regeln zu untersuchen, -würde herausgefunden werden, dass "guest" der Zugriff auf "someResource" verboten ist. Diese Tatsache führt eine -Mehrdeutigkeit ein, weil nun "someUser" der Zugriff auf "someResource" sowohl verboten als auch erlaubt ist, -aufgrund der vererbten Regeln von verschiedenen übergeordnete Rollen, die miteinander im Konflikt stehen. - -``Zend\Permissions\Acl`` löst diese Mehrdeutigkeit dadurch auf, dass eine Abfrage beendet wird, wenn die erste Regel gefunden -wird, die direkt auf die Abfrage passt. In diesem Fall würde der Beispiel Code "allowed" ausgeben, weil die -"member"-Rolle vor der "guest"-Rolle untersucht wird. - -.. note:: - - Wenn man mehrere übergeordnete Rollen angibt, sollte man beachten, dass die zuletzt gelistete Rolle als erstes - nach Regeln durchsucht wird, die auf die Autorisierungsabfrage passen. - -.. _zend.permissions.acl.introduction.creating: - -Erstellen einer Zugriffskontrollliste -------------------------------------- - -Eine Zugriffskontrollliste (*ACL*) kann jeden gewünschten Satz von körperlichen oder virtuellen Objekten -repräsentieren. Zu Demonstrationszwecken werden wir eine grundlegende *ACL* für ein Redaktionssystem (*CMS*) -erstellen, die mehrere Schichten von Gruppen über eine Vielzahl von Bereichen verwaltet soll. Um ein *ACL*-Objekt -zu erstellen, instanzieren wir die *ACL* ohne Parameter: - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - -.. note:: - - Solange der Entwickler keine "allow"-Regel spezifiziert, verweigert ``Zend\Permissions\Acl`` den Zugriff auf jegliche Rechte - für jede Ressource durch jede Rolle. - -.. _zend.permissions.acl.introduction.role_registry: - -Rollen registrieren -------------------- - -*CMS* brauchen fast immer eine Hierarchie von Genehmigungen, um die Autorenfähigkeiten seiner Benutzer -festzulegen. Es kann eine 'Guest'-Gruppe geben, um beschränkten Zugriff zur Demonstration zu ermöglichen, eine -'Staff'-Gruppe für die Mehrheit der *CMS* Nutzer, welche die meisten der alltäglichen Aufgaben erledigen, eine -'Editor'-Gruppe für diejenigen, die für das Veröffentlichen, Überprüfen, Archivieren und Löschen von Inhalten -zuständig sind, sowie eine 'Administrator'-Gruppe, dessen Aufgaben alle der anderen Gruppen sowie die Pflege -sensibler Informationen, die Benutzerverwaltung, die Backend-Konfigurationsdaten, die Datensicherung und den Export -beinhalten. Diese Genehmigungen können durch eine Rollenregistrierung repräsentiert werden, die es jeder Gruppe -erlaubt, die Rechte von 'übergeordneten' Gruppen zu erben sowie eindeutige Rechte nur für deren Gruppe bereit zu -stellen. Diese Genehmigungen können wie folgt ausgedrückt werden: - -.. _zend.permissions.acl.introduction.role_registry.table.example_cms_access_controls: - -.. table:: Zugangsbeschränkung für ein Beispiel-CMS - - +-------------+------------------------------------+----------------------+ - |Name |Eindeutige Genehmigung |Erbe Genehmigungen von| - +=============+====================================+======================+ - |Guest |View |N/A | - +-------------+------------------------------------+----------------------+ - |Staff |Edit, Submit, Revise |Guest | - +-------------+------------------------------------+----------------------+ - |Editor |Publish, Archive, Delete |Staff | - +-------------+------------------------------------+----------------------+ - |Administrator|(bekommt kompletten Zugriff gewährt)|N/A | - +-------------+------------------------------------+----------------------+ - -Für dieses Beispiel wird ``Zend\Permissions\Acl\GenericRole`` verwendet, aber jedes Objekt wird akzeptiert, das -``Zend\Permissions\Acl\Role\RoleInterface`` implementiert. Diese Gruppen können zur Rollenregistrierung wie folgt hinzugefügt -werden: - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - - // Fügt Gruppen zur Rollenregistrierung hinzu unter Verwendung von Zend\Permissions\Acl\Role - // Gast erbt keine Zugriffsrechte - $roleGuest = new Zend\Permissions\Acl\Role\GenericRole('guest'); - $acl->addRole($roleGuest); - - // Mitarbeiter erbt von Gast - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('staff'), $roleGuest); - - /* - Alternativ kann das obige wie folgt geschrieben werden: - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('staff'), 'guest'); - */ - - // Redakteur erbt von Mitarbeiter - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('editor'), 'staff'); - - // Administrator erbt keine Zugriffsrechte - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('administrator')); - -.. _zend.permissions.acl.introduction.defining: - -Zugangsbeschränkung definieren ------------------------------- - -Nun, da die *ACL* die relevanten Rollen enthält, können Regeln eingerichtet werden, die definieren, wie auf -Ressourcen durch Rollen zugegriffen werden darf. Es ist zu beachten, dass wir keine bestimmten Ressourcen in diesem -Beispiel definiert haben, das vereinfacht wurde, um zu illustrieren, dass die Regeln für alle Ressourcen gelten. -``Zend\Permissions\Acl`` stellt eine Implementation bereit, bei der Regeln nur vom Allgemeinen zum Speziellen definiert werden -müssen, um die Anzahl der benötigten Regeln zu minimieren, weil Ressourcen und Rollen die Regeln erben, die in -ihren Vorfahren definiert worden sind. - -.. note:: - - Generell wendet ``Zend\Permissions\Acl`` eine angegebene Regel dann und nur dann an, wenn eine speziellere Regel nicht - passt. - -Folglich können wir einen einigermaßen komplexen Regelsatz mit sehr wenig Code definieren. Um die grundlegenden -Genehmigungen von oben anzugeben: - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - - $roleGuest = new Zend\Permissions\Acl\Role\GenericRole('guest'); - $acl->addRole($roleGuest); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('staff'), $roleGuest); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('editor'), 'staff'); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('administrator')); - - // Gäste dürfen Inhalte nur sehen - $acl->allow($roleGuest, null, 'view'); - - /* - Alternativ kann das obige wie folgt geschrieben werden: - $acl->allow('guest', null, 'view'); - */ - - // Mitarbeiter erbt 'ansehen' Rechte von Gast, benötigt aber zusätzliche Rechte - $acl->allow('staff', null, array('edit', 'submit', 'revise')); - - // Redakteuer erbt 'ansehen', 'bearbeiten', 'absenden' und die 'revidieren' - // Rechte vom Mitarbeiter, benötigt aber zusätzliche Rechte - $acl->allow('editor', null, array('publish', 'archive', 'delete')); - - // Administrator erbt gar nichts, aber erhält alle Rechte - $acl->allow('administrator'); - -Die ``NULL``-Werte in obigen ``allow()``-Aufrufen werden verwendet, um anzugeben, dass diese Regeln für alle -Ressourcen gelten. - -.. _zend.permissions.acl.introduction.querying: - -Abfragen einer ACL ------------------- - -Wir haben nun eine flexible *ACL*, die in der gesamten Anwendung verwendet werden kann, um zu ermitteln, ob -Anfragende die Genehmigung haben, Funktionen auszuführen. Abfragen durchzuführen ist recht einfach mit Hilfe der -``isAllowed()``-Methode: - -.. code-block:: php - :linenos: - - echo $acl->isAllowed('guest', null, 'view') ? - "allowed" : "denied"; - // erlaubt - - echo $acl->isAllowed('staff', null, 'publish') ? - "allowed" : "denied"; - // verweigert - - echo $acl->isAllowed('staff', null, 'revise') ? - "allowed" : "denied"; - // erlaubt - - echo $acl->isAllowed('editor', null, 'view') ? - "allowed" : "denied"; - // erlaubt wegen der Vererbung von Gast - - echo $acl->isAllowed('editor', null, 'update') ? - "allowed" : "denied"; - // verweigert, weil es keine erlaubte Regel für 'update' gibt - - echo $acl->isAllowed('administrator', null, 'view') ? - "allowed" : "denied"; - // erlaubt, weil Administrator alle Rechte haben - - echo $acl->isAllowed('administrator') ? - "allowed" : "denied"; - // erlaubt, weil Administrator alle Rechte haben - - echo $acl->isAllowed('administrator', null, 'update') ? - "allowed" : "denied"; - // erlaubt, weil Administrator alle Rechte haben - - diff --git a/docs/languages/de/modules/zend.permissions.acl.refining.rst b/docs/languages/de/modules/zend.permissions.acl.refining.rst deleted file mode 100644 index 3af75d92a..000000000 --- a/docs/languages/de/modules/zend.permissions.acl.refining.rst +++ /dev/null @@ -1,168 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.refining: - -Verfeinern der Zugriffskontrolle -================================ - -.. _zend.permissions.acl.refining.precise: - -Präzise Zugangsbeschränkung ---------------------------- - -Die grundlegende *ACL*, wie sie im :ref:`vorherigen Kapitel ` definiert ist, zeigt wie -verschiedene Rechte für die gesamte *ACL* (alle Ressourcen) vergeben werden können. In der Praxis tendieren -Zugangsbeschränkungen jedoch eher dahin, Ausnahmen und verschiedene Stufen von Komplexität zu haben. ``Zend\Permissions\Acl`` -erlaubt einem, diese Verfeinerungen auf einfache und flexible Weise zu bewerkstelligen. - -Für das Beispiel *CMS* wurde ermittelt, dass während die Gruppe 'staff' die Bedürfnisse der überwiegenden -Mehrheit der Benutzer abdeckt, es den Bedarf für eine neue Gruppe 'marketing' gibt, die Zugriff auf den Newsletter -und die neuesten Nachrichten im *CMS* benötigen. Die Gruppe ist ziemlich unabhängig und wird die Möglichkeit -haben, sowohl Newsletter als auch die neuesten Nachrichten zu veröffentlichen und zu archivieren. - -Zusätzlich wurde angefordert, dass es der Gruppe 'staff' erlaubt sein soll, die Nachrichten ansehen, aber nicht -die neuesten Nachrichten überarbeiten zu können. Letztendlich soll es für jeden (Administratoren eingeschlossen) -unmöglich sein, irgend eine Bekanntmachung zu archivieren, da diese sowieso nur eine Lebensdauer von 1 bis 2 Tagen -haben. - -Zuerst überarbeiten wir die Rollenregistrierung, um die Änderungen wider zu spiegeln. Wir haben ermittelt, dass -die Gruppe 'marketing' dieselben grundlegenden Rechte wie 'staff' hat, also definieren wir 'marketing' so, dass die -Genehmigungen von 'staff' geerbt werden: - -.. code-block:: php - :linenos: - - // Die neue Gruppe Marketing erbt Genehmigungen der Mitarbeiter - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('marketing'), 'staff'); - -Als nächstes ist zu beachten, dass sich die obige Zugangsbeschränkung auf bestimmte Ressourcen bezieht (z.B. -"newsletter", "lastest news", "announcement news"). Nun fügen wir die Ressourcen hinzu: - -.. code-block:: php - :linenos: - - // Ressourcen für die Regeln erstellen - - // Newsletter - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('newsletter')); - - // Nachrichten - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('news')); - - // Neueste Nachrichten - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('latest'), 'news'); - - // Bekanntmachungen - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('announcement'), 'news'); - -Nun ist es nur eine Frage der Definition für diese spezifischeren Regeln auf die Zielbereiche der *ACL*: - -.. code-block:: php - :linenos: - - // Marketing muss Newsletter und die neuesten Nachrichten veröffentlichen - // und archivieren können - $acl->allow('marketing', - array('newsletter', 'latest'), - array('publish', 'archive')); - - // Staff (und Marketing durch die Vererbung), wird die Erlaubnis verweigert, - // die neuesten Nachrichten überarbeiten zu können - $acl->deny('staff', 'latest', 'revise'); - - // Jedem (inklusive der Administratoren) wird die Erlaubnis verweigert, - // Bekanntmachungsnachricht zu archivieren - $acl->deny(null, 'announcement', 'archive'); - -Wir können nun die *ACL* hinsichtlich der letzten Änderungen abfragen: - -.. code-block:: php - :linenos: - - echo $acl->isAllowed('staff', 'newsletter', 'publish') ? - "allowed" : "denied"; - // verweigert - - echo $acl->isAllowed('marketing', 'newsletter', 'publish') ? - "allowed" : "denied"; - // erlaubt - - echo $acl->isAllowed('staff', 'latest', 'publish') ? - "allowed" : "denied"; - // verweigert - - echo $acl->isAllowed('marketing', 'latest', 'publish') ? - "allowed" : "denied"; - // erlaubt - - echo $acl->isAllowed('marketing', 'latest', 'archive') ? - "allowed" : "denied"; - // erlaubt - - echo $acl->isAllowed('marketing', 'latest', 'revise') ? - "allowed" : "denied"; - // verweigert - - echo $acl->isAllowed('editor', 'announcement', 'archive') ? - "allowed" : "denied"; - // verweigert - - echo $acl->isAllowed('administrator', 'announcement', 'archive') ? - "allowed" : "denied"; - // verweigert - -.. _zend.permissions.acl.refining.removing: - -Zugangsbeschränkungen entfernen -------------------------------- - -Um eine oder mehrere Zugangsregel von der *ACL* zu entfernen, verwendet man einfach die vorhandenen Methoden -``removeAllow()`` oder ``removeDeny()``. Wie bei ``allow()`` und ``deny()`` kann man den ``NULL`` Wert übergeben, -um die Anwendung auf alle Rollen, Ressourcen und / oder Rechte anzuzeigen: - -.. code-block:: php - :linenos: - - // Entferne die Verweigerung, die letzten Nachrichten zu überarbeiten für - // die Mitarbeiter (und Marketing durch die Vererbung) - $acl->removeDeny('staff', 'latest', 'revise'); - - echo $acl->isAllowed('marketing', 'latest', 'revise') ? - "allowed" : "denied"; - // erlaubt - - // Entferne die Erlaubnis für das Marketing, Newsletter veröffentlichen und - // archivieren zu können - $acl->removeAllow('marketing', - 'newsletter', - array('publish', 'archive')); - - echo $acl->isAllowed('marketing', 'newsletter', 'publish') ? - "allowed" : "denied"; - // verweigert - - echo $acl->isAllowed('marketing', 'newsletter', 'archive') ? - "allowed" : "denied"; - // verweigert - -Rechte können schrittweise wie oben angezeigt verändert werden, aber ein ``NULL``-Wert für die Rechte -überschreibt solche schrittweisen Änderungen: - -.. code-block:: php - :linenos: - - // Erlaube dem Marketing alle Rechte für die neuesten Nachrichten - $acl->allow('marketing', 'latest'); - - echo $acl->isAllowed('marketing', 'latest', 'publish') ? - "allowed" : "denied"; - // erlaubt - - echo $acl->isAllowed('marketing', 'latest', 'archive') ? - "allowed" : "denied"; - // erlaubt - - echo $acl->isAllowed('marketing', 'latest', 'anything') ? - "allowed" : "denied"; - // erlaubt - - diff --git a/docs/languages/de/modules/zend.progress-bar.adapter.console.rst b/docs/languages/de/modules/zend.progress-bar.adapter.console.rst deleted file mode 100644 index 6a165748c..000000000 --- a/docs/languages/de/modules/zend.progress-bar.adapter.console.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.adapter.console: - -Zend\ProgressBar\Adapter\Console -================================ - -``Zend\ProgressBar\Adapter\Console`` ist ein Textbasierter Adapter für Terminals. Er kann automatisch die -Terminalbreite erkennen unterstützt aber auch eigene Breiten. Kann kann definieren welche Elemente mit dem -Fortschrittsbalken angezeigt werden und auch deren Reihenfolge ändern. Man kann auch den Stil des -Fortschrittsbalkens selbst definieren. - -.. note:: - - **Automatische Breitenerkennung der Konsole** - - *shell_exec* wird benötigt damit dieses Feature auf \*nix basierenden Systemen funktioniert. Auf Windows, ist - die Terminalbreite immer auf 80 Zeichen begrenzt, sodas dort keine Erkennung notwendig ist. - -Man kann auch die Optionen des Adapters entweder über die *set** Methoden oder durch die Übergabe eines Arrays, -oder einer Instanz von ``Zend_Config``, an den Constructor mit dem Optionen als ersten Parameter. Die möglichen -Optionen sind: - -- *outputStream*: Ein anderer Ausgabe-Stream wenn man nicht auf STDOUT streamen will. Kann jeder andere Stream wie - *php://stderr* oder ein Pfad zu einer Datei sein. - -- *width*: Entweder ein Integer oder die Konstante ``AUTO`` von ``Zend\Console\ProgressBar``. - -- *elements*: Entweder ``NULL`` für Standard oder ein Array mit zumindest einer der folgenden Konstanten von - ``Zend\Console\ProgressBar`` als Wert: - - - ``ELEMENT_PERCENT``: Der aktuelle Wert in Prozent. - - - ``ELEMENT_BAR``: Die sichtbare Begrenzung welche den Prozentwert anzeigt. - - - ``ELEMENT_ETA``: Die automatisch berechnete ETA. Das Element wird zuerst nach fünf Sekunden angezeigt, weil es - wärend dieser Zeit nicht möglich ist korrekte Ergebnisse zu berechnen. - - - ``ELEMENT_TEXT``: Eine optionale Statusmeldung über den aktuelle Fortschritt. - -- *textWidth*: Breite in Zeichen des ``ELEMENT_TEXT`` Elements. Standard ist 20. - -- *charset*: Zeichensatz des ``ELEMENT_TEXT`` Elements. Standardwert ist utf-8. - -- *barLeftChar*: Ein String der auf der linken Seite des Zeigers des Fortschrittsbalkens verwendet wird. - -- *barRightChar*: Ein String der auf der rechten Seite des Zeigers des Fortschrittsbalkens verwendet wird. - -- *barIndicatorChar*: Ein String der für den Zeiger des Fortschrittsbalkens verwendet wird. Er kann auch leer - sein. - - diff --git a/docs/languages/de/modules/zend.progress-bar.adapter.js-pull.rst b/docs/languages/de/modules/zend.progress-bar.adapter.js-pull.rst deleted file mode 100644 index 28d10d9b8..000000000 --- a/docs/languages/de/modules/zend.progress-bar.adapter.js-pull.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.adapter.jspull: - -Zend\ProgressBar\Adapter\JsPull -=============================== - -``Zend\ProgressBar\Adapter\JsPull`` ist das Gegenteil von jsPush, da es ein Holen für neue Updates benötigt, -statt die Updates zum Browser zu schicken. Generell sollte man den Adapter mit der Persistenz Option auf -``Zend_ProgressBar`` verwenden. Bei der Benachrichtigung sendet der Adapter einen *JSON* String zum Browser, der -exakt wie der JSON String aussieht der vom jsPush Adapter gesendet wird. Der einzige Unterschied ist, das er einen -zusätzlichen Parameter ``finished`` enthält, der entweder ``FALSE`` ist, wenn ``update()`` aufgerufen wurde, oder -``TRUE`` wenn ``finish()`` aufgerufen wurde. - -Die Adapteroptionen kann man entweder über die ``set*()`` Methoden oder durch die Übergabe eines Arrays oder -einer Instanz von ``Zend_Config`` mit den Optionen als ersten Parameter an den Constructor setzen. Die vorhandenen -Optionen sind: - -- ``exitAfterSend``: Beendet die aktuelle Anfrage nachdem die Daten an den Browser gesendet wurden. Der - Standardwert ist ``TRUE``. - - diff --git a/docs/languages/de/modules/zend.progress-bar.adapter.js-push.rst b/docs/languages/de/modules/zend.progress-bar.adapter.js-push.rst deleted file mode 100644 index 6417e636b..000000000 --- a/docs/languages/de/modules/zend.progress-bar.adapter.js-push.rst +++ /dev/null @@ -1,115 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.adapter.jspush: - -Zend\ProgressBar\Adapter\JsPush -=============================== - -``Zend\ProgressBar\Adapter\JsPush`` ist ein Adapter der es erlaubt den Fortschrittsbalken in einem Browser über -Javascript Push zu aktualisieren. Das bedeutet das keine zweite Verbindung benötigt wird um den Status über den -aktuell laufenden Prozess zu erhalten, sondern das der Prozess selbst seinen Status direkt an den Browser schickt. - -Man kann auch die Optionen des Adapters entweder über die *set** Methoden oder durch die Übergabe eines Arrays, -oder einer Instanz von ``Zend_Config``, an den Constructor mit dem Optionen als ersten Parameter. Die möglichen -Optionen sind: - -- *updateMethodName*: Die Javascript Methode die bei jeder Aktualisierung aufgerufen werden soll. Standardwert ist - ``Zend\ProgressBar\Update``. - -- *finishMethodName*: Die Javascript Methode die aufgerufen werden soll wenn der Beendet-Status gesetzt wurde. Der - Standardwert ist ``NULL``, was bedeutet das nichts passiert. - -Die Verwendung dieses Adapters ist recht einfach. Zuerst wird ein Fortschrittsbalken im Browser erstellt, entweder -mit JavaScript oder mit vorher erstelltem reinen *HTML*. Dann definiert man die Update Methode und optional die -Finish Methode in JavaScript, die beide ein Json Objekt als einziges Argument nehmen. Das wird die Webseite mit -einem lange laufenden Prozess, in einem versteckten *iframe* oder *object* Tag, aufgerufen. Wärend der Prozess -läuft wird der Adapter die Update Methode bei jedem Update mit einem Json Objekt aufgerufen, das die folgenden -Parameter enthält: - -- *current*: Der aktuelle absolute Wert - -- *max*: Der maximale absolute Wert - -- *percent*: Der berechnete Prozentwert - -- *timeTaken*: Die Zeit die der Prozess bis jetzt gelaufen ist - -- *timeRemaining*: Die erwartete Zeit bis der Prozess beendet ist - -- *text*: Die optionale Statusmeldung, wenn angegeben - -.. _zend.progressbar-adapter.jspush.example: - -.. rubric:: Grundsätzliches Beispiel für den Client-seitigen Teil - -Dieses Beispiel zeigt ein grundsätzliches Setup von *HTML*, *CSS* und JavaScript für den JsPush Adapter - -.. code-block:: html - :linenos: - -
-
-
- - - -.. code-block:: css - :linenos: - - #long-running-process { - position: absolute; - left: -100px; - top: -100px; - - width: 1px; - height: 1px; - } - - #zend-progressbar-container { - width: 100px; - height: 30px; - - border: 1px solid #000000; - background-color: #ffffff; - } - - #zend-progressbar-done { - width: 0; - height: 30px; - - background-color: #000000; - } - -.. code-block:: javascript - :linenos: - - function Zend\ProgressBar\Update(data) - { - document.getElementById('zend-progressbar-done').style.width = - data.percent + '%'; - } - -Das erstellt einen einfachen Container mit einem schwarzen Rand und einem Block der den aktuellen Prozess anzeigt. -Man sollte den *iframe* oder *object* nicht mit *display: none;* verstecken, da einige Browser wie Safari 2 den -aktuellen Inhalt dann nicht laden. - -Statt einen eigenen Fortschrittsbalken zu erstellen, kann es gewünscht sein einen von einer vorhandenen Bibliothek -wir Dojo, jQuery usw zu verwenden. Es gibt zum Beispiel: - -- Dojo: http://dojotoolkit.org/reference-guide/dijit/ProgressBar.html - -- jQuery: https://api.jqueryui.com/progressbar/ - -- MooTools: http://davidwalsh.name/dw-content/progress-bar.php - -- Prototype: http://livepipe.net/control/progressbar - -.. note:: - - **Intervall der Updates** - - Man sollte davon Abstand nehmen zuviele Updates zu senden, da jedes Update eine Mindestgröße von 1kb hat. Das - ist eine Notwendigkeit für den Safari Browser um den Funktionsaufruf darzustellen und auszuführen. Der - Internet Explorer hat eine ähnliche Einschränkung von 256 Bytes. - - - diff --git a/docs/languages/de/modules/zend.progress-bar.rst b/docs/languages/de/modules/zend.progress-bar.rst deleted file mode 100644 index 435477a11..000000000 --- a/docs/languages/de/modules/zend.progress-bar.rst +++ /dev/null @@ -1,78 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.introduction: - -Zend_ProgressBar -================ - -.. _zend.progressbar.whatisit: - -Einführung ----------- - -``Zend_ProgressBar`` ist eine Komponente um Fortschrittsbalken in verschiedenen Umgebungen zu erstellen und zu -aktualisieren. Sie besteht aus einem einzelnen Backend, welches des Fortschritt durch eines der verschiedenen -Backends ausgibt. Bei jedem Update nimmt es einen absoluten Wert und optional eine Statusmeldung und ruft dann den -Adapter mit einigen vorkalkulierten Werten, wie Prozentwerte und voraussichtliche Restzeit, auf. - -.. _zend.progressbar.basic: - -Grundsätzliche Verwendung von Zend_Progressbar ----------------------------------------------- - -``Zend_ProgressBar`` ist sehr einfach in seiner Verwendung. Man erstellt einfach eine neue Instanz von -``Zend_Progressbar``, definiert einen minimalen und einen maximalan Wert, und wählt den Adapter der die Daten -ausgibt. Wenn man die Datei ausführen will, muß man etwas ähnliches wie folgt machen: - -.. code-block:: php - :linenos: - - $progressBar = new Zend\ProgressBar\ProgressBar($adapter, 0, $fileSize); - - while (!feof($fp)) { - // Mach was - - $progressBar->update($currentByteCount); - } - - $progressBar->finish(); - -Im ersten Schritt, wird eine Instanz von ``Zend_ProgressBar`` erstellt, mit einem speziellen Adapter, einem -minimalen Wert von 0 und einem maximalen Wert der kompletten Dateigröße. Dann wird die Datei ausgeführt und bei -jeder Schleife wird der Fortschrittsbalken mit der aktuellen Byteanzahl aktualisiert. Am Ende der Schleife, wird -der Status des Fortschrittsbalken auf fertig gestellt. - -Man kann auch die ``update()`` Methode von ``Zend_ProgressBar`` ohne Argumente aufrufen, das die ETA einfach neu -berechnet und den Adapter aktualisiert. Das ist nützlich wenn kein Update der Daten war, man aber den -Fortschrittsbalken aktualisieren will. - -.. _zend.progressbar.persistent: - -Persistenter Fortschritt ------------------------- - -Wenn man den Fortschrittsbalken über mehrere Aufrufe hinweg persistent haben will, kann man den Namen eines -Session Namespaces als viertes Argument an den Constructor angeben. In diesem Fall wird der Fortschrittsbalken den -Adapter nicht im Constructor benachrichtigen, sondern nur wenn man ``update()`` oder ``finish()`` aufruft. Auch der -aktuelle Wert, der Statustext und die Startzeit für die ETA Kalkulation werden im nächsten Ablauf erneut geholt. - -.. _zend.progressbar.adapters: - -Standard Adapter ----------------- - -``Zend_ProgressBar`` kommt mit den folgenden zwei Adaptern: - - - - - :ref:`Zend\ProgressBar\Adapter\Console ` - - - :ref:`Zend\ProgressBar\Adapter\JsPush ` - - - :ref:`Zend\ProgressBar\Adapter\JsPull ` - - - -.. include:: zend.progress-bar.adapter.console.rst -.. include:: zend.progress-bar.adapter.js-push.rst -.. include:: zend.progress-bar.adapter.js-pull.rst - diff --git a/docs/languages/de/modules/zend.rest.client.rst b/docs/languages/de/modules/zend.rest.client.rst deleted file mode 100644 index 8898308e5..000000000 --- a/docs/languages/de/modules/zend.rest.client.rst +++ /dev/null @@ -1,190 +0,0 @@ -.. EN-Revision: none -.. _zend.rest.client: - -Zend\Rest\Client -================ - -.. _zend.rest.client.introduction: - -Einführung ----------- - -Die Verwendung von ``Zend\Rest\Client`` ist sehr ähnlich der Verwendung von *SoapClient* Objekten (`SOAP Web -Service Erweiterung`_). Man kann einfach die REST Service Prozeduren als ``Zend\Rest\Client`` Methoden aufrufen. -Spezifiziere die komplette Adresse des Services im Constructor von ``Zend\Rest\Client``. - -.. _zend.rest.client.introduction.example-1: - -.. rubric:: Eine Basis REST Anfrage - -.. code-block:: php - :linenos: - - /** - * Verbinden zum framework.zend.com Server und eine Begrüßung empfangen - */ - $client = new Zend\Rest\Client('http://framework.zend.com/rest'); - - echo $client->sayHello('Davey', 'Day')->get(); // "Servus Davey, guten Tag" - -.. note:: - - **Unterschiede im Aufruf** - - ``Zend\Rest\Client`` versucht, dass die entfernten Methoden, so weit wie möglich, wie die nativen Methoden - aussehen, wobei der einzige Unterschied darin besteht, dass der Methodenaufruf mit ``get()``, ``post()``, - ``put()`` oder ``delete()`` erfolgen muß. Dieser Aufruf kann entweder über Methoden Verkettung oder in eigenen - Methodenaufrufen erfolgen: - - .. code-block:: php - :linenos: - - $client->sayHello('Davey', 'Tag'); - echo $client->get(); - -.. _zend.rest.client.return: - -Antworten ---------- - -Alle Anfragen die über ``Zend\Rest\Client`` gemacht wurden, liefern ein ``Zend\Rest\Client\Response`` Objekt -zurück. Dieses Objekt hat viele Eigenschaften, was es einfacher macht, auf die Ergebnisse zuzugreifen. - -Wenn ein Service auf ``Zend\Rest\Server`` basiert, kann ``Zend\Rest\Client`` einige Annahmen über die Antwort -treffen, inklusive dem Antwort Status (erfolgreich oder fehlerhaft) und den Rückgabetyp. - -.. _zend.rest.client.return.example-1: - -.. rubric:: Antwort Status - -.. code-block:: php - :linenos: - - $result = $client->sayHello('Davey', 'Tag')->get(); - - if ($result->isSuccess()) { - echo $result; // "Hallo Davey, guten Tag" - } - -Im obigen Beispiel kann man sehen, dass das Ergebnis der Anfrage als Objekt verwendet wird, um ``isSuccess()`` -aufzurufen. Mithilfe der magischen ``__toString()``-Methode kann man das Objekt bzw. das Ergebnis ausgeben -(*echo*). ``Zend\Rest\Client\Response`` erlaubt die Ausgabe jedes skalaren Wertes. Für komplexe Typen, kann -entweder die Array- oder die Objektschreibweise verwendet werden. - -Wenn trotzdem ein Service abgefragt wird, der nicht ``Zend\Rest\Server`` verwendet, wird sich das -``Zend\Rest\Client\Response`` Objekt mehr wie ein *SimpleXMLElement* verhalten. Um die Dinge trotzdem einfacher zu -gestalten, wird das *XML* automatisch abgefragt, indem XPath verwendet wird, wenn die Eigenschaft nicht von -direkter Abstammung des Dokument Root-Elements ist. Zusätzlich, wenn auf eine Eigenschaft als Methode zugegriffen -wird, empfängt man den *PHP* Wert für das Objekt, oder ein Array mit den *PHP* Wert Ergebnissen. - -.. _zend.rest.client.return.example-2: - -.. rubric:: Technorati's REST Service verwenden - -.. code-block:: php - :linenos: - - $technorati = new Zend\Rest\Client('http://api.technorati.com/bloginfo'); - $technorati->key($key); - $technorati->url('http://pixelated-dreams.com'); - $result = $technorati->get(); - echo $result->firstname() .' '. $result->lastname(); - -.. _zend.rest.client.return.example-3: - -.. rubric:: Beispiel Technorati Antwort - -.. code-block:: xml - :linenos: - - - - - - - - http://pixelated-dreams.com - - Pixelated Dreams - http://pixelated-dreams.com - - DShafik - Davey - Shafik - - - http://pixelated-dreams.com/feeds/index.rss2 - - - http://pixelated-dreams.com/feeds/atom.xml - - 44 - 218 - 2006-04-26 04:36:36 GMT - 60635 - - 44 - 218 - - - - -Hier greifen wir auf die *firstname* und *lastname* Eigenschaften zu. Selbst wenn diese keine Top-Level Elemente -sind, werden Sie automatisch zurückgegeben, wenn auf sie durch ihren Namen zugegriffen wird. - -.. note:: - - **Mehrere Elemente** - - Wenn beim Zugriff, über einen Namen, mehrere Elemente mit demselben Namen gefunden werden, wird ein Array von - SimpleXML-Elementen zurückgegeben. Beim Zugriff über die Methodenschreibweise wird ein Array von *PHP* Werten - zurückgegeben. - -.. _zend.rest.client.args: - -Anfrage Argumente ------------------ - -Wenn man eine Anfrage an einen Server sendet, welcher nicht auf ``Zend\Rest\Server`` basiert, sind die Chancen -groß, dass man mehrere Argumente mit der Anfrage senden muß. Das wird durchgeführt, indem man eine Methode mit -dem Namen des Arguments aufruft und den Wert, als das erste (und einzige) Argument übergibt. Jeder dieser -Methodenaufrufe, gibt das Objekt selbst zurück, was Verkettung oder "flüssige" Verwendung erlaubt. Der erste -Aufruf, oder das erste Argument, das übergeben wird, wenn man mehr als ein Argument übergeben will, wird immer -als die Methode angenommen wenn ein ``Zend\Rest\Server`` Service aufgerufen wird. - -.. _zend.rest.client.args.example-1: - -.. rubric:: Anfrage Argumente setzen - -.. code-block:: php - :linenos: - - $client = new Zend\Rest\Client('http://example.org/rest'); - - $client->arg('value1'); - $client->arg2('value2'); - $client->get(); - - // oder - - $client->arg('value1')->arg2('value2')->get(); - -Beide Varianten im obigen Beispiel, ergeben die folgenden get-Argumente: -*?method=arg&arg1=value1&arg=value1&arg2=value2* - -Es gilt zu bemerken, dass der erste Aufruf von *$client->arg('value1');* in beidem resultiert: -*method=arg&arg1=value1* und *arg=value1*. Es ist so, dass ``Zend\Rest\Server`` die Anfrage korrekt versteht, ohne -dass vordefiniertes Wissen über das Service benötigt wird. - -.. warning:: - - **Striktheit von Zend\Rest\Client** - - Jeder REST Service der strikt in seinen Argumenten ist, die er empfängt, wird wegen dem oben beschriebenen - Verhalten bei der Verwendung von ``Zend\Rest\Client`` fehlschlagen. Das ist keine gewöhnliche Praxis und sollte - keine Probleme verursachen. - - - -.. _`SOAP Web Service Erweiterung`: http://www.php.net/soap diff --git a/docs/languages/de/modules/zend.rest.rst b/docs/languages/de/modules/zend.rest.rst deleted file mode 100644 index 2d530aeb2..000000000 --- a/docs/languages/de/modules/zend.rest.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. EN-Revision: none -.. _zend.rest.introduction: - -Einführung -========== - -REST Web Services verwenden ein service-spezifisches *XML* Format. Dieser ad-hoc Standard bedeutet, dass die Art -des Zugriffs auf einen REST Web Service, für jeden Service unterschiedlich ist. REST Web Services verwenden -typischerweise *URL* Parameter (``GET`` Daten) oder Pfad Informationen für die Anfrage von Daten und POST Daten -für das Senden von Daten. - -Zend Framework bietet beide Möglichkeiten, Client und Server, welche, wenn Sie zusammen benutzt werden, eine viel -größere "logische" Interface Erfahrung über den Zugriff, auf virtuelle Objekt Eigenschaften erlauben. Die Server -Komponente bietet automatische Darstellung von Funktionen und Klassen und verwendet ein bedeutungsvolles und -einfaches *XML* Format. Beim Zugriff auf solche Services mit dem Client, ist es möglich, die zurückgegebenen -Daten vom Entfernten Aufruf einfachst zu erhalten. Sollte es gewünscht sein den Client mit einem -nicht-Zend\Rest\Server basierenden Service zu verwenden, bietet er immer noch vereinfachten Zugriff auf die Daten. - -Zusätzlich zu den Komponenten ``Zend\Rest\Server`` und ``Zend\Rest\Client`` bieten die Klassen -:ref:`Zend\Rest\Route und Zend\Rest\Controller ` Hilfe beim Routen von REST -Anfragen zum Controller. - - diff --git a/docs/languages/de/modules/zend.rest.server.rst b/docs/languages/de/modules/zend.rest.server.rst deleted file mode 100644 index 4519b24db..000000000 --- a/docs/languages/de/modules/zend.rest.server.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. EN-Revision: none -.. _zend.rest.server: - -Zend\Rest\Server -================ - -.. _zend.rest.server.introduction: - -Einführung ----------- - -``Zend\Rest\Server`` ist ein komplett-feature REST Server. - -.. _zend.rest.server.usage: - -Verwenden des REST Servers --------------------------- - -.. _zend.rest.server.usage.example-1: - -.. rubric:: Grundsätzliche Verwendung von Zend\Rest\Server: Klassen - -.. code-block:: php - :linenos: - - $server = new Zend\Rest\Server(); - $server->setClass('My_Service_Class'); - $server->handle(); - -.. _zend.rest.server.usage.example-2: - -.. rubric:: Grundsätzliche Verwendung von Zend\Rest\Server: Funktionen - -.. code-block:: php - :linenos: - - /** - * Sag Hallo - * - * @param string $who - * @param string $when - * @return string - */ - function sayHello($who, $when) - { - return "Hallo $who, Gut $when"; - } - - $server = new Zend\Rest\Server(); - $server->addFunction('sayHello'); - $server->handle(); - -.. _zend.rest.server.args: - -Aufruf eines Zend\Rest\Server Services --------------------------------------- - -Um ein ``Zend\Rest\Server`` Service aufzurufen, muß ein ``GET``/POST *method* Argument mit einem Wert angegeben -werden, welcher der Methode entspricht, die aufgerufen werden soll. Es können anschließend beliebig viele -Argumente folgen, die entweder den Namen des Arguments verwenden (z.B. "wer"), oder man kann *arg* verwenden, -gefolgt von der nummerischen Position des Arguments (z.B. "arg1"). - -.. note:: - - **Nummerischer Index** - - Nummerische Argumente verwenden einen 1-basierenden Index. - -Um *sayHello* vom obigen Beispiel aufzurufen, kann: - -*?method=sayHello&who=Davey&when=Day* - -verwendet werden, oder: - -*?method=sayHello&arg1=Davey&arg2=Day* - -.. _zend.rest.server.customstatus: - -Senden eines eigenen Status ---------------------------- - -Wenn Werte zurückgegeben werden, kann man, um einen eigenen Status zurückzugeben, ein Array mit einem *status* -Schlüssel zurückgeben. - -.. _zend.rest.server.customstatus.example-1: - -.. rubric:: Einen eigenen Status zurückgeben - -.. code-block:: php - :linenos: - - /** - * Sag Hallo - * - * @param string $who - * @param string $when - * @return array - */ - function sayHello($who, $when) - { - return array('msg' => 'Ein Fehler ist aufgetreten', 'status' => false); - } - - $server = new Zend\Rest\Server(); - $server->addFunction('sayHello'); - $server->handle(); - -.. _zend.rest.server.customxml: - -Eigene XML Antworten zurückgeben --------------------------------- - -Wenn man eigenes *XML* zurückgeben will, kann einfach ein *DOMDocument*, *DOMElement* oder *SimpleXMLElement* -Objekt zurückgegeben werden. - -.. _zend.rest.server.customxml.example-1: - -.. rubric:: Eigenes XML zurückgeben - -.. code-block:: php - :linenos: - - /** - * Sag Hallo - * - * @param string $who - * @param string $when - * @return SimpleXMLElement - */ - function sayHello($who, $when) - { - $xml =' - - Hallo $who! Hoffentlich hast Du einen guten $when - 200 - '; - - $xml = simplexml_load_string($xml); - return $xml; - } - - $server = new Zend\Rest\Server(); - $server->addFunction('sayHello'); - - $server->handle(); - -Die Antwort des Services wird ohne Modifizierungen zum Client zurückgegeben. - - diff --git a/docs/languages/de/modules/zend.serializer.adapter.rst b/docs/languages/de/modules/zend.serializer.adapter.rst deleted file mode 100644 index fbd89e7ea..000000000 --- a/docs/languages/de/modules/zend.serializer.adapter.rst +++ /dev/null @@ -1,218 +0,0 @@ -.. EN-Revision: none -.. _zend.serializer.adapter: - -Zend\Serializer\Adapter -======================= - -``Zend_Serializer`` Adapter erzeugen eine Brücke für unterschiedliche Methoden der Serialisierung mit geringem -Aufwand. - -Jeder Adapter hat andere Vor- und Nachteile. In einigen Fällen kann nicht jeder *PHP* Datentyp (z.B. Objekte) in -die Repräsentation eines Strings konvertiert werden. In den meisten dieser Fälle wird der Typ in einen ähnlichen -Typ konvertiert der serialisierbar ist -- zum Beispiel werden *PHP* Objekte oft zu Arrays gecastet. Wenn dies -fehlschlägt wird eine ``Zend\Serializer\Exception`` geworfen. - -Anbei ist eine Liste der vorhandenen Adapter. - -.. _zend.serializer.adapter.phpserialize: - -Zend\Serializer\Adapter\PhpSerialize ------------------------------------- - -Dieser Adapter verwendet die eingebauten *PHP* Funktionen ``un/serialize`` und ist eine gute Wahl für einen -Standardadapter. - -Es gibt keine konfigurierbaren Optionen für diesen Adapter. - -.. _zend.serializer.adapter.igbinary: - -Zend\Serializer\Adapter\Igbinary --------------------------------- - -`Igbinary`_ ist eine Open Source Software welche von Sulake Dynamoid Oy herausgegeben wird. Statt Zeit und Platz -auf eine textuelle Repräsentation zu verschwenden, speichert igbinary Datenstrukturen von *PHP* in einer kompakten -binären Form. Die Einsparungen sind signifikant wenn memcached oder ähnliche Hauptspeicher-basierte Speicher für -die Serialisierung der Daten verwendet wird. - -Man muss die *PHP* Erweiterung igbinary am eigenen System installiert haben um diesen Adapter verwenden zu können. - -Dieser Adapter nimnt keine Optionen zur Konfiguration an. - -.. _zend.serializer.adapter.wddx: - -Zend\Serializer\Adapter\Wddx ----------------------------- - -`WDDX`_ (Web Distributed Data eXchange) ist eine Programmier-Sprache-, Plattform- und ein transport-neutraler -datentauschender Mechanismus für die Übergabe von Daten zwischen unterschiedlichen Umgebungen und -unterschiedlichen Computern. - -Der Adapter verwendet einfach die `wddx_*()`_ *PHP* Funktionen. Lesen Sie bitte im *PHP* Handbuch um herauszufinden -ob man Sie in der eigenen *PHP* Installation aktivieren kann. - -Zusätzlich wird die *PHP* Erweiterung `SimpleXML`_ verwendet um zu prüfen ob ein von ``wddx_unserialize()`` -zurückgegebener ``NULL`` Wert auf einem serialisierten ``NULL`` Wert basiert, oder auf ungültigen Daten. - -Vorhandene Optionen sind: - -.. _zend.serializer.adapter.wddx.table.options: - -.. table:: Optionen für Zend\Serializer\Adapter\Wddx - - +-------+--------+------------+----------------------------------------------------------+ - |Option |Datentyp|Standardwert|Beschreibung | - +=======+========+============+==========================================================+ - |comment|string | |Ein optionales Kommentar welches im Paket Header vorkommt.| - +-------+--------+------------+----------------------------------------------------------+ - -.. _zend.serializer.adapter.json: - -Zend\Serializer\Adapter\Json ----------------------------- - -Der *JSON* Adapter bietet eine Brücke zur Komponente ``Zend_Json`` und zu ext/json. Lesen Sie bitte die -:ref:`Zend_Json Dokumentation ` für weitere Informationen. - -Vorhandene Optionen sind: - -.. _zend.serializer.adapter.json.table.options: - -.. table:: Optionen für Zend\Serializer\Adapter\Json - - +--------------------+-----------------+---------------------+----------------------+ - |Option |Datentyp |Standardwert |Beschreibung | - +====================+=================+=====================+======================+ - |cycleCheck |boolean |false |Siehe diesen Abschnitt| - +--------------------+-----------------+---------------------+----------------------+ - |objectDecodeType |Zend\Json\Json::TYPE_*|Zend\Json\Json::TYPE_ARRAY|Siehe diesen Abschnitt| - +--------------------+-----------------+---------------------+----------------------+ - |enableJsonExprFinder|boolean |false |Siehe diesen Abschnitt| - +--------------------+-----------------+---------------------+----------------------+ - -.. _zend.serializer.adapter.amf03: - -Zend\Serializer\Adapter\Amf 0 und 3 ------------------------------------ - -Die *AMF* Adapter ``Zend\Serializer\Adapter\Amf0`` und ``Zend\Serializer\Adapter\Amf3`` bieten eine Brücke zum -Serialisierer der Komponente ``ZendAmf``. Lesen Sie bitte die :ref:`ZendAmf Dokumentation -` für weitere Informationen. - -Es gibt keine Optionen für diese Adapter. - -.. _zend.serializer.adapter.pythonpickle: - -Zend\Serializer\Adapter\PythonPickle ------------------------------------- - -Dieser Adapter konvertiert *PHP* Typen in eine `Python Pickle`_ String Repräsentation. Mit Ihm können die -serialisierten Daten mit Python gelesen werden und Pickled Daten von Python mit *PHP* gelesen werden. - -Vorhandene Optionen sind: - -.. _zend.serializer.adapter.pythonpickle.table.options: - -.. table:: Optionen für Zend\Serializer\Adapter\PythonPickle - - +--------+-----------------------+------------+----------------------------------------------------------------------+ - |Option |Datentyp |Standardwert|Beschreibung | - +========+=======================+============+======================================================================+ - |protocol|integer (0 | 1 | 2 | 3)|0 |Die Version des Pickle Protokolls welches bei serialize verwendet wird| - +--------+-----------------------+------------+----------------------------------------------------------------------+ - -Der Wechsel von Datentypen (PHP zu Python) findet wie folgt statt: - -.. _zend.serializer.adapter.pythonpickle.table.php2python: - -.. table:: Wechseln des Datentyps (PHP zu Python) - - +-----------------+----------+ - |PHP Typ |Python Typ| - +=================+==========+ - |NULL |None | - +-----------------+----------+ - |boolean |boolean | - +-----------------+----------+ - |integer |integer | - +-----------------+----------+ - |float |float | - +-----------------+----------+ - |string |string | - +-----------------+----------+ - |array |list | - +-----------------+----------+ - |associative array|dictionary| - +-----------------+----------+ - |object |dictionary| - +-----------------+----------+ - -Der Wechsel von Datentypen (Python zu *PHP*) findet wie folgt statt: - -.. _zend.serializer.adapter.pythonpickle.table.python2php: - -.. table:: Wechseln des Datentyps (PHP zu Python) - - +------------------+----------------------------------------------------+ - |Python Typ |PHP Typ | - +==================+====================================================+ - |None |NULL | - +------------------+----------------------------------------------------+ - |boolean |boolean | - +------------------+----------------------------------------------------+ - |integer |integer | - +------------------+----------------------------------------------------+ - |long |integer | float | string | Zend\Serializer\Exception| - +------------------+----------------------------------------------------+ - |float |float | - +------------------+----------------------------------------------------+ - |string |string | - +------------------+----------------------------------------------------+ - |bytes |string | - +------------------+----------------------------------------------------+ - |Unicode string |UTF-8 string | - +------------------+----------------------------------------------------+ - |list |array | - +------------------+----------------------------------------------------+ - |tuple |array | - +------------------+----------------------------------------------------+ - |dictionary |associative array | - +------------------+----------------------------------------------------+ - |Alle anderen Typen|Zend\Serializer\Exception | - +------------------+----------------------------------------------------+ - -.. _zend.serializer.adapter.phpcode: - -Zend\Serializer\Adapter\PhpCode -------------------------------- - -Dieser Adapter erzeugt eine Repräsentation an *PHP* Code der geparst werden kann indem `var_export()`_ verwendet -wird. Bei der Wiederherstellung werden die Daten ausgeführt indem `eval`_ verwendet wird. - -Es gibt keine Optionen für die Konfiguration dieses Adapters. - -.. warning:: - - **Objekte deserialisieren** - - Objekte werden serialisiert indem die magische Methode `\__set_state`_ verwendet wird. Wenn die Klasse diese - Methode nicht implementiert wird wärend der Ausführung ein fataler Fehler auftreten. - -.. warning:: - - **Verwendet eval()** - - Der Adapter ``PhpCode`` verwendet ``eval()`` für die Deserialisierung. Das führt sowohl zu Performanz- als - auch zu einem potentiellen Sicherheitsproblem da ein neuer Prozess ausgeführt wird. Typischerweise sollte der - Adapter ``PhpSerialize`` verwendet werden solange man die Lesbarkeit der serialisierten Daten durch Menschen - benötigt. - - - -.. _`Igbinary`: http://opensource.dynamoid.com -.. _`WDDX`: http://wikipedia.org/wiki/WDDX -.. _`wddx_*()`: http://php.net/manual/book.wddx.php -.. _`SimpleXML`: http://php.net/manual/book.simplexml.php -.. _`Python Pickle`: http://docs.python.org/library/pickle.html -.. _`var_export()`: http://php.net/manual/function.var-export.php -.. _`eval`: http://php.net/manual/function.eval.php -.. _`\__set_state`: http://php.net/manual/language.oop5.magic.php#language.oop5.magic.set-state diff --git a/docs/languages/de/modules/zend.serializer.introduction.rst b/docs/languages/de/modules/zend.serializer.introduction.rst deleted file mode 100644 index e65fc9421..000000000 --- a/docs/languages/de/modules/zend.serializer.introduction.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. EN-Revision: none -.. _zend.serializer.introduction: - -Einführung -========== - -``Zend_Serializer`` bietet ein Adapter-basierendes Interface um eine speicherbare Repräsentation von *PHP* Typen -durch unterschiedliche Arten zu bieten und diese wiederherzustellen. - -.. _zend.serializer.introduction.example.dynamic: - -.. rubric:: Verwenden des dynamischen Interfaces von Zend_Serializer - -Um einen Serializer zu instanzieren sollte man die Factory Methode mit dem Namen des Adapters verwenden: - -.. code-block:: php - :linenos: - - $serializer = Zend\Serializer\Serializer::factory('PhpSerialize'); - // Jetzt ist $serializer eine Instanz von - // Zend\Serializer\Adapter\AdapterInterface, im speziellen - // Zend\Serializer\Adapter\PhpSerialize - - try { - $serialized = $serializer->serialize($data); - // jetzt ist $serialized ein String - - $unserialized = $serializer->unserialize($serialized); - // Jetzt ist $data == $unserialized - } catch (Zend\Serializer\Exception $e) { - echo $e; - } - -Die Methode ``serialize()`` erzeugt einen speicherbaren String. Um diese serialisierten Daten wiederherzustellen -kann einfach die Methode ``unserialize()`` aufgerufen werden. - -Jedesmal wenn ein Fehler bei der Serialisierung oder Deserialisierung festgestellt wird wirft ``Zend_Serializer`` -eine ``Zend\Serializer\Exception``. - -Um einen gegebenen Serialisierungs-Adapter zu konfigurieren kann optional ein Array oder eine Instanz von -``Zend_Config`` an die ``factory()`` oder die Methoden ``serialize()`` und ``unserialize()`` übergeben werden: - -.. code-block:: php - :linenos: - - $serializer = Zend\Serializer\Serializer::factory('Wddx', array( - 'comment' => 'serialized by Zend_Serializer', - )); - - try { - $serialized = $serializer->serialize( - $data, - array('comment' => 'change comment') - ); - - $unserialized = $serializer->unserialize( - $serialized, - array(/* Optionen für die Deserialisierung */) - ); - } catch (Zend\Serializer\Exception $e) { - echo $e; - } - -Optionen welche an ``factory()`` übergeben werden sind für das instanzierte Objekt gültig. Man kann diese -Optionen verändern indem die ``setOption(s)`` Methoden verwendet werden. Um ein oder mehrere Optionen für einen -einzelnen Aufruf zu verändern, können diese als zweites Argument an die Methoden ``serialize()`` oder -``unserialize()`` übergeben werden. - -.. _zend.serializer.introduction.example.static.php: - -.. rubric:: Das statische Interface von Zend_Serializer verwenden - -Man kann einen spezifischen Serialisierungs-Adapter als standardmäßigen Serialisierungs-Adapter für die -Verwendung mit ``Zend_Serializer`` registrieren. Standardmäßig wird der Adapter ``PhpSerialize`` registriert. -Aber man kann das verändern indem die statische Methode ``setDefaultAdapter()`` verwendet wird. - -.. code-block:: php - :linenos: - - Zend\Serializer\Serializer::setDefaultAdapter('PhpSerialize', $options); - // oder - $serializer = Zend\Serializer\Serializer::factory('PhpSerialize', $options); - Zend\Serializer\Serializer::setDefaultAdapter($serializer); - - try { - $serialized = Zend\Serializer\Serializer::serialize($data, $options); - $unserialized = Zend\Serializer\Serializer::unserialize($serialized, $options); - } catch (Zend\Serializer\Exception $e) { - echo $e; - } - - diff --git a/docs/languages/de/modules/zend.server.reflection.rst b/docs/languages/de/modules/zend.server.reflection.rst deleted file mode 100644 index 6f0ce92c4..000000000 --- a/docs/languages/de/modules/zend.server.reflection.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. EN-Revision: none -.. _zend.server.reflection: - -Zend\Server\Reflection -====================== - -.. _zend.server.reflection.introduction: - -Einführung ----------- - -``Zend\Server\Reflection`` stellt einen Standardmechanismus für Funktion und Klassen Introspektion für die -Verwendung der Serverklassen bereit. Es basiert auf der *PHP* 5 Reflection *API* und erweitert diese, um Methoden -für die Erhaltung von Parameter und Rückgabewerttypen und Beschreibung, eine komplette Liste mit Funktion und -Methoden Prototypen (d.h. alle möglichen, gültigen Aufrufkombinationen) sowie Funktions- oder -Methodenbeschreibungen bereit zu stellen. - -Normalerweise wird diese Funktionalität nur von Entwicklern von Serverklassen für das Framework verwendet. - -.. _zend.server.reflection.usage: - -Verwendung ----------- - -Die grundlegende Verwendung ist einfach: - -.. code-block:: php - :linenos: - - $class = Zend\Server\Reflection::reflectClass('My_Class'); - $function = Zend\Server\Reflection::reflectFunction('my_function'); - - // Prototypen auslesen - $prototypes = $reflection->getPrototypes(); - - // Durch jeden Prototyp laufen für die Funktion - foreach ($prototypes as $prototype) { - - // Rückgabe Typ des Prototypen ausgeben - echo "Rückgabe Typ: ", $prototype->getReturnType(), "\n"; - - // Parameter des Prototypen ausgeben - $parameters = $prototype->getParameters(); - - echo "Parameter: \n"; - foreach ($parameters as $parameter) { - // Parameter Typ ausgeben - echo " ", $parameter->getType(), "\n"; - } - } - - // Erhalte Namensraum für eine Klasse, Funktion oder Methode. - // Namensräume können zum Zeitpunkt der Instanzierung gesetzt werden - // (zweites Argument) oder durch Verwendung von setNamespace() - $reflection->getNamespace(); - -``reflectFunction()`` gibt ein ``Zend\Server\Reflection\Function`` Objekt zurück; ``reflectClass()`` gibt ein -``Zend\Server\Reflection\Class`` Objekt zurück. Bitte die *API* Documentation beachten, um zu erfahren, welche -Methoden für beide Klassen verfügbar sind. - - diff --git a/docs/languages/de/modules/zend.server.rst b/docs/languages/de/modules/zend.server.rst deleted file mode 100644 index b1bee093b..000000000 --- a/docs/languages/de/modules/zend.server.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. EN-Revision: none -.. _zend.server.introduction: - -Einführung -========== - -Die ``Zend_Server`` Klassenfamilie stellt Funktionalitäten für die verschiedenen Serverklassen bereit, inklusive -``Zend\XmlRpc\Server``, ``Zend\Rest\Server``, ``Zend\Json\Server`` und ``Zend\Soap\Wsdl``. -``Zend\Server\Interface`` stellt eine Interface bereit, welches *PHP* 5's ``SoapServer`` Klasse immitiert; alle -Server Klassen sollten dieses Interface implementieren, um eine Standard Server *API* bereit zu stellen. - -Der ``Zend\Server\Reflection`` Baum stellt einen Standardmechanismus bereit, um Funktion und Klassen Introspektion -für die Verwendung als Rückfragen mit den Server Klassen bereit zu stellen und stellt Daten passend für die -Verwendung von ``Zend\Server\Interface``'s ``getFunctions()`` und ``loadFunctions()`` Methoden bereit. - - diff --git a/docs/languages/de/modules/zend.soap.auto-discovery.rst b/docs/languages/de/modules/zend.soap.auto-discovery.rst deleted file mode 100644 index 7183c6cf0..000000000 --- a/docs/languages/de/modules/zend.soap.auto-discovery.rst +++ /dev/null @@ -1,282 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.autodiscovery: - -AutoDiscovery -============= - -.. _zend.soap.autodiscovery.introduction: - -AutoDiscovery Einführung ------------------------- - -Die *SOAP* Funktionalität die im Zend Framework implementiert ist, ist dazu gedacht alle benötigten Schritte für -die *SOAP* Kommunikation einfacher zu gestalten. - -*SOAP* ist ein von der Sprache unabhängiges Protokoll. Deshalb kann es nicht nur für *PHP*-zu-PHP Kommunikation -verwendet werden. - -Es gibt drei Konfigurationen für *SOAP* Anwendungen wo Zend Framework verwendet werden kann: - - - - . SOAP Server *PHP* Anwendung <---> *SOAP* Client *PHP* Anwendung - - . *SOAP* Server nicht-PHP Anwendung <---> *SOAP* Client *PHP* Anwendung - - . SOAP Server *PHP* Anwendung <---> *SOAP* Client nicht-PHP Anwendung - - - -Wir müssen immer wissen, welche Funktionalität vom *SOAP* Server angeboten wird um mit Ihm zu arbeiten. `WSDL`_ -wird verwendet um die Netzwerk Service *API* im Detail zu beschreiben. - -Die WSDL Sprache ist komplex genug (siehe http://www.w3.org/TR/wsdl für die Details). Es ist also kompliziert -genug die richtige WSDL Beschreibung vorzubereiten. - -Ein anderes Problem ist die Synchronisation von Änderungen in der Netzwerk Service *API* mit schon existierendem -WSDL. - -Aber dieses Problem kann durch WSDL Autogeneration gelöst werden. Eine Vorbedingung dafür ist ein *SOAP* Server -Autodiscovery. Es erzeugt ein Objekt ähnlich dem Objekt das in der *SOAP* Server Anwendung verwendet wird, -extrahiert notwendige Informationen und erzeugt ein korrektes WSDL indem es die Information verwendet. - -Es gibt zwei Wege für die Verwendung des Zend Framworks für *SOAP* Server Anwendungen: - - - - - Verwendung von eigenen Klassen. - - - Verwendung eines Sets von Funktionen - - - -Beide Methoden werden von der Zend Framework Autodiscovery Funktionalität unterstützt. - -Die ``Zend\Soap\AutoDiscovery`` Klasse unterstützt auch das Mapping von Datentypen von *PHP* zu `XSD Typen`_. - -Hier ist ein Beispiel einer üblichen Verwendung der Autodiscovery Funktionalität. Die Funktion ``handle()`` -erzeugt die WSDL Datei und postet Sie an den Browser. - -.. code-block:: php - :linenos: - - class My_SoapServer_Class { - ... - } - - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->setClass('My_SoapServer_Class'); - $autodiscover->handle(); - -Wenn man auf die erzeugte WSDL Datei zugreifen muß um Sie in eine Datei oder als *XML* String abzuspeichern, kann -man die Funktionen ``dump($filename)`` oder ``toXml()`` verwenden welche die AutoDiscovery Klasse anbietet. - -.. note:: - - **Zend\Soap\Autodiscover ist kein Soap Server** - - Es ist wichtig anzumerken, das die Klasse ``Zend\Soap\Autodiscover`` nicht für sich selbst als *SOAP* Server - agiert. Sie erzeugt nur den WSDL und bietet Ihn jedem an der auf die URL zugreift auf die geschaut wird. - - Als Endpunkt der *SOAP* URI verwendet es den Standard *'http://' .$_SERVER['HTTP_HOST'] . - $_SERVER['SCRIPT_NAME']*, der aber mit der ``setUri()`` Funktion oder dem Contructor Parameter der - ``Zend\Soap\AutoDiscover`` Klasse verändert werden kann. Der Endpunkt muß an einen ``Zend\Soap\Server`` - übergeben werden der auf die Anfragen hört. - - .. code-block:: php - :linenos: - - if (isset($_GET['wsdl'])) { - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->setClass('HelloWorldService'); - $autodiscover->handle(); - } else { - // zeigt auf diese aktuelle Datei - $soap = new Zend\Soap\Server("http://example.com/soap.php?wsdl"); - $soap->setClass('HelloWorldService'); - $soap->handle(); - } - -.. _zend.soap.autodiscovery.class: - -Automatische Erkennung von Klassen ----------------------------------- - -Wenn eine Klasse verwendet wird um SOAP Server Funktionalitäten anzubieten, dann sollte die selbe Klasse an -``Zend\Soap\AutoDiscover`` für die WSDL Erzeugung übergeben werden: - -.. code-block:: php - :linenos: - - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->setClass('My_SoapServer_Class'); - $autodiscover->handle(); - -Die folgenden Regeln werden wärend der WSDL Erzeugung verwendet: - - - - - Erzeugtes WSDL beschreibt einen RPC srtigen Web Service. - - - Klassen Namen werden als Name des Web Services verwendet der beschrieben wird. - - - *'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']* wird als *URI* verwendet wenn das WSDL - standardmäßig vorhanden ist und kann über die ``setUri()`` Methode überschrieben werden. - - Es wird auch als Ziel Namespace für alle Service bezogenen Namen verwendet (inklusive der beschriebenen - komplexen Typen). - - - Klassen Methoden werden in einen `Port Typ`_ übernommen. - - *$className . 'Port'* wird als Port Typ Name verwendet. - - - Jede Klassen Methode wird als korrespondierende Port Operation registriert. - - - Jeder Methoden Prototyp erzeugt korrespondierende Anfrage/Antwort Nachrichten. - - Eine Methode kann verschiedene Prototypen haben wenn einige Parameter der Methode optional sind. - - - -.. note:: - - **Wichtig!** - - WSDL Autodiscovery verwendet *PHP* Docblocks die vom Entwickler angeboten werden um die Parameter und Return - Typen zu erkennen. Faktisch ist das, für skalare Typen, der einzige Weg um die Parameter Typen zu erkennen und - für Return Typen ist das der einzige Weg um Sie zu erkennen. - - Das bedeutet, das Anbieten von richtigen und komplett detailierten Docblocks ist nicht nur beste Praxis, sondern - wird für das erkunden der Klasse benötigt. - -.. _zend.soap.autodiscovery.functions: - -Funktionen für Autodiscovery ----------------------------- - -Wenn ein Set von Funktionen verwendet wird um SOAP Server Funktionalität anzubieten, dann sollte das selbe Set mit -``Zend\Soap\AutoDiscovery`` für die WSDL Erzeugung verwendet werden: - -.. code-block:: php - :linenos: - - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->addFunction('function1'); - $autodiscover->addFunction('function2'); - $autodiscover->addFunction('function3'); - ... - $autodiscover->handle(); - -Die folgenden Regeln werden wärend der WSDL Erzeugung verwendet: - - - - - Ein erstelltes WSDL beschreibt einen RPC artigen Web Service. - - - Der aktuelle Skriptname wird als Name des Web Services verwendet der beschrieben wird. - - - *'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']* wird als *URI* verwendet wo WSDL vorhanden ist. - - Wird als Ziel Namespace für alle Service bezogenen Namen verwendet (inklusive der beschriebenen komplexen - Typen). - - - Funktionen werden in einem `Port Typ`_ verbunden. - - *$functionName . 'Port'* wird als Port Typ Name verwendet. - - - Jede Funktion wird als korrespondierende Port Operation registriert. - - - Jeder Funktions Prototyp erzeugt eine korrespondierende Anfrage/Antwort Nachricht. - - Funktionen können verschiedene Prototypen haben wenn einige Parameter der Methode optional sind. - - - -.. note:: - - **Wichtig!** - - WSDL Autodiscovery verwendet *PHP* Docblocks die vom Entwickler angeboten werden um die Parameter und Return - Typen zu erkennen. Faktisch ist das, für skalare Typen, der einzige Weg um die Parameter Typen zu erkennen und - für Return Typen ist das der einzige Weg um Sie zu erkennen. - - Das bedeutet, das Anbieten von richtigen und komplett detailierten Docblocks ist nicht nur beste Praxis, sondern - wird für das erkunden der Klasse benötigt. - -.. _zend.soap.autodiscovery.datatypes: - -Automatische Erkennung. Datentypen ----------------------------------- - -Eingabe/Ausgabe Datentypen werden in Netzwerk Service Typen konvertiert indem das folgende Mapping verwendet wird: - - - - - PHP Strings <-> *xsd:string*. - - - PHP Integer <-> *xsd:int*. - - - PHP Float und Double <-> *xsd:float*. - - - PHP Boolean <-> *xsd:boolean*. - - - PHP Arrays <-> *soap-enc:Array*. - - - PHP Objekt <-> *xsd:struct*. - - - *PHP* Klasse <-> basierend auf der Strategie der komplexen Typen (Siehe :ref:`diesen Abschnitt - `) [#]_. - - - type[] oder object[] (z.B. int[]) <-> basieren auf der Strategie der komplexen Typen - - - PHP Void <-> Leerer Typ. - - - Wenn der Typ aus irgendeinem Grund keinem dieser Typen entspricht, dann wird *xsd:anyType* verwendet. - -Wo *xsd:* ein "http://www.w3.org/2001/XMLSchema" Namespace ist, ist *soap-enc:* ein -"http://schemas.xmlsoap.org/soap/encoding/" Namespace, und *tns:* ist ein "Ziel Namespace" für einen Service. - -.. _zend.soap.autodiscovery.wsdlstyles: - -Stile für das Binden von WSDL ------------------------------ - -WSDL bietet verschiedene Transport Mechanismen und Stile. Das beeinträchtigt die *soap:binding* und *soap:body* -Tags in der Binding Sektion von WSDL. Unterschiedliche Clients haben unterschiedliche Anforderungen wie diese -Optionen wirklich arbeiten. Hierfür kann man die Stile setzen bevor man eine *setClass* oder *addFunction* Methode -auf der AutoDiscovery Klasse ausführt. - -.. code-block:: php - :linenos: - - $autodiscover = new Zend\Soap\AutoDiscover(); - // Standard ist 'use' => 'encoded' und - // 'encodingStyle' => 'http://schemas.xmlsoap.org/soap/encoding/' - $autodiscover->setOperationBodyStyle( - array('use' => 'literal', - 'namespace' => 'http://framework.zend.com') - ); - - // Standard ist 'style' => 'rpc' und - // 'transport' => 'http://schemas.xmlsoap.org/soap/http' - $autodiscover->setBindingStyle( - array('style' => 'document', - 'transport' => 'http://framework.zend.com') - ); - ... - $autodiscover->addFunction('myfunc1'); - $autodiscover->handle(); - - - -.. _`WSDL`: http://www.w3.org/TR/wsdl -.. _`XSD Typen`: http://www.w3.org/TR/xmlschema-2/ -.. _`Port Typ`: http://www.w3.org/TR/wsdl#_porttypes - -.. [#] ``Zend\Soap\AutoDiscover`` wird mit der ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` Klasse als - Erkennungsalgorithmus für komplexe Typen erstellt. Der erste Parameter des AutoDiscover Constructors - nimmt jede Strategie für komplexe Typen die ``Zend\Soap\Wsdl\Strategy\Interface`` implementieren oder - einen String mit dem Nmaen der Klasse. Um Backwards Compatibility mit ``$extractComplexType`` zu - gewährleisten werden boolsche Variablen wie in ``Zend\Soap\Wsdl`` geparst. Siehe das - :ref:`Zend\Soap\Wsdl Manual über das Hinzufügen von komplexen ` - Typen für weitere Informationen. diff --git a/docs/languages/de/modules/zend.soap.client.rst b/docs/languages/de/modules/zend.soap.client.rst deleted file mode 100644 index 9d866c0eb..000000000 --- a/docs/languages/de/modules/zend.soap.client.rst +++ /dev/null @@ -1,158 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.client: - -Zend\Soap\Client -================ - -Die ``Zend\Soap\Client`` Klasse vereinfacht die Entwicklung von *SOAP* Clients für *PHP* Programmierern. - -Sie kann im WSDL oder im nicht-WSDL Modus verwendet werden. - -Im WSDL Modus verwendet die ``Zend\Soap\Client`` Komponente ein bereits vorbereitetes WSDL Dokument um die Optionen -des Transport Layers zu definieren. - -Die WSDL Beschreibung wird normalerweise vom Web Service bereitgestellt auf das der Client zugreift. Wenn die WSDL -Beschreibung nicht verfügbar gemacht wurde, kann man ``Zend\Soap\Client`` im nicht-WSDL Modus verwenden. In diesem -Modus müssen alle *SOAP* Protokolloptionen explizit an der ``Zend\Soap\Client`` Klasse gesetzt werden. - -.. _zend.soap.client.constructor: - -Der Zend\Soap\Client Konstruktor --------------------------------- - -Der ``Zend\Soap\Client`` Konstruktor nimmt zwei Parameter: - - - - - ``$wsdl``- eine *URI* einer WSDL Datei. - - - ``$options``- Optionen um ein *SOAP* Client Objekt zu erstellen. - -Beide Parameter können später gesetzt werden indem die ``setWsdl($wsdl)`` und ``setOptions($options)`` Methoden -verwendet werden. - -.. note:: - - **Wichtig!** - - Wenn die ``Zend\Soap\Client`` Komponente im nicht-WSDL Modus verwendet wird, **müssen** die 'location' und - 'uri' Optionen gesetzt werden. - -Die folgenden Optionen werden erkannt: - - - - - 'soap_version' ('soapVersion') - Die zu verwendende SOAP Version (SOAP_1_1 oder *SOAP*\ _1_2). - - - 'classmap' ('classMap') welche verwendet werden kann um einige WSDL Typen auf *PHP* Klassen zu mappen. - - Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von *PHP* Klassen als Werte sein. - - - 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe Kodierung verwendet). - - - 'wsdl' welcher dem Aufruf von ``setWsdl($wsdlValue)`` entspricht. - - Das Ändern dieser Option kann das ``Zend\Soap\Client`` Objekt von oder zum WSDL Modus wechseln. - - - 'uri' - Der Ziel-Namespace für den *SOAP* Service (benötigt im nicht-WSDL Modus, funktioniert nicht im WSDL - Modus). - - - 'location' - Die *URL* der Anfrage (benötigt im nicht-WSDL Modus, funktioniert nicht im WSDL Modus). - - - 'style' - Anfrage Stil (funktioniert nicht im WSDL Modus): ``SOAP_RPC`` oder ``SOAP_DOCUMENT``. - - - 'use' - Methode zum Verschlüsseln von Nachrichten (funktioniert nicht im WSDL Modus): ``SOAP_ENCODED`` oder - ``SOAP_LITERAL``. - - - 'login' und 'password' - Login und Passwort für eine *HTTP* Authentifizierung. - - - 'proxy_host', 'proxy_port', 'proxy_login', und 'proxy_password' - Eine *HTTP* Verbindung über einen Proxy - Server. - - - 'local_cert' und 'passphrase' -*HTTPS* Client Authentifizierungs Optionen für Zertifikate. - - - 'compression' - Komprimierungs Optionen; das ist eine Kombination von ``SOAP_COMPRESSION_ACCEPT``, - ``SOAP_COMPRESSION_GZIP`` und ``SOAP_COMPRESSION_DEFLATE`` Optionen welche wie folgt verwendet werden können: - - .. code-block:: php - :linenos: - - // Komprimierung der Antworten akzeptieren - $client = new Zend\Soap\Client("some.wsdl", - array('compression' => SOAP_COMPRESSION_ACCEPT)); - ... - - // Anfragen komprimieren durch Verwendung von gzip mit Komprimierungs-Level 5 - $client = new Zend\Soap\Client("some.wsdl", - array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5)); - ... - - // Anfragen komprimieren durch Verwendung der Deflate Komprimierung - $client = new Zend\Soap\Client("some.wsdl", - array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE)); - - - -.. _zend.soap.client.calls: - -SOAP Anfragen durchführen -------------------------- - -Nachdem ein ``Zend\Soap\Client`` Objekt erstellt wurde sind wir bereit um *SOAP* Anfragen durchzuführen. - -Jede Methode des Web Services wird auf eine virtuelle ``Zend\Soap\Client`` Objekt-Methode gemappt welche Parameter -mit üblichen *PHP* Typen entgegen nimmt. - -Es ist wie im folgenden Beispiel zu verwenden: - -.. code-block:: php - :linenos: - - //**************************************************************** - // Server Code - //**************************************************************** - // class MyClass { - // /** - // * Diese Methode nimmt ... - // * - // * @param integer $inputParam - // * @return string - // */ - // public function method1($inputParam) { - // ... - // } - // - // /** - // * Diese Methode nimmt ... - // * - // * @param integer $inputParam1 - // * @param string $inputParam2 - // * @return float - // */ - // public function method2($inputParam1, $inputParam2) { - // ... - // } - // - // ... - // } - // ... - // $server = new Zend\Soap\Server(null, $options); - // $server->setClass('MyClass'); - // ... - // $server->handle(); - // - //**************************************************************** - // Ende des Server Codes - //**************************************************************** - - $client = new Zend\Soap\Client("MyService.wsdl"); - ... - - // $result1 ist ein String - $result1 = $client->method1(10); - ... - - // $result2 ist ein Float - $result2 = $client->method2(22, 'irgendein String'); - - diff --git a/docs/languages/de/modules/zend.soap.server.rst b/docs/languages/de/modules/zend.soap.server.rst deleted file mode 100644 index da77c9169..000000000 --- a/docs/languages/de/modules/zend.soap.server.rst +++ /dev/null @@ -1,289 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.server: - -Zend\Soap\Server -================ - -Die ``Zend\Soap\Server`` Klasse ist dazu gedacht den Web Service Teil der Entwicklung für *PHP* Programmierer zu -vereinfachen. - -Sie kann in WSDL oder nicht-WSDL Modus verwendet werden, und verwendet Klassen oder Funktionen um eine Web Service -*API* zu definieren. - -Wenn die ``Zend\Soap\Server`` Komponente im WSDL Modus arbeitet, verwendet Sie ein bereits vorbereitetes WSDL -Dokument um das Verhalten des Server Objekts und die Optionen des Transport Layers zu definieren. - -Ein WSDL Dokument kann automatisch erzeugt werden mit der Funktionalität die von der :ref:`Zend\Soap\AutoDiscovery -Komponente ` angeboten wird sollte händisch erzeugt werden durch Verwendung -der :ref:`Zend\Soap\Wsdl Klasse ` oder irgendeinem anderen *XML* Erstellungstool. - -Wenn der nicht-WSDL Modus verwendet wird, müssen alle Protokoll-Optionen gesetzt werden indem der -Options-Mechanismus verwendet wird. - -.. _zend.soap.server.constructor: - -Der Zend\Soap\Server Konstruktor --------------------------------- - -Der Contructor von ``Zend\Soap\Server`` sollte für WSDL und nicht-WSDL Modi unterschiedlich verwendet werden. - -.. _zend.soap.server.constructor.wsdl_mode: - -Der Zend\Soap\Server Konstruktor für den WSDL Modus -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Der ``Zend\Soap\Server`` Konstruktor nimmt zwei optionale Parameter wenn er im WSDL Modus arbeitet: - - - - . ``$wsdl``, welcher eine *URI* einer WSDL Datei ist [#]_. - - . ``$options``- Optionen für die Erstellung eines *SOAP* Server Objektes [#]_. - - Die folgenden Optionen werden im WSDL Modus erkannt: - - - - - 'soap_version' ('soapVersion') - Die zu verwendende SOAP Version (SOAP_1_1 or *SOAP*\ _1_2). - - - 'actor' - Die Aktions-*URI* für den Server. - - - 'classmap' ('classMap') welche verwendet werden kann um einige WSDL Typen auf *PHP* Klassen zu mappen. - - Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von *PHP* Klassen als Werte sein. - - - 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe Kodierung verwendet). - - - 'wsdl' welcher dem Aufruf von ``setWsdl($wsdlValue)`` entspricht. - - - - - -.. _zend.soap.server.wsdl_mode: - -Der Zend\Soap\Server Konstruktor für den nicht-WSDL Modus -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Der erste Parameter des Konstruktors **muß** auf ``NULL`` gesetzt werden wenn man plant die Funktionalität von -``Zend\Soap\Server`` im nicht-WSDL Modus zu verwenden. - -Man muß in diesem Fall auch die 'uri' Option setzen (siehe anbei). - -Der zweite Parameter des Konstruktors (``$options``) ist ein Array mit Optionen um ein *SOAP* Server Objekt zu -erstellen [#]_. - -Die folgenden Optionen werden im nicht-WSDL Modus erkannt: - - - - - 'soap_version' ('soapVersion') - Die zu verwendende SOAP Version (SOAP_1_1 or *SOAP*\ _1_2). - - - 'actor' - Die Aktions-*URI* für den Server. - - - 'classmap' ('classMap') welche verwendet werden kann um einige WSDL Typen auf *PHP* Klassen zu mappen. - - Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von *PHP* Klassen als Werte sein. - - - 'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe Kodierung verwendet). - - - 'uri' (benötigt) -*URI* Namespace für den *SOAP* Server. - - - -.. _zend.soap.server.api_define_methods: - -Methoden um eine Web Service API zu definieren ----------------------------------------------- - -Es gibt zwei Wege um eine Web Service *API* zu definieren wenn man Zugriff auf den eigenen *PHP* Code über *SOAP* -geben will. - -Der Erste ist das Anfügen einer Klasse zum ``Zend\Soap\Server`` Objekt welche eine Web Service *API* komplett -beschreibt: - -.. code-block:: php - :linenos: - - ... - class MyClass { - /** - * Diese Methode nimmt ... - * - * @param integer $inputParam - * @return string - */ - public function method1($inputParam) { - ... - } - - /** - * Diese Methode nimmt ... - * - * @param integer $inputParam1 - * @param string $inputParam2 - * @return float - */ - public function method2($inputParam1, $inputParam2) { - ... - } - - ... - } - ... - $server = new Zend\Soap\Server(null, $options); - // Die Klasse an den Soap Server binden - $server->setClass('MyClass'); - // Binden eines bereits initialisierten Objekts an den Soap Server - $server->setObject(new MyClass()); - ... - $server->handle(); - -.. note:: - - **Wichtig!** - - Jede Methode sollte komplett beschrieben sein indem Docblocks für Methoden verwendet werden wenn man plant die - Autodiscovery Funktionalität zu verwenden um ein entsprechendes Web Service WSDL vorzubereiten. - -Die zweite Methode der Definition einer Web Service *API* ist die Verwendung eines Sets von Funktionen und -``addFunction()`` oder ``loadFunctions()`` Methoden: - -.. code-block:: php - :linenos: - - ... - /** - * Diese Funktion ... - * - * @param integer $inputParam - * @return string - */ - function function1($inputParam) { - ... - } - - /** - * Diese Funktion ... - * - * @param integer $inputParam1 - * @param string $inputParam2 - * @return float - */ - function function2($inputParam1, $inputParam2) { - ... - } - ... - $server = new Zend\Soap\Server(null, $options); - $server->addFunction('function1'); - $server->addFunction('function2'); - ... - $server->handle(); - -.. _zend.soap.server.request_response: - -Anfragen und Antwort Objekte behandeln --------------------------------------- - -.. note:: - - **Fortgeschritten** - - Dieser Abschnitt beschreibt das fortgeschrittene bearbeiten von Anfrage-/Antwort-Optionen und kann übersprungen - werden. - -Die ``Zend\Soap\Server`` Komponente führt Anfrage/Antwort-Bearbeitung automatisch durch. Sie erlaubt es aber diese -zu fangen und Vor- und Nach-bearbeitungen durchzuführen. - -.. _zend.soap.server.request_response.request: - -Anfrage Bearbeitung -^^^^^^^^^^^^^^^^^^^ - -Die ``Zend\Soap\Server::handle()`` Methode nimmt Anfragen vom Standard-Eingabe Stream ('php://input') entgegen. Sie -kann übergangen werden durch die Angabe von optionalen Parametern an die ``handle()`` Methode oder durch setzen -einer Anfrage durch Verwendung der ``setRequest()`` Methode: - -.. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - // Eine Anfrage setzen durch Verwendung des optionalen $request Parameters - $server->handle($request); - ... - // Eine Anfrage setzen durch Verwendung der setRequest() Methode - $server->setRequest(); - $server->handle(); - -Anfrage Objekte können dargestellt werden durch Verwendung der folgenden Dinge: - - - - - DOMDocument (gecastet zu *XML*) - - - DOMNode (Besitzer Dokument wird genommen und zu *XML* gecastet) - - - SimpleXMLElement (gecasted zu *XML*) - - - stdClass (\__toString() wird aufgerufen und geprüft ob es gültiges *XML* ist) - - - string (geprüft ob es gültiges *XML* ist) - - - -Die zuletzt bearbeitete Anfrage kann durch Verwendung der ``getLastRequest()`` Methode als *XML* String empfangen -werden: - -.. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - $server->handle(); - $request = $server->getLastRequest(); - -.. _zend.soap.server.request_response.response: - -Antworten vor-bearbeiten -^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``Zend\Soap\Server::handle()`` Methode wirft die erzeugte Antwort automatisch auf den Ausgabe Stream aus. Das -kann durch Verwendung von ``setReturnResponse()`` mit ``TRUE`` oder ``FALSE`` als Parameter blockiert werden [#]_. -Die erzeugte Antwort wird in diesem Fall durch die ``handle()`` Methode zurückgegeben. - -.. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - // Eine Antwort als Rückgabewert der handle() Methode - // erhalten statt diese auf den Ausgabe Stream zu werfen - $server->setReturnResponse(true); - ... - $response = $server->handle(); - ... - -Die letzte Antwort kann auch mit der ``getLastResponse()`` Methode empfangen werden um Vor-Bearbeitungen -durchzuführen: - -.. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - $server->handle(); - $response = $server->getLastResponse(); - ... - - - -.. [#] Kann später gesetzt werden durch Verwendung der ``setWsdl($wsdl)`` Methode. -.. [#] Optionen können durch Verwendung der ``setOptions($options)`` Methode später gesetzt werden. -.. [#] Optionen können später gesetzt werden indem die ``setOptions($options)`` Methode verwendet wird. -.. [#] Der aktuelle Status des Rückgabe Antwort Flags kann mit der ``setReturnResponse()`` Methode abgefragt - werden. \ No newline at end of file diff --git a/docs/languages/de/modules/zend.soap.wsdl.rst b/docs/languages/de/modules/zend.soap.wsdl.rst deleted file mode 100644 index 0c64c8569..000000000 --- a/docs/languages/de/modules/zend.soap.wsdl.rst +++ /dev/null @@ -1,356 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.wsdl: - -WSDL Zugriffsmethoden -===================== - -.. note:: - - Die ``Zend\Soap\Wsdl`` Klasse wird von der ``Zend\Soap\Server`` Komponente intern verwendet um mit WSDL - Dokumenten zu arbeiten. Trotzdem könnte man die Funktionalität die von dieser Klasse angeboten wird auch für - eigene Zwecke verwendet werden. Das ``Zend\Soap\Wsdl`` Paket enthält sowohl einen Parser als auch einen - Ersteller für WSDL Dokumente. - - Wenn man nicht plant das zu tun, kann dieses Kapitel der Dokumentation übersprungen werden. - -.. _zend.soap.wsdl.constructor: - -Zend\Soap\Wsdl Konstruktor --------------------------- - -Der ``Zend\Soap\Wsdl`` Konstruktor nimmt drei Parameter: - - - - . ``$name``- Name des Web Services der beschrieben wird. - - . ``$uri``-*URI* wo das WSDL vorhanden sein wird (könnte auch eine Referenz zu einer Datei auf dem Dateisystem - sein). - - . ``$strategy``- Optionales Flag das verwendet wird um die Strategie für die Erkennung von komplexen Typen - (Objekte) zu identifizieren. Das war vor der Version 1.7 ein boolscher ``$extractComplexTypes`` und kann aus - Gründen der Rückwärtskompatibilität noch immer als Boolean gesetzt werden. Standardmäßig ist das - Erkennungsverhalten von 1.6 gesetzt. Um mit Strategien für komplexe Typenerkennung weiterzumachen lesen wie - weiter im Kapitel: :ref:`Komplexe Typen hinzufügen `. - - - -.. _zend.soap.wsdl.addmessage: - -Die addMessage() Methode ------------------------- - -Die ``addMessage($name, $parts)`` Methode fügt eine neue Nachrichten Beschreibung zu einem WSDL Dokumetn hinzu -(/definitions/message Element). - -Jede Nachricht korrespondiert zu einer Methode im Sinne von ``Zend\Soap\Server`` und ``Zend\Soap\Client`` -Funktionalität. - -Der ``$name`` Parameter repräsentiert den Namen der Nachricht. - -Der ``$parts`` Parameter ist ein Array von Nachrichten Teilen welche *SOAP* Aufruf Parameter beschreiben. Es ist -ein assoziatives Array: 'part name' (SOAP Aufruf Parameter Name) => 'part type'. - -Das Typ Mapping Management wird durchgeführt indem die ``addTypes()``, ``addTypes()`` und ``addComplexType()`` -Methoden ausgeführt werden (siehe anbei). - -.. note:: - - Nachrichten Teile können entweder 'element' oder 'type' Attribute für das typisieren verwenden (siehe - http://www.w3.org/TR/wsdl#_messages). - - 'element' Attribute müssen zu einem entsprechenden Element von Daten Typ Definition referieren. 'type' zu einem - entsprechenden complexType Eintrag. - - Alle standardmäßigen XSD Typen haben beide 'element' und 'complexType' Definitionen (siehe - http://schemas.xmlsoap.org/soap/encoding/). - - Alle nicht-standardmäßigen Typen, welche hinzugefügt werden können durch verwenden der - ``Zend\Soap\Wsdl::addComplexType()`` Methode, sind beschrieben durch Verwendung des 'complexType' Nodes des - '/definitions/types/schema/' Abschnitts des WSDL Dokuments. - - ``addMessage()`` Methoden verwenden also immer das 'type' Attribut um Typen zu beschreiben. - -.. _zend.soap.wsdl.add_port_type: - -Die addPortType() Methode -------------------------- - -Die ``addPortType($name)`` Methode fügt neue Port Typen zu einem WSDL Dokument (/definitions/portType) mit dem -spezifizierten Port Typ Namen hinzu. - -Es verbindet ein Set von Web Service Methoden die im Sinne der ``Zend\Soap\Server`` Implementation definiert sind. - -Siehe http://www.w3.org/TR/wsdl#_porttypes für Details. - -.. _zend.soap.wsdl.add_port_operation: - -Die addPortOperation() Methode ------------------------------- - -Die *addPortOperation($portType, $name, $input = false, $output = false, $fault = false)* Methode fügt eine neue -Port Operation zum spezifizierten Port Typ des WSDL Dokuments hinzu (/definitions/portType/operation). - -Jede Port Operation korrespondiert zu einer Methode der Klasse (wenn der Web Service auf einer Klasse basiert) oder -Funktion (wenn der Web Service auf einem Set von Methoden basiert) im Sinne der ``Zend\Soap\Server`` -Implementation. - -Sie fügt auch eine korrespondierende Port Operations Nachricht hinzu anhängig von den spezifizierten ``$input``, -``$output`` und ``$fault`` Parametern. - - .. note:: - - Die ``Zend\Soap\Server`` Komponente erzeugt zwei Nachrichten für jede Port Operation wärend das Service das - auf der ``Zend\Soap\Server`` Klasse basiert beschrieben wird: - - - - - Eine Eingabe Nachricht mit dem Namen *$methodName . 'Request'*. - - - Eine Ausgabe Nachricht mit dem Namen *$methodName . 'Response'*. - - - - - -Siehe http://www.w3.org/TR/wsdl#_request-response für Details. - -.. _zend.soap.wsdl.add_binding: - -Die addBinding() Methode ------------------------- - -Die ``addBinding($name, $portType)`` Methode fügt neue Bindungen in das WSDL Dokument ein (/definitions/binding). - -Der 'binding' WSDL Dokument Knoten definiert das Nachrichtenformat und Protokolldetails für Operationen und -Nachrichten die von einem speziellen portType definiert sind (siehe http://www.w3.org/TR/wsdl#_bindings). - -Die Methode erzeugt einen Bindungsknoten und gibt diesen zurück. Dieser kann dann verwendet werden um mit -aktuellen Daten gefüllt zu werden. - -Die ``Zend\Soap\Server`` Implementation verwendet den *$serviceName . 'Binding'* Namen für das 'binding' Element -eines WSDL Dokuments. - -.. _zend.soap.wsdl.add_binding_operation: - -Die addBindingOperation() Methode ---------------------------------- - -Die *addBindingOperation($binding, $name, $input = false, $output = false, $fault = false)* Methode fügt eine -Operation zu einem gebundenen Element mit dem spezifizierten Namen hinzu (/definitions/binding/operation). - -Sie nimmt das *XML_Tree_Node* Objekt das von ``addBinding()`` zurückgegeben wird als Eingabe (``$binding`` -Parameter) um ein 'operation' Element mit Eingabe/Ausgabe/Falsch Einträgen hinzuzufügen abhängig von den -spezifizierten Parametern. - -Die ``Zend\Soap\Server`` Implementation fügt korrespondierende gebundene Einträge für jede Web Service Methode -mit Eingabe und Ausgabe Einträgen hinzu die ein 'soap:body' Element als ' definieren. - -Siehe http://www.w3.org/TR/wsdl#_bindings für Details. - -.. _zend.soap.wsdl.add_soap_binding: - -Die addSoapBinding() Methode ----------------------------- - -Die *addSoapBinding($binding, $style = 'document', $transport = 'http://schemas.xmlsoap.org/soap/http')* Methode -fügt einen *SOAP* Bindung Eintrag ('soap:binding') zum Bindung Element (welches bereits zu einigen Port Typen -verbunden ist) mit dem spezifizierten Stil und Transport hinzu (Die Zend\Soap\Server Implementation verwendet RPC -Stil über *HTTP*). - -Das '/definitions/binding/soap:binding' Element wird verwendet um zu signieren dass das Bindung zum *SOAP* -Protokoll Format gebunden ist. - -Siehe http://www.w3.org/TR/wsdl#_bindings für Details. - -.. _zend.soap.wsdl.add_soap_operation: - -Die addSoapOperation() Methode ------------------------------- - -Die ``addSoapOperation($binding, $soap_action)`` Methode fügt einen *SOAP* Operations Eintrag ('soap:operation') -zum Bindungs Element mit den spezifizierten Aktionen hinzu. Das 'style' Attribut des 'soap:operation' Elements wird -nicht verwendet seit das Programmier Modell (RPC-orientiert oder Dokument-orientiert) die ``addSoapBinding()`` -Methode verwenden kann. - -Das 'soapAction' Attribut des '/definitions/binding/soap:operation' Elements spezifiziert den Wert des *SOAP*\ -Action Headers für diese Operation. Dieses Attribut wird für *SOAP* über *HTTP* benötigt und **darf in keinem -Fall** für andere Transporte spezifiziert werden. - -Die ``Zend\Soap\Server`` Implementation verwendet *$serviceUri . '#' . $methodName* für den *SOAP* Operations -Action Namen. - -Siehe http://www.w3.org/TR/wsdl#_soap:operation für Details. - -.. _zend.soap.wsdl.add_service: - -Die addService() Methode ------------------------- - -Die ``addService($name, $port_name, $binding, $location)`` Methode fügt dem WSDL Dokument ein -'/definitions/service' Element mit dem spezifizierten Web Service Namen, Port Namen, Bindung und Ort hinzu. - -WSDL 1.1 erlaubt es verschiedene Port Typen pro Service zu haben (Sets von Operationen). Diese Fähigkeit wird von -der ``Zend\Soap\Server`` Implementation nicht verwendet und von der ``Zend\Soap\Wsdl`` Klasse nicht unterstützt. - -Die ``Zend\Soap\Server`` Implementation verwendet: - - - - - *$name . 'Service'* als Name des Web Services, - - - *$name . 'Port'* als Name des Port Typs, - - - *'tns:' . $name . 'Binding'* [#]_ als Bindungs Name, - - - Die Skript *URI* [#]_ als eine Service URI für die Web Service Definition bei Verwendung von Klassen. - -wobei ``$name`` der Klassenname für die Web Service Definition ist wenn Klassen verwendet werden und Skript Name -für die Web Service Definition wenn ein Set von Funktionen verwendet wird. - -Siehe http://www.w3.org/TR/wsdl#_services für Details. - -.. _zend.soap.wsdl.types: - -Typ Entsprechung ----------------- - -Die ``Zend_Soap`` WSDL Implementation der Zugriffsmethoden verwendet die folgenden Typ Entsprechungen zwischen -*PHP* und *SOAP* Typen: - - - - - *PHP* Strings <-> *xsd:string*. - - - *PHP* Integer <-> *xsd:int*. - - - *PHP* Float (Fliesskomma) und Double <-> *xsd:float*. - - - *PHP* Boolean <-> *xsd:boolean*. - - - *PHP* Arrays <-> *soap-enc:Array*. - - - *PHP* Objekt <-> *xsd:struct*. - - - *PHP* Klasse <-> basierend auf der Strategie der komplexen Typen (Siehe: :ref:`diesen Abschnitt - `) [#]_. - - - PHP Void <-> Leerer Typ. - - - Wenn der Typ auf irgendeinem Grund zu keinem dieser Typen passt, dann wird *xsd:anyType* verwendet. - -Wo *xsd:* ein "http://www.w3.org/2001/XMLSchema" Namespace ist, ist *soap-enc:* ein -"http://schemas.xmlsoap.org/soap/encoding/" Namespace, und *tns:* ist ein "Ziel Namespace" für das Service. - -.. _zend.soap.wsdl.types.retrieve: - -Empfangen von Typ Informationen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``getType($type)`` Methode kann verwendet werden um ein Mapping für einen spezifizierten *PHP* Typ zu -erhalten: - -.. code-block:: php - :linenos: - - ... - $wsdl = new Zend\Soap\Wsdl('My_Web_Service', $myWebServiceUri); - - ... - $soapIntType = $wsdl->getType('int'); - - ... - class MyClass { - ... - } - ... - $soapMyClassType = $wsdl->getType('MyClass'); - -.. _zend.soap.wsdl.types.add_complex: - -Hinzufügen komplexer Typ Informationen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Die ``addComplexType($type)`` Methode wird verwendet um komplexe Typen (PHP Klassen) zu einem WSDL Dokument -hinzuzufügen. - -Es wird automatisch von der ``getType()`` Methode verwendet und fügt einen korrespondierenden komplexen Typen von -Methodenparametern oder Rückgabetypen hinzu. - -Der Algorithmus für das Erkennen und Aufbauen basiert auf der aktuellen Strategie für die aktive Erkennung von -komplexen Typen. Man kann die Strategie für die Erkennung setzen indem entweder der Klassenname as String -spezifiziert wird, oder indem eine Instanz einer ``Zend\Soap\Wsdl\Strategy\Interface`` Implementation als dritter -Parameter des Konstruktors verwendet wird, oder indem die ``setComplexTypeStrategy($strategy)`` Funktion von -``Zend\Soap\Wsdl`` verwendet wird. Die folgenden Strategien für die Erkennung existieren aktuell: - -- Klasse ``Zend\Soap\Wsdl\Strategy\DefaultComplexType``: Standardmäßig aktiviert (wenn dem Konstruktor kein - dritter Parameter gesetzt wird). Er iteriert über die öffentlichen Attribute eines Klassentyps und registriert - Sie als Untertypen des komplexen Objekttyps. - -- Klasse ``Zend\Soap\Wsdl\Strategy\AnyType``: Castet alle komplexen Typen in einen einfachen XSD Typ xsd:anyType. - Vorsicht ist angeraten da diese Abkürzung für die Erkennung von komplexen Typen kann warscheinlich nur von lose - typisierten Sprachen wie *PHP* erfolgreich behandelt werden. - -- Klasse ``Zend\Soap\Wsdl\Strategy\ArrayOfTypeSequence``: Diese Strategie erlaubt es die Rückgabeparameter mit - diesen Typen zu spezifizieren: *int[]* oder *string[]*. Ab dem Zend Framework Version 1.9 können beide, sowohl - einfache *PHP* Typen wie Int, String, Boolean, Float sowie Objekte und Arrays von Objekten behandelt werden. - -- Klasse ``Zend\Soap\Wsdl\Strategy\ArrayOfTypeComplex``: Diese Strategie erlaubt die Erkennung von sehr komplexen - Arrays von Objekten. Objekttypen werden basierend auf ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` erkannt und - ein Array wird um diese Definition gewrappt. - -- Klasse ``Zend\Soap\Wsdl\Strategy\Composite``: Diese Strategie kann alle Strategien kombinieren indem *PHP* - komplexe Typen (Klassennamen) zu der gewünschten Strategie über die ``connectTypeToStrategy($type, $strategy)`` - Methode verbunden werden. Eine komplette Typemap kann dem Contructor als Array, mit ``$type``-> ``$strategy`` - Paaren angegeben werden. Der zweite Parameter spezifiziert die Standardstrategie die verwendet wird wenn ein - unbekannter Typ hinzugefügt werden soll. Diese Parameter ist standardmäßig die - ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` Strategie. - -Die ``addComplexType()`` Methode erstellt ein '/definitions/types/xsd:schema/xsd:complexType' Element für jeden -beschriebenen komplexen Typen mit dem Namen der spezifizierten *PHP* Klasse. - -Die Klassen Eigenschaften **MÜSSEN** ein Docblock Kapitel mit den beschriebenen *PHP* Typen haben damit die -Eigenschaft in die WSDL Beschreibung hinzugefügt wird. - -``addComplexType()`` prüft ob der Typ bereits im Typ Kapitel des WSDL Dokuments beschrieben wird. - -Es verhindert Duplikate wenn diese Methode zwei oder mehrmals aufgerufen wird und auch Rekursionen im Kapitel der -Typ Definitionen. - -Siehe http://www.w3.org/TR/wsdl#_types für Details. - -.. _zend.soap.wsdl.add_documentation: - -Die addDocumentation() Methode ------------------------------- - -Die ``addDocumentation($input_node, $documentation)`` Methode fügt menschlich lesbare Dokumentation hinzu indem -das optionale 'wsdl:document' Element verwendet wird. - -Das '/definitions/binding/soap:binding' Element wird verwendet um zu signieren das die Bindung zum *SOAP* Protokoll -Format gebunden wurde. - -Siehe http://www.w3.org/TR/wsdl#_documentation für Details. - -.. _zend.soap.wsdl.retrieve: - -Das endgültige WSDL Dokument erhalten -------------------------------------- - -Die ``toXML()``, ``toDomDocument()`` und *dump($filename = false)* Methoden können verwendet werden um das WSDL -Dokument als *XML*, DOM Struktur oder Datei zu erhalten. - - - - -.. [#] *'tns:' namespace* wird als Skript *URI* definiert (*'http://' .$_SERVER['HTTP_HOST'] . - $_SERVER['SCRIPT_NAME']*). -.. [#] *'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']* -.. [#] Standardmäßig wird ``Zend\Soap\Wsdl`` mit der Klasse ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` - als Erkennungsalgorithmus für komplexe Typen erstellt. Der erste Parameter des AutoDiscover - Constructors nimmt jede Strategie für komplexe Typen die ``Zend\Soap\Wsdl\Strategy\Interface`` - implementiert oder einen String mit dem Namen dieser Klasse. Für Rückwärtskompatibilität mit den - dem Boolean ``$extractComplexType`` werden Variablen auf dem folgenden Weg geparst: Bei ``TRUE``, wird - ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` verwendet, und bei ``FALSE`` - ``Zend\Soap\Wsdl\Strategy\AnyType``. \ No newline at end of file diff --git a/docs/languages/de/modules/zend.tag.cloud.rst b/docs/languages/de/modules/zend.tag.cloud.rst deleted file mode 100644 index 059cc4649..000000000 --- a/docs/languages/de/modules/zend.tag.cloud.rst +++ /dev/null @@ -1,131 +0,0 @@ -.. EN-Revision: none -.. _zend.tag.cloud: - -Zend\Tag\Cloud -============== - -``Zend\Tag\Cloud`` ist der Darstellungs-Teil von ``Zend_Tag``. Standardmäßig kommt Sie mit einem Set von *HTML* -Dekoratoren welche es erlauben Tag Wolken für WebSites zu erstellen, bietet aber auch zwei abstrakte Klassen für -die Erstellung eigener Dekoratore, um zum Beispiel Tag Wolken in *PDF* Dokumenten zu erstellen. - -Man kann ``Zend\Tag\Cloud`` entweder programmtechnisch instanziieren und konfigurieren, oder komplett über ein -Array oder eine Instanz von ``Zend_Config``. Die vorhandenen Optionen sind: - -- ``cloudDecorator``: definiert den Dekorator für die Wolke. Das kann entweder der Name der Klasse sein, die vom - PluginLoader geladen werden soll, eine Instanz von ``Zend\Tag\Cloud\Decorator\Cloud``, oder ein Array das den - String 'decorator' enthält, und optional ein 'options' Array, welches an den Contructor des Dekorators - übergeben wird. - -- ``tagDecorator``: definiert den Dekorator für individuelle Tags. Das kann entweder der Name der Klasse sein, die - vom PluginLoader geladen werden soll, eine Instanz von ``Zend\Tag\Cloud\Decorator\Tag``, oder ein Array das den - String 'decorator' enthält, und optional ein 'options' Array, welches an den Contructor des Dekorators - übergeben wird. - -- ``pluginLoader``: ein anderer Plugin Loader der zu verwenden ist. Muß eine Instanz von - ``Zend\Loader\PluginLoader\Interface`` sein. - -- ``prefixPath``: Präfix Pfade die dem Plugin Loader hinzugefügt werden. Muß ein Array sein das die Schlüssel - prefix und path oder mehrere Arrays enthält, welche die Schlüssel prefix und path enthalten. Ungültige - Elemente werden übersprungen. - -- ``pluginLoader``: ein anderer Plugin Loader der verwendet wird. Muß eine Instanz von - ``Zend\Loader\PluginLoader\Interface`` sein. - -- ``prefixPath``: Präfix Pfad der dem Plugin Loader hinzugefügt wird. Muß ein Array sein das die Schlüssel - prefix und path enthält, oder mehrere Array welche die Schlüssel prefix und path enthalten. Ungültige Elemente - werden übersprungen. - -- ``itemList``: eine andere Liste von Elementen die verwendet wird. Muß eine Instanz von ``Zend\Tag\ItemList`` - sein. - -- ``tags``: eine Liste von Tags die der Wolke zugeordnet werden. Jedes Tag muß entweder ``Zend\Tag\Taggable`` - implementieren oder ein Array sein welches verwendet werden kann um ``Zend\Tag\Item`` implementieren. - -.. _zend.tag.cloud.example.using: - -.. rubric:: Verwenden von Zend\Tag\Cloud - -Dieses Beispiel zeigt ein grundsätzliches Beispiel davon, wie eine Tag Wolke erstellt, Ihr mehrere Tags -hinzugefügt, und Sie letztendlich dargestellt wird. - -.. code-block:: php - :linenos: - - // Die Wolke erstellen und Ihr statische Tags zuordnen - $cloud = new Zend\Tag\Cloud(array( - 'tags' => array( - array('title' => 'Code', 'weight' => 50, - 'params' => array('url' => '/tag/code')), - array('title' => 'Zend Framework', 'weight' => 1, - 'params' => array('url' => '/tag/zend-framework')), - array('title' => 'PHP', 'weight' => 5, - 'params' => array('url' => '/tag/php')), - ) - )); - - // Die Wolke darstellen - echo $cloud; - -Das gibt die Tag Wolke mit drei Tags aus, welche mit den standardmäßigen Schriftgrößen ausgebreitet wird. - -.. _zend.tag.cloud.decorators: - -Dekoratore ----------- - -``Zend\Tag\Cloud`` benötigt zwei Typen von Dekoratoren die fähig sein müssen eine Tag Wolke darzustellen. Das -beinhaltet einen Dekorator welcher ein einzelnes Tag darstellt, sowie einen Dekorator welcher die umgebende Wolke -darstellt. ``Zend\Tag\Cloud`` liefert ein standardmäßiges Set von Dekoratoren für die Formatierung einer Tag -Wolke in *HTML*. Dieses Set wird eine Tag Wolke standardmäßig als ul/li-Liste darstellen, und diese mit -unterschiedlichen Schriftgrößen, abhängig vom Gewicht der Werte Ihrer zugeordneten Tags, versehen. - -.. _zend.tag.cloud.decorators.htmltag: - -Der HTML Tag Dekorator -^^^^^^^^^^^^^^^^^^^^^^ - -Der *HTML* Tag Dekorator stellt standardmäßig jedes Tag in einem Anker Element dar, umgeben von einem li Element. -Der Anker selbst ist fixiert und kann nicht geändert werden; die umgebenden Elemente können hingegen geändert -werden. - -.. note:: - - **URL Parameter** - - Da der *HTML* Tag Dekorator immer den Titel des Tags mit einem Anker umgibt, sollte man einen *URL* Parameter, - für jedes in Ihm verwendete Tag, definiert werden. - -Der Tag Dekorator kann entweder unterschiedliche Schriftgrößen über die Anker, oder eine definierte Liste von -Klassennamen, verteilen. Wenn Optionen für eine dieser Möglichkeiten gesetzt werden, werden die -korrespondierenden automatisch aktiviert. Die folgenden Konfigurationsoptionen sind vorhanden: - -- ``fontSizeUnit``: definiert die Einheit die für alle Schriftgrößen verwendet wird. Die möglichen Werte sind: - em, ex, px, in, cm, mm, pt, pc und %. - -- ``minFontSize``: definiert die minimale Schriftgröße der Tags (muß ein Integer sein). - -- ``maxFontSize``: definiert die maximale Schriftgröße der Tags (muß ein Integer sein). - -- ``classList``: ein Array von Klassen die an die Tags vergeben werden soll. - -- ``htmlTags``: ein Array von *HTML* Tags die den Anker umgeben. Jedes Element kann entweder ein String sein, - welches als Elementtyp verwendet wird, oder ein Array das eine Liste von Attributen für das Element enthält, - welches wiederum als Schlüssel/Werte Paar definiert ist. In diesem Fall wird der Array Schlüssel als Elementtyp - verwendet. - -.. _zend.tag.cloud.decorators.htmlcloud: - -HTML Cloud Dekorator -^^^^^^^^^^^^^^^^^^^^ - -Der *HTML* Cloud Dekorator umgibt die *HTML* Tags standardmäßig mit einem ul-Element und fügt keine Trennung -hinzu. Wie im Tag Dekorator, können mehrere umgebende *HTML* Tags und zusätzlich ein Trennzeichen definiert -werden. Die vorhandenen Optionen sind: - -- ``separator``: definiert das Trennzeichen welches zwischen alle Tags platziert wird. - -- ``htmlTags``: ein Array von *HTML* Tags, welche alle Tags umgeben. Jedes Element kann entweder ein String sein, - welches als Elementtyp verwendet wird, oder ein Array das eine Liste von Attributen für das Element enthält, - und als Schlüssel/Werte Paar definiert ist. In diesem Fall wird der Arrayschlüssel als Elementtyp verwendet. - - diff --git a/docs/languages/de/modules/zend.tag.introduction.rst b/docs/languages/de/modules/zend.tag.introduction.rst deleted file mode 100644 index c3bb8579c..000000000 --- a/docs/languages/de/modules/zend.tag.introduction.rst +++ /dev/null @@ -1,48 +0,0 @@ -.. EN-Revision: none -.. _zend.tag.introduction: - -Einführung -========== - -``Zend_Tag`` ist eine Komponenten Suite welche zwei Klassen anbietet um mit Tags zu arbeiten, ``Zend\Tag\Item`` und -``Zend\Tag\ItemList``. Zusätzlich kommt sie mit dem Interface ``Zend\Tag\Taggable``, welches es erlaubt jedes -eigene Modell als markiertes Element, in Verbindung mit ``Zend_Tag``, zu verwenden. - -``Zend\Tag\Item`` ist eine grundsätzliche Implementation eines markierten Elements, welche mit der essentiellen -Funktionalität kommt, die notwendig ist um mit der ``Zend_Tag`` Suite zu arbeiten. Ein markierbares Element -besteht immer aus einem Titel und einem relativen Gewicht (z.B. die Anzahl der Vorkommnisse). Es speichert auch -Parameter welche von den unterschiedlichen Sub-Komponenten von ``Zend_Tag`` verwendet werden. - -Um mehrere Element miteinander zu gruppieren, existiert ``Zend\Tag\ItemList`` als Array Iterator und bietet -zusätzliche Funktionalitäten um die Werte des absoluten Gewichts, basierend auf dem angegebenen relativen Gewicht -jedes Elements in diesem, zu kalkulieren. - -.. _zend.tag.example.using: - -.. rubric:: Verwenden von Zend_Tag - -Dieses Beispiel zeigt wie eine Liste von Tags erstellt, und Werte des absoluten Gewichts auf diesen verteilt werden -kann. - -.. code-block:: php - :linenos: - - // Erstellen des Elementliste - $list = new Zend\Tag\ItemList(); - - // Hinzufügen der Tags zur Elementliste - $list[] = new Zend\Tag\Item(array('title' => 'Code', 'weight' => 50)); - $list[] = new Zend\Tag\Item(array('title' => 'Zend Framework', 'weight' => 1)); - $list[] = new Zend\Tag\Item(array('title' => 'PHP', 'weight' => 5)); - - // Absolute Werte auf den Elementen verteilen - $list->spreadWeightValues(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); - - // Die Werte mit ihren absoluten Werten ausgeben - foreach ($list as $item) { - printf("%s: %d\n", $item->getTitle(), $item->getParam('weightValue')); - } - -Das wird die drei Elemente Code, Zend Framework und *PHP*, mit den absoluten Werten 10, 1 und 2, ausgeben. - - diff --git a/docs/languages/de/modules/zend.text.figlet.rst b/docs/languages/de/modules/zend.text.figlet.rst deleted file mode 100644 index 5232ef074..000000000 --- a/docs/languages/de/modules/zend.text.figlet.rst +++ /dev/null @@ -1,89 +0,0 @@ -.. EN-Revision: none -.. _zend.text.figlet: - -Zend\Text\Figlet -================ - -``Zend\Text\Figlet`` ist eine Komponente die es Entwicklern erlaubt einen sogenannten FIGlet Text zu erstellen. Ein -FIGlet Text ist ein String der eine *ASCII* Kunst repräsentiert. FIGlets sind ein spezielles Schriftformat, das -FLT (FigLet Font) genannt wird. Standardmäßig wird eine Schriftart mit ``Zend\Text\Figlet`` ausgeliefert, aber -man kann zusätzliche Schriftarten unter http://www.figlet.org herunterladen. - -.. note:: - - **Komprimierte Schriftarten** - - ``Zend\Text\Figlet`` unterstützt gezippte Schriftarten. Das bedeutet das man eine ``.flf`` Datei nehmen und - diese gzip-pen kann. Um ``Zend\Text\Figlet`` zu erlauben diese Datei zu erkennen, muß die gezippte Schriftart - die Erweiterung ``.gz`` haben. Weiters, um die gezippte Schriftart verwenden zu können muß in *PHP* die - Erweiterung GZIP aktiviert sein. - -.. note:: - - **Encoding** - - ``Zend\Text\Figlet`` erwartet das Strings standardmäßig UTF-8 kodiert sind. Wenn das nicht der Fall ist, kann - die Zeichenkodierung als zweiter Parameter an die ``render()`` Methode übergeben werden. - -Man kann mehrere Optionen für ein FIGlet definieren. Wenn ein ``Zend\Text\Figlet`` instanziiert wird, kann ein -Array oder eine Instanz von ``Zend_Config`` übergeben werden. - - - - - ``font``- Definiert die Schriftart die für die Darstellung verwendet werden soll. Wenn keine definiert wird, - wird die eingebaute Schriftart verwendet. - - - ``outputWidth``- Definiert die maximale Breite des Ausgabestrings. Das wird für die Trennung von Wörtern - verwendet sowie für die Feineinstellung. Achtung vor zu kleinen Werten, da diese zu undefiniertem Verhalten - führen können. Der Standardwert ist 80. - - - ``handleParagraphs``- Ein boolscher Wert welcher anzeigt wie neue Zeilen zu handhaben sind. Wenn er auf - ``TRUE`` gesetzt wird, werden einzelne neue Zeilen ignoriert und stattdessen als einzelnes Leerzeichen - behandelt. Nur mehrere neue Zeilen werden als solche behandelt. Der Standardwert ist ``FALSE``. - - - ``justification``- Kann einer der Werte von ``Zend\Text\Figlet::JUSTIFICATION_*`` sein. Es gibt - ``JUSTIFICATION_LEFT``, ``JUSTIFICATION_CENTER`` und ``JUSTIFICATION_RIGHT``. Die standardmäßige Justierung - ist mit dem Wert ``rightToLeft`` definiert. - - - ``rightToLeft``- Definiert in welche Richtung geschrieben wird. Das kann entweder - ``Zend\Text\Figlet::DIRECTION_LEFT_TO_RIGHT`` oder ``Zend\Text\Figlet::DIRECTION_RIGHT_TO_LEFT`` sein. - Standardmäßig wird die Einstellung der Datei der Schriftart verwendet. Wenn die Justierung nicht definiert - ist, wird ein Text der von rechts-nach-links geschrieben wird automatisch nach rechts gerückt. - - - ``smushMode``- Ein Integer-Bitfeld welches definiert wie einzelne Zeichen ineinander gesmusht (verflochten) - werden. Das kann die Summe von mehreren Werten von ``Zend\Text\Figlet::SM_*`` sein. Es gibt die folgenden - Smush-Modi: SM_EQUAL, SM_LOWLINE, SM_HIERARCHY, SM_PAIR, SM_BIGX, SM_HARDBLANK, SM_KERN und SM_SMUSH. Ein Wert - von 0 schaltet das Smushing nicht aus sondern erzwingt die Anwendung von SM_KERN, wärend es ein Wert von -1 - ausschaltet. Eine Erklärung der verschiedenen Smush-Modi kann `hier`_ gefunden werden. Die Smush-Mode Option - wird normalerweise nur von Schriftart-Designer verwendet um die verschiedenen Layoutmodi mit einer neuen - Schriftart zu testen. - - - -.. _zend.text.figlet.example.using: - -.. rubric:: Verwendung von Zend\Text\Figlet - -Dieses Beispiel zeigt die einfache Verwendung von ``Zend\Text\Figlet`` um einen einfachen FIGlet Text zu erstellen: - -.. code-block:: php - :linenos: - - $figlet = new Zend\Text\Figlet(); - echo $figlet->render('Zend'); - -Angenommen es wird eine Monospace Schriftart verwenden dann würde das Beispiel wie folgt aussehen: - -.. code-block:: text - :linenos: - - ______ ______ _ __ ______ - |__ // | ___|| | \| || | __ \\ - / // | ||__ | ' || | | \ || - / //__ | ||___ | . || | |__/ || - /_____|| |_____|| |_|\_|| |_____// - `-----`' `-----` `-` -`' -----` - - - -.. _`hier`: http://www.jave.de/figlet/figfont.txt diff --git a/docs/languages/de/modules/zend.text.table.rst b/docs/languages/de/modules/zend.text.table.rst deleted file mode 100644 index a6c3007f0..000000000 --- a/docs/languages/de/modules/zend.text.table.rst +++ /dev/null @@ -1,117 +0,0 @@ -.. EN-Revision: none -.. _zend.text.table.introduction: - -Zend\Text\Table -=============== - -``Zend\Text\Table`` ist eine Komponente für die Erstellung von Text-basierenden Tabellen welche mit -unterschiedlichen Dekoratoren arbeitet. Das kann hilfreich sein, wenn man entweder strukturierte Daten in einer -Textemail verwenden will, welche normalerweise mit monospaced Schriftarten geschrieben sind, oder um -Tabelleninformationen in einer CLI Anwendung darzustellen. ``Zend\Text\Table`` unterstützt mehrzeilige Spalten, -Colspan und auch Ausrichtung. - -.. note:: - - **Kodierung** - - ``Zend\Text\Table`` erwartet die Strings standardmäßig als UTF-8 kodiert. Wenn das nicht der Fall ist, kann - entweder die Zeichenkodierung als Parameter an den ``constructor()`` übergeben werden, oder an die - ``setContent()`` Methode von ``Zend\Text\Table\Column``. Wenn man im kompletten Prozess eine andere Kodierung - verwendet, kann man die standardmäßige Eingabekodierung mit ``Zend\Text\Table::setInputCharset($charset)`` - setzen. Im Fall, das man eine andere Ausgabekodierung für die Tabelle benötigt, kann diese mit - ``Zend\Text\Table::setOutputCharset($charset)`` gesetzt werden. - -Ein ``Zend\Text\Table`` Objekt besteht aus Zeilen, die Spalten enthalten, repräsentiert durch -``Zend\Text\Table\Row`` und ``Zend\Text\Table\Column``. Wenn eine Tabelle erstellt wird, kann ein Array mit -Optionen für die Tabelle angegeben werden: Diese sind: - - - - - ``columnWidths`` (required): Ein Array das alle Spalten mit Ihrer Breite in Zeichen definiert. - - - ``decorator``: Der Dekorator der für die Tabellenränder verwendet wird. Der Standard ist **unicode**, aber - man kann auch **ascii** spezifizieren, oder eine Instanz eines eigenen Dekoratorobjekts angeben. - - - ``padding``: Die linke und rechte Füllung innerhalb der Spalten in Zeichen. Die Standardfüllung ist Null. - - - ``AutoSeparate``: Der Weg auf dem Zeilen mit horizontalen Linien getrennt werden. Der Standard ist eine - Trennung zwischen allen Zeilen. Das ist als Bitmaske definiert die ein oder mehrere der folgenden Konstanten - von ``Zend\Text\Table`` haben kann: - - - - - ``Zend\Text\Table::AUTO_SEPARATE_NONE`` - - - ``Zend\Text\Table::AUTO_SEPARATE_HEADER`` - - - ``Zend\Text\Table::AUTO_SEPARATE_FOOTER`` - - - ``Zend\Text\Table::AUTO_SEPARATE_ALL`` - - Wobei der Tabellenheader immer die erste Zeile, und der Tabellenfooter immer die letzte Zeile ist. - - - -Zeilen werden zur Tabelle einfach hinzugefügt indem eine neue Instanz von ``Zend\Text\Table\Row`` erstellt, und -der Tabelle über die ``appendRow()`` Methode angehängt wird. Zeilen selbst haben keine Optionen. Man kann der -``appendRow()`` Methode auch direkt auch ein Array geben, welches dann automatisch in ein Zeilenobjekt konvertiert -wird, welches mehrere Spaltenobjekte enthält. - -Auf dem gleichen Weg kann man Spalten zu Zeilen hinzufügen. Man erstellt eine neue Instanz von -``Zend\Text\Table\Column`` und setzt dann entweder die Zeilenoptionen im Constructor, oder später mit den -``set*()`` Methoden. Der erste Parameter ist der Inhalt der Spalte, welcher mehrere Zeilen haben kann, welche im -besten Fall einfach durch das '\\n' Zeichen getrennt sind. Der zweite Parameter definiert die Ausrichtung, welche -standardmäßig 'left' ist, und eine der Klassenkonstanten von ``Zend\Text\Table\Column`` sein kann: - - - - - ``ALIGN_LEFT`` - - - ``ALIGN_CENTER`` - - - ``ALIGN_RIGHT`` - -Der dritte Parameter ist die Colspan der Zeile. Wenn man, zum Beispiel, "2" als Colspan definiert, wird die Spalte -über 2 Spalten der Tabelle gespannt. Der letzt Parameter definiert die Kodierung des Inhalts, welche angegeben -werden sollte, wenn der Inhalt weder ASCII noch UTF-8 ist. Um die Spalte zur Zeile hinzuzufügen, muß einfach -``appendColumn()`` im Zeilenobjekt, mit dem Spaltenobjekt als Parameter, aufgerufen werden. Alternativ kann ein -String direkt an die ``appendColumn()`` Methode übergeben werden. - -Um die Tabelle letztendlich darzustellen, kann man entweder die ``render()`` Methode der Tabelle verwenden, oder -die magische ``__toString()`` Methode der Tabelle, indem man ``echo $table;`` oder ``$tableString = (string) -$table`` ausführt. - -.. _zend.text.table.example.using: - -.. rubric:: Verwenden von Zend\Text\Table - -Ein Beispiel zeigt die grundsätzliche Verwendung von ``Zend\Text\Table`` um eine einfache Tabelle zu erstellen: - -.. code-block:: php - :linenos: - - $table = new Zend\Text\Table(array('columnWidths' => array(10, 20))); - - // Entweder Einfach - $table->appendRow(array('Zend', 'Framework')); - - // Oder wortreich - $row = new Zend\Text\Table\Row(); - - $row->appendColumn(new Zend\Text\Table\Column('Zend')); - $row->appendColumn(new Zend\Text\Table\Column('Framework')); - - $table->appendRow($row); - - echo $table; - -Das führt zur folgenden Ausgabe: - -.. code-block:: text - :linenos: - - ┌──────────┬────────────────────┐ - │Zend │Framework │ - └──────────┴────────────────────┘ - - diff --git a/docs/languages/de/modules/zend.uri.rst b/docs/languages/de/modules/zend.uri.rst deleted file mode 100644 index 3a956e6c3..000000000 --- a/docs/languages/de/modules/zend.uri.rst +++ /dev/null @@ -1,235 +0,0 @@ -.. EN-Revision: none -.. _zend.uri.chapter: - -Zend_Uri -======== - -.. _zend.uri.overview: - -Überblick ---------- - -``Zend_Uri`` ist eine Komponente, die das Verändern und Validieren von `Uniform Resource Identifiers`_ (URIs) -unterstützt. ``Zend_Uri`` existiert hauptsächlich, um andere Komponenten wie z.B. ``Zend\Http\Client`` zu -unterstützen, aber ist auch als eigenständiges Hilfsmittel nützlich. - -*URI*\ s beginnen immer mit einem Schema, gefolgt von einem Doppelpunkt. Der Aufbau der vielen unterschiedlichen -Schemata unterscheidet sich erheblich. Die ``Zend_Uri`` stellt eine Fabrik (Factory) bereit, die eine Unterklasse -von sich selber zurück gibt, die auf das entsprechende Schema spezialisiert ist. Diese Unterklasse heißt -``Zend\Uri\``, wobei **** das Schema in Kleinbuchstaben mit einem Großbuchstaben am Anfang -darstellt. Eine Ausnahme dieser Regel ist *HTTPS*, das auch von ``Zend\Uri\Http`` verarbeitet wird. - -.. _zend.uri.creation: - -Eine neue URI erstellen ------------------------ - -``Zend_Uri`` erstellt eine neue *URI* von Grund auf, wenn nur das Schema an ``Zend\Uri\Uri::factory()`` übergeben -wurde. - -.. _zend.uri.creation.example-1: - -.. rubric:: Erstellen einer neuen URI mit Zend\Uri\Uri::factory() - -.. code-block:: php - :linenos: - - // Um eine neue URI von Grund auf zu erstellen, übergebe nur das Schema - $uri = Zend\Uri\Uri::factory('http'); - - // $uri instanceof Zend\Uri\Http - -Um eine neue *URI* von Grund auf zu erstellen, übergibt man nur das Schema an ``Zend\Uri\Uri::factory()`` [#]_. Wenn -ein nicht unterstütztes Schema übergeben, und keine Schema-spezifische Klasse angegeben wird, dann wird eine -``Zend\Uri\Exception`` ausgeworfen. - -Wenn das Schema oder die übergebene *URI* unterstützt wird, gibt ``Zend\Uri\Uri::factory()`` eine Unterklasse von -sich selbst zurück, die auf das zu erstellende Schema spezialisiert ist. - -Erstellen neuer eigener URI Klassen -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Beginnend mit Zend Framework 1.10.5 kann man eine eigene Klasse spezifizieren welche, wenn Sie als zweiter -Parameter der Methode ``Zend\Uri\Uri::factory()`` angegeben wird, verwendet wird wenn man eine Zend_Uri Instanz -erstellt. Das erlaubt es Zend_Uri zu erweitern und eigene URI Klassen zu erstellen, und neue URI Objekte zu -instanzieren basierend auf den eigenen Klassen. - -Der zweite Parameter welcher an ``Zend\Uri\Uri::factory()`` übergeben wird muss ein String sein mit dem Namen der -Klasse welche ``Zend_Uri`` erweitert. Diese Klasse muss entweder bereits geladen sein, oder geladen werden können -indem ``Zend\Loader\Loader::loadClass()`` verwendet wird - deshalb muss es den Konventionen für Zend Framework Klassen -und Dateien folgen und muss im include_path sein. - -.. _zend.uri.creation.custom.example-1: - -.. rubric:: Erstellen eine URI durch Verwendung einer eigenen Klasse - -.. code-block:: php - :linenos: - - // Erstellt eine neue 'ftp' URI basierend auf einer eigenen Klasse - $ftpUri = Zend\Uri\Uri::factory( - 'ftp://user@ftp.example.com/path/file', - 'MyLibrary_Uri_Ftp' - ); - - // $ftpUri ist eine Instanz von MyLibrary_Uri_Ftp, welche eine Unterklasse von Zend_Uri ist - -.. _zend.uri.manipulation: - -Verändern einer vorhandenen URI -------------------------------- - -Um eine vorhandene *URI* zu verändern, übergibt man die komplette *URI* an ``Zend\Uri\Uri::factory()``. - -.. _zend.uri.manipulation.example-1: - -.. rubric:: Verändern einer vorhandenen URI mit Zend\Uri\Uri::factory() - -.. code-block:: php - :linenos: - - // Um eine vorhandene URI zu verändern, übergibt man diese - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - // $uri instanceof Zend\Uri\Http - -Die *URI* wird analysiert und validiert. Wenn sie als ungültig erkannt wird, wird sofort eine -``Zend\Uri\Exception`` geworfen. Andernfalls gibt ``Zend\Uri\Uri::factory()`` eine Unterklasse von sich selbst zurück, -die auf das zu verändernde Schema spezialisiert ist. - -.. _zend.uri.validation: - -URI Validierung ---------------- - -Die ``Zend\Uri\Uri::check()`` Methode kann verwendet werden, wenn nur das Validieren einer vorhandenen *URI* benötigt -wird. - -.. _zend.uri.validation.example-1: - -.. rubric:: URI Validierung mit Zend\Uri\Uri::check() - -.. code-block:: php - :linenos: - - // Überprüfe, ob eine übergebene URI wohlgeformt ist - $valid = Zend\Uri\Uri::check('http://uri.in.question'); - - // $valid ist TRUE für eine valide URI, andernfalls FALSE - -``Zend\Uri\Uri::check()`` gibt einen Boolschen Wert zurück was bequemer ist als ``Zend\Uri\Uri::factory()`` zu verwenden -und die Exception zu fangen. - -.. _zend.uri.validation.allowunwise: - -"Unwise" Zeichen in URIs erlauben -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Standardmäßig wird ``Zend_Uri`` die folgenden Zeichen nicht akzepzieren: **"{", "}", "|", "\", "^", "`"**. Diese -Zeichen sind durch die *RFC* als "unwise" definiert und deshalb ungültig; trotzdem, akzeptieren viele -Implementierungen diese Zeichen als gültig. - -``Zend_Uri`` kann so eingestellt werden, dass es diese "unwise" Zeichen akzeptiert. Hierzu muss die Option -'allow_unwise' Option durch Verwendung von ``Zend\Uri\Uri::setConfig()`` auf ein boolsches ``TRUE`` gesetzt werden: - -.. _zend.uri.validation.allowunwise.example-1: - -.. rubric:: Spezielle Zeichen in URIs erlauben - -.. code-block:: php - :linenos: - - // Enthält das '|' Symbol - // Normal würde das false zurückgeben: - $valid = Zend\Uri\Uri::check('http://example.com/?q=this|that'); - - // Trotzdem kann man diese "unwise" Zeichen erlauben - Zend\Uri\Uri::setConfig(array('allow_unwise' => true)); - - // Gibt 'true' zurück - $valid = Zend\Uri\Uri::check('http://example.com/?q=this|that'); - - // Setzt den Wert 'allow_unwise' auf das Standardmäßige FALSE zurück - Zend\Uri\Uri::setConfig(array('allow_unwise' => false)); - -.. note:: - - ``Zend\Uri\Uri::setConfig()`` setzt Konfigurationsoptionen global. Es wird, wie im obigen Beispiel, empfohlen die - 'allow_unwise' Option auf '``FALSE``' zurückzusetzen, solange man unwise Zeichen immer global erlauben will. - -.. _zend.uri.instance-methods: - -Allgemeine Instanzmethoden --------------------------- - -Jede Instanz einer ``Zend_Uri`` Unterklasse (z.B. ``Zend\Uri\Http``) hat verschiedene Instanzmethoden, die für die -Verwendung mit jeglicher *URI* nützlich sind. - -.. _zend.uri.instance-methods.getscheme: - -Das Schema der URI erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Das Schema der *URI* ist der Teil der *URI* vor dem Doppelpunkt. Zum Beispiel ist 'http' das Schema von -``http://www.zend.com``. - -.. _zend.uri.instance-methods.getscheme.example-1: - -.. rubric:: Das Schema eines Zend\Uri\* Objektes erhalten - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - $scheme = $uri->getScheme(); // "http" - -Die ``getScheme()`` Instanzmethode gibt nur das Schema des *URI* Objektes zurück. - -.. _zend.uri.instance-methods.geturi: - -Die komplette URI erhalten -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. _zend.uri.instance-methods.geturi.example-1: - -.. rubric:: Die komplette URI eines Zend\Uri\* Objektes erhalten - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - echo $uri->getUri(); // "http://www.zend.com" - -Die ``getUri()`` Methode gibt den String zurück, der die komplette *URI* repräsentiert. - -.. _zend.uri.instance-methods.valid: - -Die URI validieren -^^^^^^^^^^^^^^^^^^ - -``Zend\Uri\Uri::factory()`` validiert immer jede übergebene *URI* und wird keine ``Zend_Uri`` Unterklasse -instanzieren, wenn die übergebene *URI* ungültig ist. Dennoch ist es nach der Instanzierung der ``Zend_Uri`` -Unterklasse für eine neue oder eine bestehende *URI* möglich, dass die *URI* später ungültig wird, nachdem sie -verändert worden ist. - -.. _zend.uri.instance-methods.valid.example-1: - -.. rubric:: Ein Zend\Uri\* Object validieren - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - $isValid = $uri->valid(); // TRUE - -Die ``valid()`` Instanzmethode ermöglicht es, das *URI* Objekt auf Gültigkeit zu überprüfen. - - - -.. _`Uniform Resource Identifiers`: http://www.w3.org/Addressing/ - -.. [#] Zum Zeitpunkt des Schreibens bietet ``Zend_Uri`` nur eingebaute Unterstützung für die Schemata *HTTP* und - *HTTPS* \ No newline at end of file diff --git a/docs/languages/de/modules/zend.validator.barcode.rst b/docs/languages/de/modules/zend.validator.barcode.rst deleted file mode 100644 index 4d04d0940..000000000 --- a/docs/languages/de/modules/zend.validator.barcode.rst +++ /dev/null @@ -1,288 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.set.barcode: - -Barcode -======= - -``Zend\Validate\Barcode`` erlaubt es zu prüfen ob ein gegebener Wert als Barcode repräsentiert werden kann. - -``Zend\Validate\Barcode`` unterstützt viele Barcode Standards und kann sehr einfach mit prorietären Barcode -Implementationen erweitert werden. Die folgenden Barcode Standards werden unterstützt: - -- **CODE25**: Oft auch "Two of Five" oder "Code 25 Industrial" genannt. - - Dieser Barcode hat keine Begrenzung der Länge. Es unterstützt nur Ziffern, und die letzte Ziffer kann eine - optionale Checksumme sein welche durch Modulo 10 berechnet wird. Dieser Standard sehr alt und wird heutzutage - nicht oft verwendet. Übliche Anwendungsfälle liegen in der Industrie. - -- **CODE25INTERLEAVED**: Oft auch "Code 2 of 5 Interleaved" genannt. - - Dieser Standard ist eine Variante von CODE25. Er hat keine Begrenzung der Länge, muss aber eine gerade Anzahl an - Zeichen enthalten. Es unterstützt nur Ziffern, und die letzte Ziffer kann eine optionale Checksumme sein welche - durch Modulo 10 berechnet wird. Dieser Standard wird weltweit verwendet und üblicherweise im Handel. - -- **CODE39**: CODE39 ist einer der ältesten vorhandenen Codes. - - Dieser Barcode hat eine variable Länge. Er unterstützt Ziffern, großgeschriebene alphabetische Zeichen und 7 - spezielle Zeichen wie Leerzeichen, Punkte und Dollarzeichen. Er kann eine optionale Checksumme enthalten welche - durch Modulo 43 berechnet wird. Dieser Standard wird weltweit verwendet und üblicherweise in der Industrie. - -- **CODE39EXT**: CODE39EXT ist eine Erweiterung von CODE39. - - Dieser Barcode hat die gleichen Eigenschaften wie CODE39. Zusätzlich erlaubt er die Verwendung aller 128 ASCII - Zeichen. Dieser Standard wird weltweit verwendet und ist in der Industrie üblich. - -- **CODE93**: CODE93 ist der Nachfolger von CODE39. - - Dieser Barcode hat eine variable Länge. Er unterstützt Ziffern, alphabetische Zeichen und 7 spezielle Zeichen. - Er enthält eine optionale Checksumme welche durch Modulo 47 berechnet wird und aus 2 Zeichen besteht. Dieser - Standard produziert einen kompakteren Code als CODE39 und ist sicherer. - -- **CODE93EXT**: CODE93EXT ist eine Erweiterung von CODE93. - - Dieser Barcode hat die gleichen Eigenschaften wie CODE93. Zusätzlich erlaubt er die Verwendung aller 128 ASCII - Zeichen. Dieser Standard wird weltweit verwendung und ist in der Industrie üblich. - -- **EAN2**: EAN ist die Abkürzung für "European Article Number". - - Dieser Barcode muss 2 Zeichen haben. Er unterstützt nur Ziffern und hat keine Checksumme. Dieser Standard wird - hauptsächlich als Zusatz zu EAN13 (ISBN) verwendet wenn diese auf Bücher gedruckt werden. - -- **EAN5**: EAN ist die Abkürzung für "European Article Number". - - Dieser Barcode muss 5 Zeichen haben. Er unterstützt nur Ziffern und hat keine Checksumme. Dieser Standard wird - hauptsächlich als Zusatz zu EAN13 (ISBN) verwendet wenn diese auf Bücher gedruckt werden. - -- **EAN8**: EAN ist die Abkürzung für "European Article Number". - - Dieser Barcode kann eine Länge von 7 oder 8 Zeichen haben. Er unterstützt nur Ziffern. Wenn er 8 Zeichen lang - ist enthält er eine Checksumme. Dieser Standard wird weltweit verwendet, hat aber eine sehr begrenzte - Reichweite. Er kann auf kleinen Artikeln gefunden werden wo ein längerer Barcode nicht gedruckt werden könnte. - -- **EAN12**: EAN ist die Abkürzung für "European Article Number". - - Dieser Barcode muss eine Länge von 12 Zeichen haben. Er unterstützt nur Ziffern wobei die letzte Ziffer immer - eine Checksumme ist welche durch Modulo 10 berechnet wird. Dieser Standard wird in der USA verwendet und hierbei - üblicherweise im Handel. Er wurde ersetzt durch EAN13. - -- **EAN13**: EAN ist die Abkürzung für "European Article Number". - - Dieser Barcode muss eine Länge von 13 Zeichen haben. Er unterstützt nur Ziffern wobei die letzte Ziffer immer - eine Checksumme ist welche durch Modulo 10 berechnet wird. Dieser Standard wird weltweit verwendet, - üblicherweise im Handel. - -- **EAN14**: EAN ist die Abkürzung für "European Article Number". - - Dieser Barcode muss eine Länge von 14 Zeichen haben. Er unterstützt nur Ziffern wobei die letzte Ziffer immer - eine Checksumme ist welche durch Modulo 10 berechnet wird. Dieser Standard wird weltweit verwendet, - üblicherweise im Handel. Er ist der Nachfolger von EAN13. - -- **EAN18**: EAN ist die Abkürzung für "European Article Number". - - Dieser Barcode muss eine Länge von 18 Zeichen haben. Er unterstützt nur Ziffern. Die letzte Ziffer ist immer - eine Checksumme welche durch Modulo 10 berechnet wird. Dieser Code wird ost für die Identifizierung von - Transport Containern verwendet. - -- **GTIN12**: GTIN ist die Abkürzung für "Global Trade Item Number". - - Dieser Barcode verwendet den gleichen Standard wie EAN12 und ist sein Nachfolger. Er wird üblicherweise in den - USA verwendet. - -- **GTIN13**: GTIN ist die Abkürzung für "Global Trade Item Number". - - Dieser Barcode verwendet den gleichen Standard wie EAN13 und ist sein Nachfolger. Er wird weltweit von der - Industrie verwendet. - -- **GTIN14**: GTIN ist die Abkürzung für "Global Trade Item Number". - - Dieser Barcode verwendet den gleichen Standard wie EAN14 und ist sein Nachfolger. Er wird weltweit verwendet, - üblicherweise im Handel. - -- **IDENTCODE**: Identcode wird von Deutsche Post und DHL verwendet. Es ist eine spezialisierte Implementation von - Code25. - - Dieser Barcode muss eine Länge von 12 Zeichen haben. Er unterstützt nur Ziffern und die letzte Ziffer ist immer - eine Checksumme die mit Modulo 10 berechnet wird. Dieser Standard wird hauptsächlich von den Firmen DP und DHL - verwendet. - -- **INTELLIGENTMAIL**: Intelligent Mail ist ein postalischer Barcode. - - Dieser Barcode kann eine Länge von 20, 25, 29 oder 31 Zeichen haben. Er unterstützt nur Ziffern und enthält - keine Checksumme. Dieser Standard ist der Nachfolger von *PLANET* und *POSTNET*. Er wird hauptsächlich von den - United States Post Services verwendet. - -- **ISSN**: *ISSN* ist die Abkürzung für International Standard Serial Number. - - Dieser Barcode kann eine Länge von 8 oder 13 Zeichen haben. Er unterstützt nur Ziffern wobei die letzte Ziffer - eine Checksumme ist welche durch Modulo 11 berechnet wird. Er wird weltweit für gedruckte Publikationen - verwendet. - -- **ITF14**: ITF14 ist die GS1 Implementation des Interleaved Two of Five Barcodes. - - Dieser Barcode ist eine spezielle Variante von Interleaved 2 of 5. Er muss eine Länge von 14 Zeichen haben und - basiert auf GTIN14. Er unterstützt nur Ziffern wobei die letzte Ziffer die Ziffer einer Checksumme ist welche - durch Modulo 10 berechnet wird. Er wird weltweit verwendet, üblicherweise im Handel. - -- **LEITCODE**: Leitcode wird von Deutsche Post und DHL verwendet. Er ist eine spezialisierte Implementation von - Code25. - - Dieser Barcode muss eine Länge von 14 Zeichen haben. Er unterstützt nur Ziffern, wobei die letzte Ziffer immer - eine Checksumme ist welche durch Modulo 10 berechnet wird. Dieser Standard wird hauptsächlich von den Firmen DP - und DHL verwendet. - -- **PLANET**: Planet ist die Abkürzung für Postal Alpha Numeric Encoding Technique. - - Dieser Barcode kann eine Länge von 12 oder 14 Zeichen haben. Er unterstützt nur Ziffern wobei die letzt Ziffer - immer eine Checksumme ist. Dieser Standard wird hauptsächlich von den United States Post Services verwendet. - -- **POSTNET**: Postnet wird vom US Post Service verwendet. - - Dieser Barcode kann eine Länge von 6, 7, 10 oder 12 Zeichen haben. Er unterstützt nur Ziffern wobei die letzte - Ziffer immer eine Checksumme ist. Dieser Standard wird hauptsächlich von den United States Post Services - verwendet. - -- **ROYALMAIL**: Royalmail wird von Royal Mail verwendet. - - Dieser Barcode hat keine definierte Länge. Er unterstützt Ziffern, großgeschriebene Buchstaben und die letzte - Ziffer ist immer eine Checksumme. Dieser Standard wird hauptsächlich von Royal Mail für deren Cleanmail Service - verwendet. Er wird auch *RM4SCC* genannt. - -- **SSCC**: SSCC ist die Abkürzung für "Serial Shipping Container Code". - - Dieser Barcode ist eine Variante des EAN Barcodes. Er muss eine Länge von 18 Zeichen enthalten und unterstützt - nur Ziffern. Die letzte Ziffer muss ein Ziffer für eine Checksumme sein welche durch Modulo 10 berechnet wird. - Er wird üblicherweise in der Transport Industrie verwendet. - -- **UPCA**: UPC ist die Abkürzung für "Univeral Product Code". - - Dieser Barcode ist der Vorgänger von EAN13. Er muss eine Länge von 12 Zeichen haben und unterstützt nur - Ziffern. Die letzte Ziffer muss die Ziffer einer Checksumme sein welche durch Modulo 10 berechnet wird. Er wird - üblicherweise in den USA verwendet. - -- **UPCE**: UPCE ist die kurze Variante von UPCA. - - Dieser Barcode ist die kleinere Variante von UPCA. Er muss eine Länge von 6, 7 oder 8 Zeichen haben und - unterstützt nur Ziffern. Wenn der Barcode 8 Ziffern lang ist enthält er eine Checksumme die durch Modulo 10 - berechnet wird. Er wird üblicherweise bei kleinen Produkten verwendet wo ein UPCA Barcode nicht passen würde. - -.. _zend.validate.set.barcode.options: - -Unterstützte Optionen für Zend\Validate\Barcode ------------------------------------------------ - -Die folgenden Optionen werden für ``Zend\Validate\Barcode`` unterstützt: - -- **adapter**: Setzt den Barcode Adapter welcher verwendet wird. Unterstützt werden alle vorher genannten Adapter. - Wenn ein selbst definierter Adapter verwendet werden soll, muss man den kompletten Klassennamen setzen. - -- **checksum**: ``TRUE`` wenn der Barcode eine Prüfsumme enthalten soll. Der Standardwert hängt vom verwendeten - Adapter ab. Es ist zu beachten das einige Adapter es nicht erlauben diese Option zu setzen. - -- **options**: Definiert optionale Optionen für selbst geschriebene Adapter. - -.. _zend.validate.set.barcode.basic: - -Grundsätzliche Verwendung -------------------------- - -Um zu prüfen ob ein angegebener String ein Barcode ist muss man nur dessen Typ wissen. Siehe das folgende Beispiel -für einen EAN13 Barcode: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Barcode('EAN13'); - if ($valid->isValid($input)) { - // Die Eingabe scheint gültig zu sein - } else { - // Die Eingabe ist ungültig - } - -.. _zend.validate.set.barcode.checksum: - -Optionale Checksumme --------------------- - -Einige Barcodes können mit einer optionalen Checksumme angegeben werden. Diese Barcodes würden gültig sein, -selbst ohne Checksumme. Trotzdem, wenn eine Checksumme angegeben wird, dann sollte man Sie auch prüfen. -Standardmäßig führen diese Barcode Typen keine Prüfung der Checksumme durch. Durch Verwendung der Option -``checksum`` kann man definieren ob die Checksumme geprüft oder ignoriert wird. - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Barcode(array( - 'adapter' => 'EAN13', - 'checksum' => false, - )); - if ($valid->isValid($input)) { - // Die Eingabe scheint gültig zu sein - } else { - // Die Eingabe ist ungültig - } - -.. note:: - - **Reduzierte Sicherheit durch ausgeschaltete Prüfung der Checksumme** - - Indem die Prüfung der Checksumme ausgeschaltet wird, verringert man auch die Sicherheit der verwendeten - Barcodes. Zusätzlich sollte man beachten dass man die Prüfung der Checksumme für jene Barcode Typen - ausschalten kann welche einen Wert für die Checksumme enthalten müssen. Barcodes welche nicht gültig wären - könnten dann als gültig zurückgegeben werden, selbst wenn Sie es nicht sind. - -.. _zend.validate.set.barcode.custom: - -Schreiben eigener Adapter -------------------------- - -Man kann eigene Barcode Prüfungen für die Verwendung mit ``Zend\Validate\Barcode`` schreiben; das ist oft -notwendig wenn man mit proprietären Barcodes arbeiten muss. Um eine eigene Barcode Prüfung zu schreiben benötigt -man die folgenden Informationen. - -- **Length**: Die Länge welche der Barcode haben muss. Diese kann einen der folgenden Werte haben: - - - **Integer**: Ein Wert größer als 0, was bedeutet das der Barcode diese Länge haben muss. - - - **-1**: Es gibt keine Begrenzung der Länge für diesen Barcode. - - - **"even"**: Die Länge dieses Barcodes muss eine gerade Anzahl an Ziffern enthalten. - - - **"odd"**: Die Länge dieses Barcodes muss eine ungerade Anzahl an Ziffern enthalten. - - - **array**: Ein Array von Integer Werten. Die Länge dieses Barcodes muss einer der gesetzten Array Werte haben. - -- **Characters**: Ein String der die erlaubten Zeichen für diesen Barcode enthält. Auhc der Integer Wert 128 ist - erlaubt, was für die ersten 128 Zeichen der ASCII Tabelle steht. - -- **Checksum**: Ein Strung der als Callback für eine Methode verwendet wird, welche die Prüfung der Checksumme - durchführt. - -Die eigene Barcode Prüfung muss ``Zend\Validate\Barcode\AdapterAbstract`` erweitern oder -Zend\Validate\Barcode\AdapterInterface implementieren. - -Als Beispiel, erstellen wir eine Prüfung welche eine gerade Anzahl an Zeichen erwartet welche alle Ziffern und die -Zeichen 'ABCDE' enthalten kann, und die eine Checksumme benötigt. - -.. code-block:: .validator. - :linenos: - - class My_Barcode_MyBar extends Zend\Validate\Barcode\AdapterAbstract - { - protected $_length = 'even'; - protected $_characters = '0123456789ABCDE'; - protected $_checksum = '_mod66'; - - protected function _mod66($barcode) - { - // Mach einige Prüfungen und gib ein Boolean zurück - } - } - - $valid = new Zend\Validate\Barcode('My_Barcode_MyBar'); - if ($valid->isValid($input)) { - // Die Eingabe scheint gültig zu sein - } else { - // Die Eingabe ist ungültig - } - - diff --git a/docs/languages/de/modules/zend.validator.between.rst b/docs/languages/de/modules/zend.validator.between.rst deleted file mode 100644 index f14e38e53..000000000 --- a/docs/languages/de/modules/zend.validator.between.rst +++ /dev/null @@ -1,75 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.set.between: - -Between -======= - -``Zend\Validate\Between`` erlaubt es zu prüfen ob ein angegebener Wert zwischen zwei anderen Werten ist. - -.. note:: - - **Zend\Validate\Between unterstützt nur die Prüfung von Nummern** - - Es ist zu beachten das ``Zend\Validate\Between`` nur die Prüfung von Nummern unterstützt. Strings, oder ein - Datum können mit dieser Prüfung nicht geprüft werden. - -.. _zend.validate.set.between.options: - -Unterstützte Optionen für Zend\Validate\Between ------------------------------------------------ - -Die folgenden Optionen werden für ``Zend\Validate\Between`` unterstützt: - -- **inclusive**: Definiert ob die Prüfung inklusive oder explusive der minimalen und maximalen Grenzwerte ist. Sie - ist standardmäßig ``TRUE``. - -- **max**: Setzt die maximale Grenze für die Prüfung. - -- **min**: Setzt die minimale Grenze für die Prüfung. - -.. _zend.validate.set.between.basic: - -Standardverhalten für Zend\Validate\Between -------------------------------------------- - -Standardmäßig prüft diese Prüfung ob ein Wert zwischen ``min`` und ``max`` liegt wobei beide Grenzwerte als -Wert erlaubt sind. - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Between(array('min' => 0, 'max' => 10)); - $value = 10; - $result = $valid->isValid($value); - // Gibt true zurück - -Im oben stehenden Beispiel ist das Ergebnis ``TRUE`` da die Suche standardmäßig inklusive den Grenzwerten -stattfindet. Das bedeutet in unserem Fall das jeder Wert zwischen '0' und '10' erlaubt ist. Und Werte wie '-1' und -'11' geben ``FALSE`` zurück. - -.. _zend.validate.set.between.inclusively: - -Prüfung exklusive den Grenzwerten ---------------------------------- - -Manchmal ist es nützlich einen Wert zu prüfen wobei die Grenzwerte exkludiert werden. Siehe das folgende -Beispiel: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Between( - array( - 'min' => 0, - 'max' => 10, - 'inclusive' => false - ) - ); - $value = 10; - $result = $valid->isValid($value); - // Gibt false zurück - -Das Beispiel ist fast so ähnlich wie unser erstes Beispiel, aber wir haben die Grenzwerte ausgeschlossen. Jetzt -sind die Werte '0' und '10' nicht mehr erlaubt und geben ``FALSE`` zurück. - - diff --git a/docs/languages/de/modules/zend.validator.callback.rst b/docs/languages/de/modules/zend.validator.callback.rst deleted file mode 100644 index 64549e6d5..000000000 --- a/docs/languages/de/modules/zend.validator.callback.rst +++ /dev/null @@ -1,229 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.set.callback: - -Callback -======== - -``Zend\Validate\Callback`` erlaubt es einen Callback anzugeben der verwendet wird um einen angegebenen Wert zu -prüfen. - -.. _zend.validate.set.callback.options: - -Unterstützte Optionen für Zend\Validate\Callback ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Callback`` unterstützt: - -- **callback**: Setzt den Callback welcher für die Prüfung aufgerufen wird. - -- **options**: Setzt zusätzliche Optionen welche an den Callback übergeben werden. - -.. _zend.validate.set.callback.basic: - -Grundsätzliche Verwendung -------------------------- - -Der einfachste Anwendungsfall besteht darin eine einzelne Funktion zu haben und diese als Callback zu verwenden. -Angenommen wir haben die folgende Funktion. - -.. code-block:: .validator. - :linenos: - - function myMethod($value) - { - // einige Prüfungen - return true; - } - -Um diese in ``Zend\Validate\Callback`` zu verwenden muss man Sie nur auf folgende Weise aufrufen: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Callback('myMethod'); - if ($valid->isValid($input)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -.. _zend.validate.set.callback.closure: - -Verwendung mit Closures ------------------------ - -*.validator.* 5.3 führt `Closures`_ ein, welche grundsätzlich selbst-enthaltene oder **anonyme** Funktionen sind. *.validator.* -nimmt an das Closures eine andere Form eines Callbacks sind, und können daher als solche mit -``Zend\Validate\Callback`` verwendet werden. Als Beispiel: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Callback(function($value){ - // einige Prüfungen - return true; - }); - - if ($valid->isValid($input)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -.. _zend.validate.set.callback.class: - -Verwendung mit klassenbasierten Callbacks ------------------------------------------ - -Natürlich ist es auch möglich eine Klassenmethode als Callback zu verwenden. Angenommen wir haben die folgende -Klassenmethode: - -.. code-block:: .validator. - :linenos: - - class MyClass - { - public function myMethod($value) - { - // einige Prüfungen - return true; - } - } - -Die Definition des Callbacks ist in diesem Fall fast die gleiche. Man muss nur eine Instanz der Klasse vor der -Methode erstellen und ein Array das den Callback beschreibt: - -.. code-block:: .validator. - :linenos: - - $object = new MyClass; - $valid = new Zend\Validate\Callback(array($object, 'myMethod')); - if ($valid->isValid($input)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -Man kann auch eine statische Methode als Callback definieren. Angenommen wir haben die folgende Klassendefinition -dann ist die Verwendung des Prüfers wie folgt: - -.. code-block:: .validator. - :linenos: - - class MyClass - { - public static function test($value) - { - // Einige Prüfungen - return true; - } - } - - $valid = new Zend\Validate\Callback(array('MyClass', 'test')); - if ($valid->isValid($input)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -Letztendlich kann man, wenn man *.validator.* 5.3 verwendet, die magische Methode ``__invoke()`` in der eigenen Klasse -definieren. Wenn man das tut dann funktioniert die Angabe einer Instanz der Klasse genauso: - -.. code-block:: .validator. - :linenos: - - class MyClass - { - public function __invoke($value) - { - // some validation - return true; - } - } - - $object = new MyClass(); - $valid = new Zend\Validate\Callback($object); - if ($valid->isValid($input)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -.. _zend.validate.set.callback.options2: - -Optionen hinzufügen -------------------- - -``Zend\Validate\Callback`` erlaubt auch die Verwendung von Optionen welche als zusätzliche Argumente dem Callback -übergeben werden. - -Nehmen wir die folgende Klassen und Methoden Definition an: - -.. code-block:: .validator. - :linenos: - - class MyClass - { - function myMethod($value, $option) - { - // einige Prüfungen - return true; - } - } - -Es gibt zwei Wege um den Prüfer über zusätzliche Optionen zu informieren: Diese im Constructor übergeben, oder -Sie mit der Methode ``setOptions()`` übergeben. - -Um Sie im Contructor zu übergeben, muss ein Array übergeben werden das die zwei Schlüssel "callback" und -"options" enthält: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Callback(array( - 'callback' => array('MyClass', 'myMethod'), - 'options' => $option, - )); - - if ($valid->isValid($input)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -Andererseits können Sie dem Prüfer auch nach der Instanzierung übergeben werden: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Callback(array('MyClass', 'myMethod')); - $valid->setOptions($option); - - if ($valid->isValid($input)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -Wenn zusätzliche Werte an ``isValid()`` übergeben werden, dann werden diese Werte unmittelbar nach ``$value`` -hinzugefügt. - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\Callback(array('MyClass', 'myMethod')); - $valid->setOptions($option); - - if ($valid->isValid($input, $additional)) { - // Input scheint gültig zu sein - } else { - // Input ist ungültig - } - -Wenn der Aufruf zu einem Callback durchgeführt wird, dann wird der Wert der zu überprüfen ist als erstes -Argument an den Callback übergeben gefolgt von allen anderen Werten die an ``isValid()`` übergeben wurden; alle -anderen Optionen folgen Ihm. Die Anzahl und der Typ der Optionen welche verwendet werden ist nicht limitiert. - - - -.. _`Closures`: http://.validator..net/functions.anonymous diff --git a/docs/languages/de/modules/zend.validator.credit-card.rst b/docs/languages/de/modules/zend.validator.credit-card.rst deleted file mode 100644 index d1c6c492f..000000000 --- a/docs/languages/de/modules/zend.validator.credit-card.rst +++ /dev/null @@ -1,226 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.set.creditcard: - -CreditCard -========== - -``Zend\Validate\CreditCard`` erlaubt es zu prüfen ob ein angegebener Wert eine Kreditkarten Nummer sein könnte. - -Eine Kreditkarte enthält verschiedene Elemente an Metadaten, inklusive ein Hologramm, die Accountnummer, Logo, -Ablaufdatum, Sicherheitscode und den Namen des Kreditkartenbesitzers. Die Algorithmen für die Prüfung der -Kombination an Metadaten sind nur der ausgebenden Firma bekannt, und sollten mit Ihnen zum Zwecke der Zahlung -geprüft werden. Trotzdem ist es oft nützlich zu wissen ob eine akutell angegebene Nummer in den Bereich der -möglichen Nummern fällt **bevor** so eine Überprüfung durchgeführt wird, und daher prüft -``Zend\Validate\CreditCard`` einfach ob die angegebene Kreditkartennummer entspricht. - -Für die Fälle in denen man ein Service hat, das tiefere Prüfungen durchführt, bietet -``Zend\Validate\CreditCard`` auch die Möglichkeit einen Service Callback anzuhängen der ausgeführt wird sobald -die Kreditkartennummer vorbehaltlich als gültig geprüft wurde; dieser Callback wird dann ausgeführt, und sein -Rückgabewert wird die komplette Gültigkeit erkennen. - -Die folgenden Kreditkarteninstitute werden akzeptiert: - -- **American Express** - - **China UnionPay** - - **Diners Club Card Blanche** - - **Diners Club International** - - **Diners Club US & Canada** - - **Discover Card** - - **JCB** - - **Laser** - - **Maestro** - - **MasterCard** - - **Solo** - - **Visa** - - **Visa Electron** - -.. note:: - - **Ungültige Institute** - - Die Institute **Bankcard** und **Diners Club enRoute** existieren nicht mehr. Deshalb werden Sie als ungültig - erkannt. - - **Switch** wurde zu **Visa** umbenannt und wird daher auch als ungültig erkannt. - -.. _zend.validate.set.creditcard.options: - -Unterstützte Optionen für Zend\Validate\CreditCard --------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\CreditCard`` unterstützt: - -- **service**: Ein Callback zu einem Online Service welcher zusätzlich für die Prüfung verwendet wird. - -- **type**: Der Typ der Kreditkarte der geprüft werden soll. Siehe die folgende Liste an Instituten für Details. - -.. _zend.validate.set.creditcard.basic: - -Grundsätzliche Verwendung -------------------------- - -Es gibt verschiedene Kreditkarten Institute wie mit ``Zend\Validate\CreditCard`` geprüft werden können. -Standardmäßig werden alle bekannte Institute akzeptiert. Siehe das folgende Beispiel: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\CreditCard(); - if ($valid->isValid($input)) { - // Die Eingabe scheint gültig zu sein - } else { - // Die Eingabe ist ungültig - } - -Das oben stehende Beispiel würde alle bekannten Kreditkarten Institute als gültig erkennen. - -.. _zend.validate.set.creditcard.institute: - -Definierte Kreditkarte akzeptieren ----------------------------------- - -Manchmal ist es notwendig nur definierte Kreditkarten Institute zu akzeptieren statt alle; z.B wenn man einen -Webshop hat der nur Visa und American Express Karten akzeptiert. ``Zend\Validate\CreditCard`` erlaubt einem exakt -das zu tun, indem auf genau diese Institute limitiert wird. - -Um ein Limit zu verwenden kann man entweder spezifische Institute bei der Initiierung angeben, oder im nachhinein -durch Verwendung von ``setType()``. Jede kann verschiedene Argumente verwenden. - -Man kann ein einzelnes Institut angeben: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\CreditCard( - Zend\Validate\CreditCard::AMERICAN_EXPRESS - ); - -Wenn man mehrere Institute erlauben will, dann kann man diese als Array angeben: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\CreditCard(array( - Zend\Validate\CreditCard::AMERICAN_EXPRESS, - Zend\Validate\CreditCard::VISA - )); - -Wie bei allen Prüfern kann man auch ein assoziatives Array an Optionen oder eine Instanz von ``Zend_Config`` -angeben. In diesem Fall muß man die Institute mit dem Arrayschlüssel ``type`` angeben wie hier simuliert: - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\CreditCard(array( - 'type' => array(Zend\Validate\CreditCard::AMERICAN_EXPRESS) - )); - -.. _zend.validate.set.creditcard.institute.table: - -.. table:: Konstanten für Kreditkarten Institute - - +-------------------------+----------------+ - |Institut |Konstante | - +=========================+================+ - |American Express |AMERICAN_EXPRESS| - +-------------------------+----------------+ - |China UnionPay |UNIONPAY | - +-------------------------+----------------+ - |Diners Club Card Blanche |DINERS_CLUB | - +-------------------------+----------------+ - |Diners Club International|DINERS_CLUB | - +-------------------------+----------------+ - |Diners Club US & Canada |DINERS_CLUB_US | - +-------------------------+----------------+ - |Discover Card |DISCOVER | - +-------------------------+----------------+ - |JCB |JCB | - +-------------------------+----------------+ - |Laser |LASER | - +-------------------------+----------------+ - |Maestro |MAESTRO | - +-------------------------+----------------+ - |MasterCard |MASTERCARD | - +-------------------------+----------------+ - |Solo |SOLO | - +-------------------------+----------------+ - |Visa |VISA | - +-------------------------+----------------+ - |Visa Electron |VISA | - +-------------------------+----------------+ - -Man kann Institute auch im Nachhinein setzen oder hinzufügen indem die Methoden ``setType()``, ``addType()`` und -``getType()`` verwendet werden. - -.. code-block:: .validator. - :linenos: - - $valid = new Zend\Validate\CreditCard(); - $valid->setType(array( - Zend\Validate\CreditCard::AMERICAN_EXPRESS, - Zend\Validate\CreditCard::VISA - )); - -.. note:: - - **Standard Institute** - - Wenn bei der Initiierung kein Institut angegeben wird, dann wird ``ALL`` verwendet, welches alle Institute auf - einmal verwendet. - - In diesem Fall ist die Verwendung von ``addType()`` sinnlos weil bereits alle Institute hinzugefügt wurden. - -.. _zend.validate.set.creditcard.servicecheck: - -Prüfung durch Verwendung einer fremden API ------------------------------------------- - -Wie vorher erwähnt prüft ``Zend\Validate\CreditCard`` nur die Kreditkarten Nummer. Glücklicherweise bieten -einige Institute online *API*\ s welche eine Kreditkarten Nummer durch Verwendung von Algorithmen prüfen kann, -welche nicht öffentlich bekannt sind. Die meisten dieser Services sind zu bezahlen. Deshalb ist diese Art der -Prüfung standardmäßig deaktiviert. - -Wenn man auf so eine *API* zugreift, kann man diese als Addon für ``Zend\Validate\CreditCard`` verwenden um die -Sicherheit der Prüfung zu erhöhen. - -Um das zu tun muss man einfach einen Callback angeben der aufgerufen wird wenn die generische Prüfung erfolgreich -war. Das verhindert das die *API* für ungültige Nummern aufgerufen wird, was wiederum die Performance der -Anwendung erhöht. - -``setService()`` setzt ein neues Service und ``getService()`` gibt das gesetzte Service zurück. Als Option für -die Konfiguration kann man den Arrayschlüssel '``service``' bei der Initiierung verwenden. Für Details über -mögliche Optionen kann man unter :ref:`Callback ` nachsehen. - -.. code-block:: .validator. - :linenos: - - // Die eigene Service Klasse - class CcService - { - public function checkOnline($cardnumber, $types) - { - // einige online Prüfungen - } - } - - // Die Prüfung - $service = new CcService(); - $valid = new Zend\Validate\CreditCard(Zend\Validate\CreditCard::VISA); - $valid->setService(array($service, 'checkOnline')); - -Wie man sieht wird die Callback Methode mit der Kreditkarten Nummer als erster Parameter aufgerufen, und die -akzeptierten Typen als zweiter Parameter. - - diff --git a/docs/languages/de/modules/zend.validator.date.rst b/docs/languages/de/modules/zend.validator.date.rst deleted file mode 100644 index 8c6a930e6..000000000 --- a/docs/languages/de/modules/zend.validator.date.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.set.date: - -Date -==== - -``Zend\Validate\Date`` erlaubt es zu prüfen ob ein angegebener Wert ein Datum enthält. Diese Prüfung prüft auch -lokalisierte Eingaben. - -.. _zend.validate.set.date.options: - -Unterstützte Optionen für Zend\Validate\Date --------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Date`` unterstützt: - -- **format**: Setzt das Format welches verwendet wird um das Datum zu schreiben. - -- **locale**: Setzt das Gebietsschema welches verwendet wird um Datumswerte zu prüfen. - -.. _zend.validate.set.date.basic: - -Standardmäßige Datumsprüfung ----------------------------- - -Der einfachste Weg um ein Datum zu prüfen ist die Verwendung des Standardmäßigen Datumsformats. Dieses wird -verwendet wenn kein Gebietsschema und kein Format angegeben werden. - -.. code-block:: .validator. - :linenos: - - $validator = new Zend\Validate\Date(); - - $validator->isValid('2000-10-10'); // Gibt true zurück - $validator->isValid('10.10.2000'); // Gibt false zurück - -Das standardmäßige Datumsformat für ``Zend\Validate\Date`` ist 'yyyy-MM-dd'. - -.. _zend.validate.set.date.formats: - -Selbst definierte Datumsprüfung -------------------------------- - -``Zend\Validate\Date`` unterstützt auch selbst definierte Datumsformate. Wenn man solch ein Datum prüfen will -muss man die Option ``format`` verwenden. - -.. code-block:: .validator. - :linenos: - - $validator = new Zend\Validate\Date(array('format' => 'yyyy')); - - $validator->isValid('2010'); // Gibt true zurück - $validator->isValid('May'); // Gibt false zurück - -Natürlich kann man ``format`` und ``locale`` kombinieren. In diesem Fall kann man lokalisierte Monats- oder -Tagesnamen verwenden. - -.. code-block:: .validator. - :linenos: - - $validator = new Zend\Validate\Date(array('format' => 'yyyy MMMM', 'locale' => 'de')); - - $validator->isValid('2010 Dezember'); // Gibt true zurück - $validator->isValid('2010 June'); // Gibt false zurück - - diff --git a/docs/languages/de/modules/zend.validator.db.rst b/docs/languages/de/modules/zend.validator.db.rst deleted file mode 100644 index 1f452c9d9..000000000 --- a/docs/languages/de/modules/zend.validator.db.rst +++ /dev/null @@ -1,191 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.Db: - -Db_RecordExists und Db_NoRecordExists -===================================== - -``Zend\Validate\Db\RecordExists`` und ``Zend\Validate\Db\NoRecordExists`` bieten die Möglichkeit zu testen ob ein -Eintrag in einer angegebenen Tabelle einer Datenbank, mit einem gegebenen Wert, existiert. - -.. _zend.validate.set.db.options: - -Unterstützte Optionen für Zend\Validate\Db\* --------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Db\NoRecordExists`` und ``Zend\Validate\Db\RecordExists`` -unterstützt: - -- **adapter**: Der Datenbank-Adapter welcher für die Suche verwendet wird. - -- **exclude**: Setzt die Einträge welche von der Suche ausgenommen werden. - -- **field**: Das Datenbank-Feld in dieser Tabelle welches nach dem Eintrag durchsucht wird. - -- **schema**: Setzt das Schema welches für die Suche verwendet wird. - -- **table**: Die Tabelle welche nach dem Eintrag durchsucht wird. - -.. _zend.validate.db.basic-usage: - -Grundsätzliche Verwendung -------------------------- - -Ein Beispiel der rundsätzlichen Verwendung der Validatoren: - -.. code-block:: .validator. - :linenos: - - // Prüft ob die Email Adresse in der Datenbank existiert - $validator = new Zend\Validate\Db\RecordExists( - array( - 'table' => 'users', - 'field' => 'emailaddress' - ) - ); - - if ($validator->isValid($emailaddress)) { - // Die Email Adresse scheint gültig zu sein - } else { - // Die Email Adresse ist ungültig; gib die Gründe an - foreach ($validator->getMessages() as $message) { - echo "$message\n"; - } - } - -Das oben stehende testet ob eine gegebene Email Adresse in der Datenbanktabelle vorhanden ist. Wenn kein Eintrag -gefunden wird der den Wert von ``$emailaddress`` in der spezifizierten Spalte hat, wird eine Fehlermeldung -angezeigt. - -.. code-block:: .validator. - :linenos: - - // Prüft ob der Benutzername in der Datenbank existiert - $validator = new Zend\Validate\Db\NoRecordExists( - array( - 'table' => 'users', - 'field' => 'username' - ) - ); - if ($validator->isValid($username)) { - // Der Benutzername scheint gültig zu sein - } else { - // Der Benutzername ist ungültig; gib die Gründe an - $messages = $validator->getMessages(); - foreach ($messages as $message) { - echo "$message\n"; - } - } - -Das oben stehende testet ob ein angegebener Benutzername nicht in der Datenbanktabelle vorhanden ist. Wenn ein -Eintrag gefunden wird, der den der von ``$username`` in der spezifizierten Spalte enthält, dann wird eine -Fehlermeldung angezeigt. - -.. _zend.validate.db.excluding-records: - -Ausnehmen von Einträgen ------------------------ - -``Zend\Validate\Db\RecordExists`` und ``Zend\Validate\Db\NoRecordExists`` bieten auch die Möglichkeit die -Datenbank zu testen, wobei Teile der Tabelle hiervon ausgenommen werden, entweder indem eine where Klausel als -String angegeben wird, oder ein Array mit den Schlüsseln "field" und "value". - -Wenn ein Array für die Ausnahmeklausel angegeben wird, dann wird der **!=** Operator verwenden. Damit kann der -Rest einer Tabelle auf einen Wert geprüft werden bevor ein Eintrag geändert wird (zum Beispiel in einem Formular -für ein Benutzerprofil). - -.. code-block:: .validator. - :linenos: - - // Prüft ob kein anderer Benutzer diesen Benutzernamen hat - $user_id = $user->getId(); - $validator = new Zend\Validate\Db\NoRecordExists( - array( - 'table' => 'users', - 'field' => 'username', - 'exclude' => array( - 'field' => 'id', - 'value' => $user_id - ) - ) - ); - - if ($validator->isValid($username)) { - // Der Benutzername scheint gültig zu sein - } else { - // Der Benutzername ist ungültig; zeige den Grund - $messages = $validator->getMessages(); - foreach ($messages as $message) { - echo "$message\n"; - } - } - -Das obige Beispiel prüft die Tabelle um sicherzustellen das keine anderen Einträge existieren bei denen ``id = -$user_id`` als Wert $username enthalten. - -Man kann auch einen String an die Ausnahmeklausel angeben damit man einen anderen Operator als **!=** verwenden -kann. Das kann nützlich sein um bei geteilten Schlüsseln zu testen. - -.. code-block:: .validator. - :linenos: - - $email = 'user@example.com'; - $clause = $db->quoteInto('email = ?', $email); - $validator = new Zend\Validate\Db\RecordExists( - array( - 'table' => 'users', - 'field' => 'username', - 'exclude' => $clause - ); - - if ($validator->isValid($username)) { - // Der Benutzername scheint gültig zu sein - } else { - // Der Benutzername ist ungültig; die Gründe ausgeben - $messages = $validator->getMessages(); - foreach ($messages as $message) { - echo "$message\n"; - } - } - -Das obige Beispiel prüft die Tabelle 'users' und stellt sicher das nur ein Eintrag mit beidem, sowohl dem -Benutzernamen ``$username`` als auch der Email ``$email`` gültig ist. - -.. _zend.validate.db.database-adapters: - -Datenbank Adapter ------------------ - -Man kann auch einen Adapter spezifizieren wenn man die Prüfung instanziiert. Das erlaubt es mit Anwendungen zu -arbeiten die mehrere Datenbankadapter verwenden, oder wo kein Standardadapter gesetzt wird. Als Beispiel: - -.. code-block:: .validator. - :linenos: - - $validator = new Zend\Validate\Db\RecordExists( - array( - 'table' => 'users', - 'field' => 'id', - 'adapter' => $dbAdapter - ) - ); - -.. _zend.validate.db.database-schemas: - -Datenbank Schemas ------------------ - -Man kann für die eigene Datenbank bei Adaptern wie PostgreSQL und DB/2 ein Schema spezifizieren indem einfach ein -Array mit den Schlüsseln ``table`` und ``schema`` angegeben wird. Anbei ein Beispiel: - -.. code-block:: .validator. - :linenos: - - $validator = new Zend\Validate\Db\RecordExists( - array( - 'table' => 'users', - 'schema' => 'my', - 'field' => 'id' - ) - ); - - diff --git a/docs/languages/de/modules/zend.validator.digits.rst b/docs/languages/de/modules/zend.validator.digits.rst deleted file mode 100644 index 8ab650ed4..000000000 --- a/docs/languages/de/modules/zend.validator.digits.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.digits: - -Digits -====== - -``Zend\Validate\Digit`` prüft ob ein angegebener Wert nur Ziffern enthält. - -.. _zend.validator.set.digits.options: - -Unterstützte Optionen für Zend\Validate\Digits ----------------------------------------------- - -Es gibt keine zusätzlichen Optionen für ``Zend\Validate\Digits``: - -.. _zend.validator.set.digits.basic: - -Prüfen von Ziffern ------------------- - -Um zu prüfen ob ein angegebener Wert nur Ziffern und keine anderen Zeichen enthält, muss die Prüfung einfach wie -in diesem Beispiel gezeigt aufgerufen werden: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Digits(); - - $validator->isValid("1234567890"); // Gibt true zurück - $validator->isValid(1234); // Gibt true zurück - $validator->isValid('1a234'); // Gibt false zurück - -.. note:: - - **Nummern prüfen** - - Wenn man Nummern oder nummerische Werte prüfen will, muss man darauf achten dass diese Prüfung nur auf Ziffern - prüft. Das bedeutet dass jedes andere Zeichen wie ein Trennzeichen für Tausender oder ein Komma diese Prüfung - nicht bestehen. In diesem Fall sollte man ``Zend\Validate\Int`` oder ``Zend\Validate\Float`` verwenden. - - diff --git a/docs/languages/de/modules/zend.validator.email-address.rst b/docs/languages/de/modules/zend.validator.email-address.rst deleted file mode 100644 index 3704d5286..000000000 --- a/docs/languages/de/modules/zend.validator.email-address.rst +++ /dev/null @@ -1,251 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.email_address: - -Email Adresse -============= - -``Zend\Validate\EmailAddress`` erlaubt die Prüfung von Email Adressen. Der Prüfer teilt zuerst die Email Adresse -in lokalen Teil @ hostname und versucht diese mit bekannten Spezifikationen für Email Adressen und Hostnamen zu -prüfen. - -.. _zend.validator.set.email_address.basic: - -Normale Verwendung ------------------- - -Ein Beispiel einer normalen Benutzung ist anbei: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - if ($validator->isValid($email)) { - // Email Adresse scheint gültig zu sein - } else { - // Email Adresse ist ungültig, drucke die Gründe hierfür - foreach ($validator->getMessages() as $message) { - echo "$message\n"; - } - } - -Das prüft die Email Adresse ``$email`` und gibt bei einem Fehler über ``getMessages()`` eine nützliche -Fehlermeldung aus. - -.. _zend.validator.set.email_address.options: - -Optionen für die Prüfung von Email Adressen -------------------------------------------- - -``Zend\Validate\EmailAddress`` unterstützt verschiedene Optionen welche entweder bei der Initiierung, durch -Übergeben eines Arrays mit den betreffenden Optionen, gesetzt werden können, oder im Nachhinein, durch Verwendung -von ``setOptions()``. Die folgenden Optionen werden unterstützt: - -- **allow**: Definiert welche Typen von Domain Namen akzeptiert werden. Diese Option wird in Verbindung mit der - hostname Option verwendet um die Hostname Prüfung zu setzen. Für weitere Informationen über mögliche Werte - dieser Option sehen Sie bitte unter :ref:`Hostname ` und mögliche ``ALLOW``\ * - Konstanten. Der Standardwert dieser Option ist ``ALLOW_DNS``. - -- **deep**: Definiert ob die MX Records des Server durch eine tiefe Prüfung verifiziert werden sollen. Wenn diese - Option auf ``TRUE`` gesetzt wird, dann werden zusätzlich zum MX Record auch die A, A6 und ``AAAA`` Records - verwendet um zu prüfen ob der Server Emails akzeptiert. Der Standardwert dieser Option ist ``FALSE``. - -- **domain**: Definiert ob der Domain Teil geprüft werden soll. Wenn diese Option auf ``FALSE`` gesetzt wird, dann - wird nur der lokale Teil der Email Adresse geprüft. In diesem Fall wird die Hostname Prüfung nicht aufgerufen. - Der Standardwert dieser Option ist ``TRUE``. - -- **hostname**: Setzt die Hostname Prüfung mit welcher der Domain Teil der Email Adresse geprüft wird. - -- **mx**: Definiert ob der MX Record vom Server erkannt werden soll. Wenn diese Option auf ``TRUE`` definiert wird, - dann wird der MX Record verwendet um zu prüfen ob der Server Emails akzeptiert. Der Standardwert dieser Option - ist ``FALSE``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - $validator->setOptions(array('domain' => false)); - -.. _zend.validator.set.email_address.complexlocal: - -Komplexe lokale Abschnitte --------------------------- - -``Zend\Validate\EmailAdress`` prüft jede gültige Email Adresse mit RFC2822. Gültige Email Adressen sind zum -Beispiel **bob@domain.com**, **bob+jones@domain.us**, **"bob@jones"@domain.com** und **"bob jones"@domain.com**. - -Einige Email Formate werden aktuell nicht geprüft (z.B. Zeilenumbruch Zeichen oder ein "\\" Zeichen in einer Email -Adresse). - -.. _zend.validator.set.email_address.purelocal: - -Nur den lokalen Teil prüfen ---------------------------- - -Wenn man will das ``Zend\Validate\EmailAddress`` nur den lokalen Teil der Email Adresse prüfen soll, und die -Prüfung des Hostnamens ausschalten will, kann man die ``domain`` Option auf ``FALSE`` setzen. Das zwingt -``Zend\Validate\EmailAddress`` den Hostname Teil der Email Adresse nicht zu prüfen. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - $validator->setOptions(array('domain' => FALSE)); - -.. _zend.validator.set.email_address.hostnametype: - -Prüfen von unterschiedlichen Typen von Hostnamen ------------------------------------------------- - -Der Teil des Hostnamens einer Email Adresse wird mit :ref:`Zend\Validate\Host ` -geprüft. Standardmäßig werden nur DNS Hostnamen in der Form ``domain.com`` akzeptiert, aber wenn es gewünscht -ist, können auch IP Adressen und lokale Hostnamen auch akzeptiert werden. - -Um das zu tun, muß eine ``Zend\Validate\EmailAddress`` Instanz erstellt werden der ein Parameter übergeben wird, -um den Typ des Hostnamens anzugeben der akzeptiert werden soll. Mehr Details sind in ``Zend\Validate\Hostname`` -inkludiert, zusammen mit einem Beispiel, wie DNS und lokale Hostnamen, akzeptiert werden wie im Beispiel das anbei -steht: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress( - Zend\Validate\Hostname::ALLOW_DNS | - Zend\Validate\Hostname::ALLOW_LOCAL); - if ($validator->isValid($email)) { - // Email Adresse scheint gültig zu sein - } else { - // Email ist ungültig; Gründe ausdrucken - foreach ($validator->getMessages() as $message) { - echo "$message\n"; - } - } - -.. _zend.validator.set.email_address.checkacceptance: - -Prüfen ob der Hostname aktuell Emails akzeptiert ------------------------------------------------- - -Nur weil eine Email Adresse im richtigen Format ist, heißt das notwendigerweise nicht das die Email Adresse -aktuell auch existiert. Um dieses Problem zu lösen, kann MX Prüfung verwendet werden um zu prüfen ob ein MX -(Email) Eintrag im DNS Eintrag für den Hostnamen der Email existiert. Das zeigt ob der Hostname Emails akzeptiert, -sagt aber nicht aus, ob die genaue Email Adresse selbst gültig ist. - -Die MX Prüfung ist standardmäßig nicht eingeschaltet. Um die MX Prüfung einzuschalten kann ein zweiter -Parameter an den ``Zend\Validate\EmailAddress`` Konstruktor übergeben werden. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'mx' => true - ) - ); - -.. note:: - - **Die MX Prüfung unter Windows** - - In Windows Umgebungen ist die MX Prüfung nicht vorhanden wenn *PHP* 5.3 oder höher verwendet wird. Unter *PHP* - 5.3 wird die MX Prüfung nicht verwendet, selbst wenn diese in den Optionen aktiviert wurde. - -Alternativ kann entweder ``TRUE`` oder ``FALSE`` an ``setValidateMx()`` übergeben werden um die MX Prüfung ein- -oder auszuschalten. - -Durch das einschalten dieser Option werden Netzwerk Funktionen verwendet um zu Prüfen ob ein MX Eintrag am -Hostnamen der Email Adresse existiert, welche geprüft werden soll. Vorsicht davor, das hierbei das eigene Skript -langsamer wird. - -Manchmal gibt die Prüfung auf MX Records ``FALSE`` zurück, selbst wenn Emails akzeptiert werden. Der Hintergrund -dieses Verhaltens ist, das der Server Emails akzeptieren kann, selbst wenn er keinen MX Record anbietet. In diesem -Fall kann er A, A6 oder ``AAAA`` Records anbieten. Um es ``Zend\Validate\EmailAddress`` zu erlauben auch auf diese -anderen Records zu prüfen, muss man die tiefe MX Prüfung einschalten. Das kann man durch Setzen der ``deep`` -Option bei der Initialisierung, oder durch Verwendung von ``setOptions()`` tun. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'mx' => true, - 'deep' => true - ) - ); - -.. warning:: - - **Performance Warnung** - - Man sollte darauf achten das die Aktivierung der MX Prüfung das Skript langsamer machen wird, weil es Netzwerk - Funktionen verwendet. Die Aktivierung der tiefen Prüfung macht das Skript sogar noch langsamer da es im - angegebenen Server nach 3 zusätzlichen Typen sucht. - -.. note:: - - **Disallowed IP addresses** - - Man sollte beachten das die MX Prüfung nur für externe Server akzeptiert wird. Wenn die tiefe MX Prüfung - aktiviert wird, dann werden IP Adressen wie ``192.168.*`` oder ``169.254.*`` nicht akzeptiert. - -.. _zend.validator.set.email_address.validateidn: - -Internationale Domain Namen prüfen ----------------------------------- - -``Zend\Validate\EmailAddress`` prüft auch internationale Zeichen prüfen, die in einigen Domains existieren. Dies -ist als Unterstützung für Internationale Domain Namen (IDN) bekannt. Standardmäßig ist das eingeschaltet. Das -kann aber ausgeschaltet werden indem eine Einstellung geändert wird über das interne ``Zend\Validate\Hostname`` -Objekt das innerhalb von ``Zend\Validate\EmailAddress`` existiert. - -.. code-block:: php - :linenos: - - $validator->getHostnameValidator->setValidateIdn(false); - -Weitere Informationen über die Verwendung von ``setValidateIdn()`` gibt es in der ``Zend\Validate\Hostname`` -Dokumentation. - -Es sollte darauf geachtet werden das IDNs nur geprüft werden wenn erlaubt ist DNS Hostnamen zu prüfen. - -.. _zend.validator.set.email_address.validatetld: - -Top Level Domains prüfen ------------------------- - -Standardmäßig wird ein Hostname mit einer List von bekannten TLDs geprüft. Das ist standardmäßig aktiviert, -kann aber ausgeschaltet werden indem die Einstellung über das interne ``Zend\Validate\Hostname`` geändert wird, -das innerhalb von ``Zend\Validate\EmailAddress`` existiert. - -.. code-block:: php - :linenos: - - $validator->getHostnameValidator->setValidateTld(false); - -Mehr Informationen über die Verwendung von ``setValidateTld()`` gibt es in der ``Zend\Validate\Hostname`` -Dokumentation. - -Es sollte darauf geachtet werden das TLDs nur geprüft werden wenn es auch erlaubt ist DNS Hostnamen zu prüfen. - -.. _zend.validator.set.email_address.setmessage: - -Setzen von Meldungen --------------------- - -``Zend\Validate\EmailAddress`` verwendet auch ``Zend\Validate\Hostname`` um den Teil des Hostnamens einer -angegebenen Email Adresse zu prüfen. Ab Zend Framework 1.10 kann man Meldungen für ``Zend\Validate\Hostname`` -auch von innerhalb ``Zend\Validate\EmailAddress`` setzen. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - $validator->setMessages(array( - Zend\Validate\Hostname::UNKNOWN_TLD => 'Ich kenne die TLD nicht') - ); - -Vor Zend Framework 1.10 musste man die Meldungen einem eigenen ``Zend\Validate\Hostname`` hinzufügen, und dann -diese Prüfung in ``Zend\Validate\EmailAddress`` setzen um die eigenen Meldungen zurückzubekommen. - - diff --git a/docs/languages/de/modules/zend.validator.greater-than.rst b/docs/languages/de/modules/zend.validator.greater-than.rst deleted file mode 100644 index 682113fb2..000000000 --- a/docs/languages/de/modules/zend.validator.greater-than.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.greaterthan: - -GreaterThan -=========== - -``Zend\Validate\GreaterThan`` erlaubt es zu prüfen ob ein angegebener Wert größer ist als ein minimaler -Grenzwert. - -.. note:: - - **Zend\Validate\GreaterThan unterstützt nur die Überprüfung von Nummern** - - Es sollte beachtet werden das ``Zend\Validate\GreaterThan`` nur die Prüfung von Nummern unterstützt. Strings - oder ein Datum können mit dieser Prüfung nicht geprüft werden. - -.. _zend.validator.set.greaterthan.options: - -Unterstützte Optionen für Zend\Validate\GreaterThan ---------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\GreaterThan`` unterstützt: - -- **min**: Setzt den mindesten erlaubten Wert. - -.. _zend.validator.set.greaterthan.basic: - -Normale Verwendung ------------------- - -Um zu prüfen ob ein angegebener Wert größer als eine definierte Grenze ist kann einfach das folgende Beispiel -verwendet werden. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\GreaterThan(array('min' => 10)); - $value = 10; - $return = $valid->isValid($value); - // Gibt true zurück - -Das obige Beispiel gibt für alle Werte ``TRUE`` zurück die 10 sind oder größer als 10. - - diff --git a/docs/languages/de/modules/zend.validator.hex.rst b/docs/languages/de/modules/zend.validator.hex.rst deleted file mode 100644 index 7a2730040..000000000 --- a/docs/languages/de/modules/zend.validator.hex.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.hex: - -Hex -=== - -``Zend\Validate\Hex`` erlaubt es zu prüfen ob ein angegebener Wert nur hexadezimale Zeichen enthält. Das sint -alle Zeichen von **0 bis 9** und unabhängig von der Schreibweise **A bis F**. Es gibt keine Begrenzung der Länge -für den Wert welchen man prüfen will. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Hex(); - if ($validator->isValid('123ABC')) { - // Der Wert enthält nur Hex Zeichen - } else { - // Falsch - } - -.. note:: - - **Ungültige Zeichen** - - Alle anderen Zeichen geben false zurück, inklusive Leerzeichen und Kommazeichen. Auch Unicode Nullzeichen und - Ziffern von anderen Schriften als Latein werden nicht als gültig erkannt. - -.. _zend.validator.set.hex.options: - -Unterstützte Optionen für Zend\Validate\Hex -------------------------------------------- - -Es gibt keine zusätzlichen Optionen für ``Zend\Validate\Hex``: - - diff --git a/docs/languages/de/modules/zend.validator.hostname.rst b/docs/languages/de/modules/zend.validator.hostname.rst deleted file mode 100644 index 605410bd0..000000000 --- a/docs/languages/de/modules/zend.validator.hostname.rst +++ /dev/null @@ -1,165 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.hostname: - -Hostname -======== - -``Zend\Validate\Hostname`` erlaubt die Prüfung von Hostnamen mit einem Set von bekannten Spezifikationen. Es ist -möglich drei verschiedene Typen von Hostnamen zu Prüfen: einen *DNS* Hostnamen (z.b. ``domain.com``), IP Adressen -(z.B. 1.2.3.4), und lokale Hostnamen (z.B. localhost). Standarmäßig werden nur *DNS* Hostnamen geprüft. - -.. _zend.validator.set.hostname.options: - -Unterstützte Optionen für Zend\Validate\Hostname ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Hostname`` unterstützt: - -- **allow**: Definiert die Art des Hostnamens welche verwendet werden darf. Siehe :ref:`Hostname Typen - ` für Details. - -- **idn**: Definiert ob *IDN* Domains erlaubt sind oder nicht. Diese Option ist standardmäßig ``TRUE``. - -- **ip**: Erlaubt es eine eigene IP Prüfung zu definieren. Diese Option ist standardmäßig eine neue Instanz von - ``Zend\Validate\Ip``. - -- **tld**: Definiert ob *TLD*\ s geprüft werden. Diese Option ist standardmäßig ``TRUE``. - -.. _zend.validator.set.hostname.basic: - -Normale Verwendung ------------------- - -**Normale Verwendung** - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Hostname(); - if ($validator->isValid($hostname)) { - // Hostname scheint gültig zu sein - } else { - // Hostname ist ungülig; Gründe dafür ausdrucken - foreach ($validator->getMessages() as $message) { - echo "$message\n"; - } - } - -Das prüft den Hostnamen ``$hostname`` und wird einen Fehler über ``getMessages()`` mit einer nützlichen -Fehlermeldung auswerfen. - -.. _zend.validator.set.hostname.types: - -Verschiedene Typen von Hostnamen prüfen ---------------------------------------- - -Es kann gewünscht sein auch IP Adressen, lokale Hostnamen, oder eine Kombination aller drei erlaubten Typen zu -prüfen. Das kann gemacht werden durch die Übergabe eines Parameters an ``Zend\Validate\Hostname`` wenn dieser -initialisiert wird. Der Parameter sollte ein Integer sein, welcher die Typen von Hostnamen auswählt die erlaubt -sind. Hierfür können die ``Zend\Validate\Hostname`` Konstanten verwendet werden. - -Die ``Zend\Validate\Hostname`` Konstanten sind: ``ALLOW_DNS`` um nur *DNS* Hostnamen zu erlauben, ``ALLOW_IP`` um -IP Adressen zu erlauben, ``ALLOW_LOCAL`` um lokale Hostnamen zu erlauben, und ``ALLOW_ALL`` um alle drei Typen zu -erlauben. Um nur IP Adressen zu prüfen kann das folgende Beispiel verwendet werden: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Hostname(Zend\Validate\Hostname::ALLOW_IP); - if ($validator->isValid($hostname)) { - // Hostname scheint gültig zu sein - } else { - // Hostname ist ungülig; Gründe dafür ausdrucken - foreach ($validator->getMessages() as $message) { - echo "$message\n"; - } - } - -Genau wie die Verwendung von ``ALLOW_ALL`` alle Typen von Hostnamen akzeptiert, können diese Typen kombiniert -werden um Kombinationen zu erlauben. Um zum Beispiel *DNS* und lokale Hostnamen zu akzeptieren muß das -``Zend\Validate\Hostname`` Objekt wie folgt initialisiert werden: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Hostname(Zend\Validate\Hostname::ALLOW_DNS | - Zend\Validate\Hostname::ALLOW_IP); - -.. _zend.validator.set.hostname.idn: - -Internationale Domain Namen prüfen ----------------------------------- - -Einige Länder Code Top Level Domains (ccTLDs), wie 'de' (Deutschland), unterstützen internationale Zeichen in -Domain Namen. Diese sind als Internationale Domain Namen (*IDN*) bekannt. Diese Domains können mit -``Zend\Validate\Hostname`` geprüft werden, mit Hilfe von erweiterten Zeichen die im Prüfprozess verwendet werden. - -.. note:: - - **IDN Domains** - - Bis jetzt unterstützen mehr als 50 ccTLDs *IDN* Domains. - -Eine *IDN* Domain zu prüfen ist genauso einfach wie die Verwendung des standard Hostnamen Prüfers da *IDN* -Prüfung standardmäßig eingeschaltet ist. Wenn *IDN* Prüfung ausgeschaltet werden soll, kann das entweder durch -die Übergabe eines Parameters im ``Zend\Validate\Hostname`` Constructor, oder über die ``setValidateIdn()`` -Methode gemacht werden. - -Die *IDN* Prüfung kann ausgeschaltet werden durch die Übergabe eines zweiten Parameters an den -``Zend\Validate\Hostname`` Constructor auf die folgende Art und Weise. - -.. code-block:: php - :linenos: - - $validator = - new Zend\Validate\Hostname( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'idn' => false - ) - ); - -Alternativ kann entweder ``TRUE`` oder ``FALSE`` an ``setValidateIdn()`` übergeben werden, um die *IDN* Prüfung -ein- oder auszuschalten. Wenn ein *IDN* Hostname geprüft wird, der aktuell nicht unterstützt wird, ist sicher das -die Prüfung fehlschlagen wird wenn er irgendwelche internationalen Zeichen hat. Wo keine ccTLD Datei in -``Zend/Validate/Hostname`` existiert, welche die zusätzlichen Zeichen definiert, wird eine normale Hostnamen -Prüfung durchgeführt. - -.. note:: - - **IDN Prüfung** - - Es sollte beachtet werden das *IDN*\ s nur geprüft werden wenn es erlaubt ist *DNS* Hostnamen zu prüfen. - -.. _zend.validator.set.hostname.tld: - -Top Level Domains prüfen ------------------------- - -Normalerweise wird ein Hostname gegen eine Liste von bekannten *TLD*\ s geprüft. Wenn diese Funktionalität nicht -benötigt wird kann das, auf die gleiche Art und Weise wie die *IDN* Unterstützung, ausgeschaltet werden Die *TLD* -Prüfung kann ausgeschaltet werden indem ein dritter Parameter an den ``Zend\Validate\Hostname`` Constructor -übergeben wird. Im folgenden Beispiel wird die *IDN* Prüfung durch den zweiten Parameter unterstützt. - -.. code-block:: php - :linenos: - - $validator = - new Zend\Validate\Hostname( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'idn' => true, - 'tld' => false - ) - ); - -Alternativ kann entweder ``TRUE`` oder ``FALSE`` übergeben an ``setValidateTld()`` übergeben werden um die *TLD* -Prüfung ein- oder auszuschalten. - -.. note:: - - **TLD Prüfung** - - Es sollte beachtet werden das *TLD*\ s nur geprüft werden wenn es erlaubt ist *DNS* Hostnamen zu prüfen. - - diff --git a/docs/languages/de/modules/zend.validator.iban.rst b/docs/languages/de/modules/zend.validator.iban.rst deleted file mode 100644 index 3d20d627c..000000000 --- a/docs/languages/de/modules/zend.validator.iban.rst +++ /dev/null @@ -1,111 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.iban: - -Iban -==== - -``Zend\Validate\Iban`` prüft ob ein angegebener Wert eine *IBAN* Nummer sein könnte. *IBAN* ist die Abkürzung -für "International Bank Account Number". - -.. _zend.validator.set.iban.options: - -Unterstützte Optionen für Zend\Validate\Iban --------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Iban`` unterstützt: - -- **locale**: Setzt das Gebietsschema welches verwendet wird um das *IBAN* Format für die Prüfung zu erhalten. - -.. _zend.validator.set.iban.basic: - -IBAN Prüfung ------------- - -*IBAN* Nummern sind immer in Bezug zu einem Land. Dies bedeutet dass unterschiedliche Länder unterschiedliche -Formate für Ihre *IBAN* Nummern verwenden. Das ist der Grund dafür warum *IBAN* nummern immer ein Gebietsschema -benötigen. Wenn wir dies wissen, dann wissen wir bereits wie wir ``Zend\Validate\Iban`` verwenden können. - -.. _zend.validator.set.iban.basic.application: - -Anwendungsweites Gebietsschema -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Wir können das Anwendungsweite Gebietsschema verwenden. Dass bedeutet, wenn keine Option bei der Instanzierung -angegeben wird, das ``Zend\Validate\Iban`` nach dem Anwendungsweiten Gebietsschema sucht. Siehe den folgenden -Codeabschnitt: - -.. code-block:: php - :linenos: - - // In der Bootstrap - Zend\Registry\Registry::set('Zend_Locale', new Zend\Locale\Locale('de_AT')); - - // Im Modul - $validator = new Zend\Validate\Iban(); - - if ($validator->isValid('AT611904300234573201')) { - // IBAN scheint gültig zu sein - } else { - // IBAN ist ungültig - } - -.. note:: - - **Anwendungsweites Gebietsschema** - - Natürlich funktioniert dies nur wenn das Anwendungsweite Gebietsschema in der Registry vorher gesetzt wurde. - Andernfalls wird ``Zend_Locale`` versuchen das Gebietsschema zu verwenden welches der Client sendet, oder wenn - keines gesendet wurde, das Gebietsschema der Umgebung. Man sollte darauf achten das dies zu ungewünschtem - Verhalten bei der Prüfung führen kann. - -.. _zend.validator.set.iban.basic.false: - -Unscharfe IBAN Prüfung -^^^^^^^^^^^^^^^^^^^^^^ - -Manchmal ist es nützlich, nur zu prüfen ob der angegebene Wert eine *IBAN* Nummer **ist** oder nicht. Das -bedeutet das man nicht auf ein definiertes Land prüfen will. Das kann getan werden indem ein ``FALSE`` als -Gebietsschema verwendet wird. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Iban(array('locale' => false)); - // Achtung: Man kann ein FALSE auch als einzelnen Parmeter setzen - - if ($validator->isValid('AT611904300234573201')) { - // IBAN scheint gültig zu sein - } else { - // IBAN ist nicht gültig - } - -So wird **jede** *IBAN* Nummer gültig sein. Es ist zu beachten dass man dies nicht tun sollte wenn man nur Konten -von einem einzelnen Land akzeptiert. - -.. _zend.validator.set.iban.basic.aware: - -Gebietsschema verwendende IBAN Prüfung -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Um gegen ein definiertes Land zu prüfen muss man nur das gewünschte Gebietsschema angeben. Man kann dies mit der -``locale`` Option tun, und bei Verwendung von ``setLocale()`` auch im Nachhinein. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Iban(array('locale' => 'de_AT')); - - if ($validator->isValid('AT611904300234573201')) { - // IBAN scheint gültig zu sein - } else { - // IBAN ist ungültig - } - -.. note:: - - **Vollständig qualifizierte Gebietsschemas verwenden** - - Man muss ein vollständig qualifiziertes Gebietsschema verwenden. Andernfalls kann das Land nicht korrekt - erkannt werden, da gleiche Sprachen in mehreren Ländern gesprochen werden. - - diff --git a/docs/languages/de/modules/zend.validator.identical.rst b/docs/languages/de/modules/zend.validator.identical.rst deleted file mode 100644 index 218dad7df..000000000 --- a/docs/languages/de/modules/zend.validator.identical.rst +++ /dev/null @@ -1,154 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.identical: - -Identical -========= - -``Zend\Validate\Identical`` erlaubt es zu prüfen ob ein angegebener Wert mit einem angegebenen Vergleichswert -identisch ist. - -.. _zend.validator.set.identical.options: - -Unterstützte Optionen für Zend\Validate\Identical -------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Identical`` unterstützt: - -- **strict**: Definiert ob die Prüfung strikt durchgeführt werden soll. Der Standardwert ist ``TRUE``. - -- **token**: Setzt den Token gegen den die Eingabe geprüft werden soll. - -.. _zend.validator.set.identical.basic: - -Grundsätzliche Verwendung -------------------------- - -Um zu prüfen ob zwei Werte identisch sind muss man den originalen Wert als Vergleichswert setzen. Siehe das -folgende Beispiel welches zwei Strings vergleicht. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical('original'); - if ($valid->isValid($value) { - return true; - } - -Die Prüfung wird nur dann ``TRUE`` zurückgeben wenn beide Werte 100% identisch sind. In unserem Beispiel wenn -``$value``'original' ist. - -Man kann den gewünschten Token auch im Nachhinein durch Verwendung der Methode ``setToken()`` setzen und mit -``getToken()`` den aktuell gesetzten Token erhalten. - -.. _zend.validator.set.identical.types: - -Identische Objekte ------------------- - -Natürlich kann ``Zend\Validate\Identical`` nicht nur Strings prüfen, sondern jeden Variablentyp wie Boolean, -Integer, Float, Array oder sogar Objekte. Wie bereits notiert müssen Vergleichswert und Wert identisch sein. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical(123); - if ($valid->isValid($input)) { - // Der Wert scheint gültig zu sein - } else { - // Der Wert ist ungültig - } - -.. note:: - - **Vergleich des Typs** - - Man sollte darauf acht geben das der Typ einer Variable für die Prüfung verwendet wird. Das bedeutet das der - String **'3'** nicht identisch ist mit dem Integerwert **3**. Wenn man eine nicht strikte Prüfung durchführen - will muss man die ``strict`` Option setzen. - -.. _zend.validator.set.identical.formelements: - -Formular Elemente ------------------ - -``Zend\Validate\Identical`` unterstützt auch den Vergleich von Formularelementen. Das kann getan werden indem der -Name des Elements als ``token`` verwendet wird. Siehe das folgende Beispiel: - -.. code-block:: php - :linenos: - - $form->addElement('password', 'elementOne'); - $form->addElement('password', 'elementTwo', array( - 'validators' => array( - array('identical', false, array('token' => 'elementOne')) - ) - )); - -Indem der Elementname vom ersten Element als ``token`` für das zweite Element verwendet wird, prüft der Prüfer -ob das zweite Element gleich dem ersten Element ist. Im Falle das der Benutzer keine zwei identischen Werte -eingegeben hat, erhält man einen Prüffehler. - -.. _zend.validator.set.identical.strict: - -Strikte Prüfung ---------------- - -Wie vorher erwähnt prüft ``Zend\Validate\Identical`` die Token strikt. Man kann dieses Verhalten ändern indem -die ``strict`` Option verwendet wird. Der Standardwert für diese Eigenschaft ist ``TRUE``. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical(array('token' => 123, 'strict' => FALSE)); - $input = '123'; - if ($valid->isValid($input)) { - // Die Eingabe scheint gültig zu sein - } else { - // Die Eingabe ist ungültig - } - -Der Unterschied zum vorhergehenden Beispiel besteht darin dass die Prüfung in diesem Fall ``TRUE`` zurückgibt, -selbst wenn man einen Integerwert mit einem String prüft solange der Inhalt identisch aber nicht vom gleichen Typ -ist. - -Der Bequemlichkeit halber kann man auch ``setStrict()`` und ``getStrict()`` verwenden. - -.. _zend.validator.set.identical.configuration: - -Konfiguration -------------- - -Wie alle anderen Prüfungen unterstützt ``Zend\Validate\Identical`` auch die Verwendung von -Konfigurationseinstellungen als Eingabe Parameter. Das bedeutet das man den Prüfer mit einem ``Zend_Config`` -Objekt konfigurieren kann. - -Aber das führt zu einem weiteren Fall den man berücksichtigen muss. Wenn man ein Array als Vergleichswert -verwendet, dann sollte man dieses in einen '``token``' Schlüssel einhüllen wenn dieses nur ein Element enthält. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical(array('token' => 123)); - if ($valid->isValid($input)) { - // Der Wert scheint gültig zu sein - } else { - // Der Wert ist ungültig - } - -Das oben stehende Beispiel prüft den Integerwert 123. Der Grund für diesen speziellen Fall ist, dass man den -Token der verwendet werden soll, durch Angabe des '``token``' Schlüssels, konfigurieren kann. - -Wenn der eigene Vergleichswert nur ein Element enthält, und dieses Element '``token``' heißt dann muss man -dieses, wie im oben stehenden Beispiel gezeigt, einhüllen. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical(array('token' => array('token' => 123))); - if ($valid->isValid($input)) { - // Der Wert scheint gültig zu sein - } else { - // Der Wert ist ungültig - } - - diff --git a/docs/languages/de/modules/zend.validator.in-array.rst b/docs/languages/de/modules/zend.validator.in-array.rst deleted file mode 100644 index 60900eccd..000000000 --- a/docs/languages/de/modules/zend.validator.in-array.rst +++ /dev/null @@ -1,168 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.in_array: - -InArray -======= - -``Zend\Validate\InArray`` erlaubt es zu prüfen ob ein gegebener Wert in einem Array enthalten ist. Er ist auch in -der Lage mehrdimensionale Arrays zu prüfen. - -.. _zend.validator.set.in_array.options: - -Unterstützte Optionen für Zend\Validate\InArray ------------------------------------------------ - -Die folgenden Optionen werden für ``Zend\Validate\InArray`` unterstützt: - -- **haystack**: Setzt den Haystack für die Prüfung. - -- **recursive**: Definiert ob die Prüfung rekursiv durchgeführt werden soll. Diese Option ist standardmäßig - ``FALSE``. - -- **strict**: Definiert ob die Prüfung strikt durchgeführt werden soll. Diese Option ist standardmäßig - ``FALSE``. - -.. _zend.validator.set.in_array.basic: - -Einfache Array Prüfung ----------------------- - -Der einfachste Weg ist es, das Array welches durchsucht werden soll, bei der Initiierung anzugeben: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray(array('key' => 'value', - 'otherkey' => 'othervalue')); - if ($validator->isValid('value')) { - // Wert gefunden - } else { - // Wert nicht gefunden - } - -Das verhält sich genauso wie *PHP*'s ``in_array()`` Methode. - -.. note:: - - Standardmäßig ist diese Prüfung nicht strikt noch kann Sie mehrdimensionale Arrays prüfen. - -Natürlich kann man das Array gegen das geprüft werden soll auch im Nachhinein durch Verwendung der -``setHaystack()`` Methode angegeben werden. ``getHaystack()`` gibt das aktuell gesetzte Haystack Array zurück. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray(); - $validator->setHaystack(array('key' => 'value', 'otherkey' => 'othervalue')); - - if ($validator->isValid('value')) { - // Wert gefunden - } else { - // Wert nicht gefunden - } - -.. _zend.validator.set.in_array.strict: - -Strikte Array Prüfung ---------------------- - -Wie vorher erwähnt kann man auch eine Strikte Prüfung im Array durchführen. Standardmäßig würde kein -Unterschied zwischen dem Integerwert **0** und dem String **"0"** sein. Wenn eine strikte Prüfung durchgeführt -wird dann wird dieser Unterschied auch geprüft und nur gleiche Typen werden akzeptiert. - -Eine strikte Prüfung kann auch auf zwei verschiedenen Wegen durchgeführt werden. Bei der Initiierung und durch -Verwendung einer Methode. Bei der Initiierung muß hierfür ein Array mit der folgenden Struktur angegeben werden: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray( - array( - 'haystack' => array('key' => 'value', 'otherkey' => 'othervalue'), - 'strict' => true - ) - ); - - if ($validator->isValid('value')) { - // Wert gefunden - } else { - // Wert nicht gefunden - } - -Der **haystack** Schlüssel enthält das eigene Array das für die Prüfung verwendet wird. Durch das Setzen des -**script** Schlüssels auf ``TRUE`` wird die Prüfung so durchgeführt, das der Typ strikt geprüft wird. - -Natürlich kann man auch die ``setStrict()`` Methode verwenden um diese Einstellung im Nachhinein zu ändern und -``getStrict()`` um den aktuell gesetzten Status zu erhalten. - -.. note:: - - Es ist zu beachten das die **strict** Einstellung standardmäßig ``FALSE`` ist. - -.. _zend.validator.set.in_array.recursive: - -Rekursive Array Prüfung ------------------------ - -Zusätzlich zu *PHP*'s ``in_array()`` Methode kann diese Prüfung auch verwendet werden um Mehrdimensionale Arrays -zu prüfen. - -Um mehrdimensionale Array zu prüfen muß die **recursive** Option gesetzt werden. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray( - array( - 'haystack' => array( - 'firstDimension' => array('key' => 'value', - 'otherkey' => 'othervalue'), - 'secondDimension' => array('some' => 'real', - 'different' => 'key')), - 'recursive' => true - ) - ); - - if ($validator->isValid('value')) { - // Wert gefunden - } else { - // Wert nicht gefunden - } - -Das eigene Array wird das rekursiv geprüft um zu sehen ob der angegebene Wert enthalten ist. Zusätzlich kann -``setRecursive()`` verwendet werden um diese Option im Nachhinein zu setzen und ``getRecursive()`` um Ihn zu -erhalten. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray( - array( - 'firstDimension' => array('key' => 'value', - 'otherkey' => 'othervalue'), - 'secondDimension' => array('some' => 'real', - 'different' => 'key') - ) - ); - $validator->setRecursive(true); - - if ($validator->isValid('value')) { - // Wert gefunden - } else { - // kein Wert gefunden - } - -.. note:: - - **Standardwert für die Rekursion** - - Standardmäßig ist die rekursive Prüfung ausgeschaltet. - -.. note:: - - **Optionsschlüssel im Haystack** - - Wenn man die Schlüssel '``haystack``', '``strict``' oder '``recursive``' im eigenen Haystack verwenden, dann - muß man diese mit dem ``haystack`` Schlüssel einhüllen. - - diff --git a/docs/languages/de/modules/zend.validator.ip.rst b/docs/languages/de/modules/zend.validator.ip.rst deleted file mode 100644 index 96bcdf8ed..000000000 --- a/docs/languages/de/modules/zend.validator.ip.rst +++ /dev/null @@ -1,81 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.ip: - -Ip -== - -``Zend\Validate\Ip`` erlaubt es zu Prüfen ob ein gegebener Wert eine IP Adresse ist. Er unterstützt den IPv4 und -auch den IPv6 Standard. - -.. _zend.validator.set.ip.options: - -Unterstützte Optionen für Zend\Validate\Ip ------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Ip`` unterstützt: - -- **allowipv4**: Definiert ob die Prüfung IPv4 Adressen erlaubt. Diese Option ist standardmäßig ``TRUE``. - -- **allowipv6**: Definiert ob die Prüfung IPv6 Adressen erlaubt. Diese Option ist standardmäßig ``TRUE``. - -.. _zend.validator.set.ip.basic: - -Grundsätzliche Verwendung -------------------------- - -Ein einfaches Beispiel für die Verwendung ist anbei: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Ip(); - if ($validator->isValid($ip)) { - // IP scheint gültig zu sein - } else { - // IP ist ungültig; Gründe ausgeben - } - -.. note:: - - **Ungültige IP Adressen** - - Es ist zu beachten das ``Zend\Validate\Ip`` nur IP Adressen prüft. Adressen wie '``mydomain.com``' oder - '``192.168.50.1/index.html``' sind keine gültigen IP Adressen. Sie sind entweder Hostnamen oder gültige *URL*\ - s, aber keine IP Adressen. - -.. note:: - - **IPv6 Prüfung** - - ``Zend\Validate\Ip`` prüft IPv6 Adressen mit einer Regex. Der Grund ist, dass die Filter und Methoden von *PHP* - der *RFC* nicht folgen. Viele andere vorhandene Klassen folgen Ihr auch nicht. - -.. _zend.validator.set.ip.singletype: - -IPv4 oder IPv6 alleine prüfen ------------------------------ - -Manchmal ist es nützlich nur eines der unterstützten Formate zu prüfen. Zum Beispiel wenn das eigene Netzwert -nur IPv4 unterstützt. In diesem Fall wäre es sinnlos IPv6 in der Prüfung zu erlauben. - -Um ``Zend\Validate\Ip`` auf ein Protokoll zu begrenzen kann man die Optionen ``allowipv4`` oder ``allowipv6`` auf -``FALSE`` setzen. Man kann das durchführen indem die Option entweder im Constructor angegeben wird, oder indem -``setOptions()`` im Nachhinein verwendet wird. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Ip(array('allowipv6' => false); - if ($validator->isValid($ip)) { - // IP scheint eine gültige IPv4 Adresse zu sein - } else { - // IP ist keine IPv4 Adresse - } - -.. note:: - - **Standard Verhalten** - - Das Standardverhalten dem ``Zend\Validate\Ip`` folgt, ist es beide Standards zu erlauben. - - diff --git a/docs/languages/de/modules/zend.validator.isbn.rst b/docs/languages/de/modules/zend.validator.isbn.rst deleted file mode 100644 index 42618a6a5..000000000 --- a/docs/languages/de/modules/zend.validator.isbn.rst +++ /dev/null @@ -1,112 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.isbn: - -Isbn -==== - -``Zend\Validate\Isbn`` erlaubt es einen *ISBN-10* oder *ISBN-13* Wert zu prüfen. - -.. _zend.validator.set.isbn.options: - -Unterstützte Optionen für Zend\Validate\Isbn --------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Isbn`` unterstützt: - -- **separator**: Definiert das erlaubte Trennzeichen für die *ISBN* Nummer. Diese ist standardmäßig ein leerer - String. - -- **type**: Definiert den erlaubten Typ an *ISBN* Nummern. Dieser ist standardmäßig ``Zend\Validate\Isbn::AUTO``. - Für Details sollte in :ref:`diesem Abschnitt ` nachgesehen werden. - -.. _zend.validator.set.isbn.basic: - -Einfache Verwendung -------------------- - -Ein einfaches Verwendungsbeispiel ist anbei zu finden: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Isbn(); - if ($validator->isValid($isbn)) { - // ISBN gültig - } else { - // ISBN ungültig - } - -Das prüft jeden *ISBN-10* und *ISBN-13* Wert ohne Trennzeichen. - -.. _zend.validator.set.isbn.type-explicit: - -Einen expliziten ISBN Prüfungstyp setzen ----------------------------------------- - -Ein Beispiel für die Begrenzung auf einen *ISBN* Typ ist anbei zu finden: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Isbn(); - $validator->setType(Zend\Validate\Isbn::ISBN13); - // ODER - $validator = new Zend\Validate\Isbn(array( - 'type' => Zend\Validate\Isbn::ISBN13, - )); - - if ($validator->isValid($isbn)) { - // Das ist ein gültiger ISBN-13 Wert - } else { - // Das ist ein ungültiger ISBN-13 Wert - } - -Das vorherige prüft nur auf *ISBN-13* Werte. - -Folgende gültige Typen sind vorhanden: - -- ``Zend\Validate\Isbn::AUTO`` (default) - -- ``Zend\Validate\Isbn::ISBN10`` - -- ``Zend\Validate\Isbn::ISBN13`` - -.. _zend.validator.set.isbn.separator: - -Eine Begrenzung auf ein Trennzeichen spezifizieren --------------------------------------------------- - -Ein Beispiel für die Begrenzung auf ein Trennzeichen ist anbei zu finden: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Isbn(); - $validator->setSeparator('-'); - // ODER - $validator = new Zend\Validate\Isbn(array( - 'separator' => '-', - )); - - if ($validator->isValid($isbn)) { - // Das ist eine gültige ISBN mit Trennzeichen - } else { - // Das ist eine ungültige ISBN mit Trennzeichen - } - -.. note:: - - **Werte ohne Trennzeichen** - - Es ist zu beachten das dies ``FALSE`` zurückgibt wenn ``$isbn`` kein Trennzeichen **oder** einen ungültigen - *ISBN* Wert enthält. - -Gültige Separatoren sind: - -- "" (Leer) (Standardwert) - -- "-" (Bindestrich) - -- " " (Leerzeichen) - - diff --git a/docs/languages/de/modules/zend.validator.less-than.rst b/docs/languages/de/modules/zend.validator.less-than.rst deleted file mode 100644 index c1544841e..000000000 --- a/docs/languages/de/modules/zend.validator.less-than.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.lessthan: - -LessThan -======== - -``Zend\Validate\LessThan`` erlaubt es zu prüfen ob ein angegebener Wert kleiner als ein maximaler Grenzwert ist. -Das ist der Cousine von ``Zend\Validate\GreaterThan``. - -.. note:: - - **Zend\Validate\LessThan unterstützt nur die Prüfung von Nummern** - - Es sollte beachtet werden das ``Zend\Validate\LessThan`` nur die Prüfung von Nummern unterstützt. Strings oder - ein Datum können mit dieser Prüfung nicht geprüft werden. - -.. _zend.validator.set.lessthan.options: - -Unterstützte Optionen für Zend\Validate\LessThan ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\LessThan`` unterstützt: - -- **max**: Setzt den maximal erlaubten Wert. - -.. _zend.validator.set.lessthan.basic: - -Normale Verwendung ------------------- - -Um zu prüfen ob ein angegebener Wert kleiner als eine definierte Grenz ist kann einfach das folgende Beispiel -verwendet werden. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\LessThan(array('max' => 10)); - $value = 10; - $return = $valid->isValid($value); - // Gibt true zurück - -Das obige Beispiel gibt für alle Werte ``TRUE`` zurück die 10 sind oder kleiner als 10. - - diff --git a/docs/languages/de/modules/zend.validator.messages.rst b/docs/languages/de/modules/zend.validator.messages.rst deleted file mode 100644 index fad6e9740..000000000 --- a/docs/languages/de/modules/zend.validator.messages.rst +++ /dev/null @@ -1,130 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.messages: - -Prüfungsmeldungen -================= - -Jede Prüfung die auf ``Zend_Validate`` basiert, bietet im Fall einer fehlgeschlagen Prüfung eine oder mehrere -Meldungen an. Diese Information kann verwendet werden um eigene Meldungen zu setzen, oder bestehende Meldungen -welche eine Prüfung zurückgeben könnte, auf etwas anderes zu übersetzen. - -Diese Prüfmeldungen sind Konstanten welche am Beginn jeder Prüfklasse gefunden werden können. Sehen wir uns für -ein beschreibendes Beispiel ``Zend\Validate\GreaterThan`` an: - -.. code-block:: php - :linenos: - - protected $_messageTemplates = array( - self::NOT_GREATER => "'%value%' is not greater than '%min%'", - ); - -Wie man siehr referenziert die Konstante ``self::NOT_GREATER`` auf den Fehler und wird als Schlüssel verwendet. -Und die Nachricht selbst ist der Wert des Nachrichtenarrays. - -Man kann alle Nachrichten Templates einer Prüfung erhalten indem man die Methode ``getMessageTemplates()`` -verwendet. Diese gibt das oben stehende array zurück, welches alle Nachrichten enthält die eine Prüfung im Falle -einer fehlgeschlagenen Prüfung zurückgeben kann. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\GreaterThan(); - $messages = $validator->getMessageTemplates(); - -Indem die Methode ``setMessage()`` verwendet wird kann man eine andere Meldung definieren die im Fall des -spezifizierten Fehlers zurückgegeben werden. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\GreaterThan(); - $validator->setMessage( - 'Bitte einen kleineren Wert angeben', - Zend\Validate\GreaterThan::NOT_GREATER - ); - -Der zweite Parameter definiert den Fehler der überschrieben wird. Wenn man diesen Parameter nicht angibt, wird die -angegebene Meldung für alle möglichen Fehler dieser Prüfung gesetzt. - -.. _zend.validator.messages.pretranslated: - -Verwendung vor-übersetzter Prüfungsmeldungen --------------------------------------------- - -Zend Framework wird mit mehr als 45 unterschiedlichen Prüfern und mehr als 200 Fehlermeldungen ausgeliefert. Es -kann eine zeitraubende Aufgabe sein alle diese Meldungen zu übersetzen. Aber der Bequemlichkeit halber kommt Zend -Framework mit bereits vor-übersetzten Prüfmeldungen. Diese können im Pfad ``/resources/languages`` der eigenen -Zend Framework Installation gefunden werden. - -.. note:: - - **Verwendeter Pfad** - - Die Ressource Dateien liegen ausserhalb des Bibliothekspfads weil alle Übersetzungen ausserhalb dieses Pfades - liegen sollten. - -Um also alle Prüfmeldungen zum Beispiel auf Deutsch zu übersetzen muss man nur einen Übersetzer an -``Zend_Validate`` anhängen der diese Ressourcedateien verwendet. - -.. code-block:: php - :linenos: - - $translator = new Zend\Translator\Translator( - array( - 'adapter' => 'array', - 'content' => '/resources/languages', - 'locale' => $language, - 'scan' => Zend\Translator\Translator::LOCALE_DIRECTORY - ) - ); - Zend\Validate\Abstract::setDefaultTranslator($translator); - -.. note:: - - **Verwendeter Übersetzungsadapter** - - Als Übersetzungsadapter hat Zend Framework den Array Adapter ausgewählt. Er ist einfach zu bearbeiten und sehr - schnell erstellt. - -.. note:: - - **Unterstützte Sprachen** - - Dieses Feature ist sehr jung, und deshalb ist die Anzahl der unterstützten Sprachen nicht sehr komplett. Neue - Sprachen werden mit jedem Release hinzugefügt. Zusätzlich können die existierenden Ressourcedateien verwendet - werden um eigene Übersetzungen durchzuführen. - - Man kann diese Ressource Dateien auch verwenden um existierende Übersetzungen umzuschreiben. Man muss diese - Dateien also nicht selbst per Hand erstellen. - -.. _zend.validator.messages.limitation: - -Begrenzen der Größe einer Prüfungsmeldung ------------------------------------------ - -Manchmal ist es notwendig die maximale Größe die eine Prüfungsmeldung haben kann zu begrenzen. Zum Beispiel wenn -die View nur eine maximale Größe von 100 Zeichen für die Darstellung auf einer Zeile erlaubt. Um die Verwendung -zu vereinfachen, ist ``Zend_Validate`` dazu in der Lage die maximal zurückgegebene Größe einer Prüfnachricht zu -begrenzen. - -Um die aktuell gesetzte Größe zu erhalten ist ``Zend\Validate\Validate::getMessageLength()`` zu verwenden. Wenn diese -1 -ist, dann wird die zurückgegebene Nachricht nicht begrenzt. Das ist das Standardverhalten. - -Um die Größe der zurückgegebenen Nachrichten zu begrenzen ist ``Zend\Validate\Validate::setMessageLength()`` zu -verwenden. Man kann diese auf jede benötigte Integer Größe setzen. Wenn die zurückzugebende Nachricht die -gesetzte Größe überschreitet, dann wird die Nachricht abgeschnitten und der String '**...**' wird statt dem Rest -der Nachricht hinzugefügt. - -.. code-block:: php - :linenos: - - Zend\Validate\Validate::setMessageLength(100); - -.. note:: - - **Wo wird dieser Parameter verwendet?** - - Die gesetzte Länge der Nachrichten wird für alle Prüfungen verwendet, sogar für selbstdefinierte, solange - Sie ``Zend\Validate\Abstract`` erweitern. - - diff --git a/docs/languages/de/modules/zend.validator.not-empty.rst b/docs/languages/de/modules/zend.validator.not-empty.rst deleted file mode 100644 index 96a475b47..000000000 --- a/docs/languages/de/modules/zend.validator.not-empty.rst +++ /dev/null @@ -1,120 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.notempty: - -NotEmpty -======== - -Dieser Prüfer erlaubt es zu prüfen ob ein angegebener Wert nicht leer ist. Das ist oft nützlich wenn man mit -Formular Elementen oder anderen Benutzereingaben arbeitet, und man sicherstellen will das den benötigten Elementen -Werte zugeordnet wurden. - -.. _zend.validator.set.notempty.options: - -Unterstützte Optionen für Zend\Validate\NotEmpty ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\NotEmpty`` unterstützt: - -- **type**: Setzt den Typ der Prüfung welcher durchgeführt wird. Für Details sollte in :ref:`diesem Abschnitt - ` nachgesehen werden. - -.. _zend.validator.set.notempty.default: - -Standardverhalten für Zend\Validate\NotEmpty --------------------------------------------- - -Standardmäßig arbeitet diese Prüfung anders als man es laut *PHP*'s ``empty()`` Funktion erwarten würde. Im -speziellen evaluiert diese Prüfung den den Integer **0** und den String '**0**' als leer. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\NotEmpty(); - $value = ''; - $result = $valid->isValid($value); - // gibt false zurück - -.. note:: - - **Unterschiedliches Standardverhalten zu PHP** - - Ohne Angabe einer Konfiguration ist das Verhalten von ``Zend\Validate\NotEmpty`` anders als das von *PHP*. - -.. _zend.validator.set.notempty.types: - -Ändern des Verhaltens für Zend\Validate\NotEmpty ------------------------------------------------- - -Einige Projekte haben andere Ansichten davon was als "leerer" Wert angesehen wird: ein String der nur Leerzeichen -enthält könnte als leer angesehen werden, oder **0** könnte als nicht leer angesehen werden (speziell für -boolsche Sequenzen). Um den unterschiedlichen Notwendigkeiten gerecht zu werden erlaubt es -``Zend\Validate\NotEmpty`` die Typen zu konfigurieren welche als leer angesehen werden und jene die es nicht -werden. - -Die folgenden Typen können behandelt werden: - -- **boolean**: Gibt ``FALSE`` zurück wenn der boolsche Wert ``FALSE`` ist. - -- **integer**: Gibt ``FALSE`` zurück wenn ein Integerwert **0** angegeben ist. Standardmäßig ist diese Prüfung - nicht aktiviert und gibt bei jedem Integerwert ``TRUE`` zurück. - -- **float**: Gibt ``FALSE`` zurück wenn die Gleitkommazahl **0.0** angegeben ist. Standardmäßig ist diese - Prüfung nicht aktiviert und gibt bei jeder Gleitkommazahl ``TRUE`` zurück. - -- **string**: Gibt ``FALSE`` zurück wenn ein leerer String **''** angegeben wird. - -- **zero**: Gibt ``FALSE`` zurück wenn das einzelne Zeichen Null (**'0'**) angegeben wird. - -- **empty_array**: Gibt ``FALSE`` zurück wenn ein leeres **array** angegeben wird. - -- **null**: Gibt ``FALSE`` zurück wenn ein ``NULL`` Wert angegeben wird. - -- **php**: Gibt bei den gleichen Gründen ``FALSE`` zurück wo auch *PHP*'s Methode ``empty()`` ``TRUE`` - zurückgeben würde. - -- **space**: Gibt ``FALSE`` zurück wenn ein String angegeben wird der nur Leerzeichen enthält. - -- **object**: Gibt ``TRUE`` zurück wenn ein Objekt angegeben wurde. ``FALSE`` wird zurückgegeben wenn ``object`` - nicht erlaubt, aber ein Objekt angegeben wurde. - -- **object_string**: Gibt ``FALSE`` zurück wenn ein Objekt angegeben wurde und dessen ``__toString()`` Methode - einen leeren String zurückgibt. - -- **object_count**: Gibt ``FALSE`` zurück wenn ein Objekt angegeben wurde, es ein ``Countable`` Interface hat und - seine Anzahl 0 ist. - -- **all**: Gibt bei allen oben stehenden Typen ``FALSE`` zurück. - -Alle anderen Werte geben standardmäßig ``TRUE`` zurück. - -Es gibt verschiedene Wege um zu wählen welche der obigen Typen geprüft werden sollen. Man kann ein oder mehrere -Typen angeben und Sie hinzufügen, man kann ein Array angeben, man kann Konstanten verwenden, oder man gibt einen -textuellen String an. Siehe auch die folgenden Beispiele: - -.. code-block:: php - :linenos: - - // Gibt bei 0 false zurück - $validator = new Zend\Validate\NotEmpty(Zend\Validate\NotEmpty::INTEGER); - - // Gibt bei 0 oder '0' false zurück - $validator = new Zend\Validate\NotEmpty( - Zend\Validate\NotEmpty::INTEGER + Zend\NotEmpty\NotEmpty::ZERO - ); - - // Gibt bei 0 oder '0' false zurück - $validator = new Zend\Validate\NotEmpty(array( - Zend\Validate\NotEmpty::INTEGER, - Zend\Validate\NotEmpty::ZERO - )); - - // Gibt bei 0 oder '0' false zurück - $validator = new Zend\Validate\NotEmpty(array( - 'integer', - 'zero', - )); - -Man kann auch eine Instanz von ``Zend_Config`` angeben um die gewünschten Typen zu setzen. Um Typen nach der -Instanzierung zu setzen kann die Methode ``setType()`` verwendet werden. - - diff --git a/docs/languages/de/modules/zend.validator.post-code.rst b/docs/languages/de/modules/zend.validator.post-code.rst deleted file mode 100644 index 12853b52f..000000000 --- a/docs/languages/de/modules/zend.validator.post-code.rst +++ /dev/null @@ -1,105 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.post_code: - -PostCode -======== - -``Zend\Validate\PostCode`` erlaubt es zu eruieren ob ein angegebener Wert eine gültige Postleitzahl ist. -Postleitzahlen sind spezifisch für Städte und in einigen Gebietsschemata auch als *ZIP* Codes bezeichnet. - -``Zend\Validate\PostCode`` kennt mehr als 160 unterschiedliche Formate für Postleitzahlen. Um das richtige Format -auszuwählen gibt es 2 Wege. Man kann entweder ein voll qualifiziertes Gebietsschema verwenden, oder ein eigenes -Format manuall setzen. - -Die Verwendung eines Gebietsschemas ist bequemer da Zend Framework bereits die entsprechenden Formate für -Postleitzahlen für jedes Gebietsschema kennt; aber muss man ein voll qualifiziertes Gebietsschema verwenden (eines -das eine Region spezifiziert) damit es funktioniert. Das Gebietsschema "de" zum Beispiel ist zwar ein -Gebietsschema, kann aber nicht mit ``Zend\Validate\PostCode`` verwendet werden da es keine Region enthält; "de_AT" -andererseits würde ein gültiges Gebietsschema sein da es den Region Code spezifiziert ("AT", für Österreich). - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('de_AT'); - -Wenn man das Gebietsschema nicht selbst setzt, dann verwendet ``Zend\Validate\PostCode`` das anwendungsweit -gesetzte Gebietsschema, oder wenn keines vorhanden ist, das Gebietsschema welches von ``Zend_Locale`` -zurückgegeben wird. - -.. code-block:: php - :linenos: - - // Anwendungsweites Gebietsschema in der Bootstrap - $locale = new Zend\Locale\Locale('de_AT'); - Zend\Registry\Registry::set('Zend_Locale', $locale); - - $validator = new Zend\Validate\PostCode(); - -Man kann das Gebietsschema auch im Nachhinein ändern, indem man ``setLocale()`` aufruft. Und natürlich kann man -das aktuelle Gebietsschema erhalten indem ``getLocale()`` aufgerufen wird. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('de_AT'); - $validator->setLocale('en_GB'); - -Postleitzahlen Formate selbst sind einfache Regular Expression Strings. Wenn das internationale Postleitzahlen -Format, welches durch das Setzen des Gebietsschemas verwendet wird, den eigenen Bedüfnissen nicht entspricht, dann -kann man ein Format auch manuell setzen indem ``setFormat()`` aufgerufen wird. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('de_AT'); - $validator->setFormat('AT-\d{5}'); - -.. note:: - - **Konventionen für selbst definierte Formate** - - Wenn selbst definierte Formate verwendet werden sollten die Start- (``'/^'``) und Endetags (``'$/'``) nicht - angegeben werden. Sie werden automatisch hinzugefügt. - - Man sollte darauf achtgeben das Postleitzahlen Werte immer auf einer strikte Art geprüft werden. Das bedeutet - das Sie alleinstehend geschrieben werden müssen, ohne zusätzliche Zeichen, wenn diese nicht durch das Format - abgedeckt werden. - -.. _zend.validator.set.post_code.constructor: - -Optionen des Constructors -------------------------- - -Grundsätzlich kann man dem Contructor von ``Zend\Validate\PostCode`` entweder ein ``Zend_Locale`` Objekt, oder -einen String der ein voll qualifiziertes Gebietsschema repräsentiert, angeben. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('de_AT'); - $validator = new Zend\Validate\PostCode($locale); - -Zusätzlich kann man dem Contructor entweder ein Array oder ein ``Zend_Config`` Objekt übergeben. Wenn man das -tut, muss man entweder den Schlüssel "locale" oder "format" verwenden; diese werden verwendet um die betreffenden -Werte im Prüfobjekt zu setzen. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode(array( - 'locale' => 'de_AT', - 'format' => 'AT_\d+' - )); - -.. _zend.validator.set.post_code.options: - -Unterstützte Optionen für Zend\Validate\PostCode ------------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\PostCode`` unterstützt: - -- **format**: Setzt das Postleitzahl-Format welches für die Prüfung der Eingabe verwendet werden soll. - -- **locale**: Setzt ein Gebietsschema von dem die Postleitzahl genommen wird. - - diff --git a/docs/languages/de/modules/zend.validator.regex.rst b/docs/languages/de/modules/zend.validator.regex.rst deleted file mode 100644 index 41ff5bdc8..000000000 --- a/docs/languages/de/modules/zend.validator.regex.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.regex: - -Regex -===== - -Diese Prüfung erlaubt es zu prüfen ob ein angegebener String einer definierten Regular Expression entspricht. - -.. _zend.validator.set.regex.options: - -Unterstützte Optionen für Zend\Validate\Regex ---------------------------------------------- - -Die folgenden Optionen werden für ``Zend\Validate\Regex`` unterstützt: - -- **pattern**: Setzt das Pattern der Regular Expression für diese Prüfung. - -.. _zend.validator.set.regex.basic: - -Prüfen mit Zend\Validate\Regex ------------------------------- - -Die Prüfung mit Regular Expressions erlaubt es komplizierte Prüfungen durchzuführen, ohne das eine eigene -Prüfung geschrieben werden muss. Die Verwendung von Regular Expressions ist relativ üblich und einfach. Sehen wir -uns ein Beispiel an: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Regex(array('pattern' => '/^Test/')); - - $validator->isValid("Test"); // Gibt true zurück - $validator->isValid("Testing"); // Gibt true zurück - $validator->isValid("Pest"); // Gibt false zurück - -Wie man sehen kann hat das Pattern welches anzugeben ist die gleiche Syntax wie für ``preg_match()``. Für Details -über Regular Expressions sollte man einen Blick in `PHP's Handbuch über die PCRE Pattern Syntax`_ werfen. - -.. _zend.validator.set.regex.handling: - -Handhabung von Pattern ----------------------- - -Es ist auch möglich andere Pattern im Nachhinein zu setzen indem ``setPattern()`` verwendet wird, und das aktuell -gesetzte Pattern mit ``getPattern()`` erhalten. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Regex(array('pattern' => '/^Test/')); - $validator->setPattern('ing$/'); - - $validator->isValid("Test"); // Gibt false zurück - $validator->isValid("Testing"); // Gibt true zurück - $validator->isValid("Pest"); // Gibt false zurück - - - -.. _`PHP's Handbuch über die PCRE Pattern Syntax`: http://php.net/manual/en/reference.pcre.pattern.syntax.php diff --git a/docs/languages/de/modules/zend.validator.rst b/docs/languages/de/modules/zend.validator.rst deleted file mode 100644 index 19f378a13..000000000 --- a/docs/languages/de/modules/zend.validator.rst +++ /dev/null @@ -1,295 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.introduction: - -Einführung -========== - -Die Komponente ``Zend_Validate`` bietet ein Reihe von häufig benötigten Prüfungen. Sie bietet auch einen -einfachen Verkettungsmechanismus für Prüfungen, mit welchem mehrfache Prüfungen in einer benutzerdefinierten -Reihenfolge auf einen einzelnen Wert angewendet werden können. - -.. _zend.validator.introduction.definition: - -Was ist eine Prüfung? ---------------------- - -Eine Prüfung untersucht ihre Eingabe hinsichtlich einiger Anforderungen und produziert ein boolesches Ergebnis - -wenn die Eingabe erfolgreich gegen die Anforderungen geprüft werden konnte. Wenn die Eingabe den Anforderungen -nicht entspricht, kann die Prüfung zusätzliche Informationen darüber bieten, welche der Anforderungen die -Eingabe nicht entspricht. - -Zum Beispiel könnte eine Webanwendung erfordern, dass ein Benutzername zwischen sechs und zwölf Zeichen lang sein -soll und nur alphanumerische Zeichen enthalten soll. Eine Prüfung kann dafür verwendet werden um sicherzustellen, -dass Benutzernamen diesen Anforderungen entsprechen. Wenn ein gewählter Benutzername einer oder beiden -Anforderungen nicht entspricht, wäre es nützlich zu wissen, welche der Anforderungen der Benutzername nicht -entsprochen hat. - -.. _zend.validator.introduction.using: - -Standardnutzung von Prüfungen ------------------------------ - -Prüfungen auf diesem Weg definiert zu haben, bietet die Grundlage für ``Zend\Validate\Interface``, welche zwei -Methoden definiert, ``isValid()`` und ``getMessages()``. Die Methode ``isValid()`` führt eine Prüfung über die -angegebenen Werte aus und gibt nur dann ``TRUE`` zurück, wenn der Wert gegenüber den Kriterien der Prüfung -entsprochen hat. - -Wenn ``isValid()`` ``FALSE`` zurück gibt, bietet ``getMessages()`` ein Array von Nachrichten, welches die Gründe -für die fehlgeschlagene Prüfung beschreiben. Die Arrayschlüssel sind kurze Strings, welche die Gründe für eine -fehlgeschlagene Prüfung identifizieren und die Arraywerte sind die entsprechend menschenlesbaren -String-Nachrichten. Die Schlüssel und Werte sind klassenabhängig; jede Prüfklasse definiert ihr eigenes Set von -Nachrichten für fehlgeschlagene Prüfungen und die eindeutigen Schlüssel, welche diese identifizieren. Jede -Klasse hat also eine const Definition die jedem Identifikator für eine fehlgeschlagene Prüfung entspricht. - -.. note:: - - Die Methode ``getMessages()`` gibt die Information für Prüfungsfehler nur für den zuletzt durchgeführten - Aufruf von ``isValid()`` zurück. Jeder Aufruf von ``isValid()`` löscht jegliche Nachricht und Fehler, welche - durch vorhergehende Aufrufe von ``isValid()`` vorhanden waren, weil normalerweise jeder Aufruf von ``isValid()`` - für einen unterschiedlichen Eingabewert gemacht wird. - -Das folgende Beispiel zeigt die Prüfung einer E-Mail Adresse: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - - if ($validator->isValid($email)) { - // - // E-Mail scheint gültig zu sein - // - } else { - // - // E-Mail ist ungültig; drucke die Gründe - // - foreach ($validator->getMessages() as $messageId => $message) { - echo "Validation failure '$messageId': $message\n"; - } - } - -.. _zend.validator.introduction.messages: - -Nachrichten anpassen --------------------- - -Prüfklassen bieten eine Methode ``setMessage()``, mit der das Format der Nachricht definiert werden kann, die von -``getMessages()`` im Fall einer fehlerhaften Prüfung zurückgegeben wird. Das erste Argument dieser Methode ist -ein String, der die Fehlernachricht enthält. Es können Kürzel in den String eingebaut werden, welche mit den -für die Prüfung relevanten Daten aufgefüllt werden. Das Kürzel **%value%** wird von allen Prüfungen -unterstützt; es ist verbunden mit dem Wert der an ``isValid()`` übergeben wird. Andere Kürzel können in jeder -Prüfklasse von Fall zu Fall unterstützt werden. Zum Beispiel ist **%max%** das Kürzel, welches von -``Zend\Validate\LessThan`` unterstützt wird. Die ``getMessageVariables()`` Methode gibt ein Array von variablen -Kürzeln zurück, welche vom Prüfer unterstützt werden. - -Das zweite optionale Argument ist ein String, der das Template der fehlerhaften Prüfnachricht identifiziert, die -gesetzt werden soll. Das ist nützlich wenn eine Prüfklasse mehr als einen Grund für einen Fehlschlag definiert. -Wenn das zweite Argument nicht angegeben wird, nimmt ``setMessage()`` an, dass die spezifizierte Nachricht für das -erste Messagetemplate verwendet werden soll, das in der Prüfklasse definiert ist. Viele Prüfklassen haben nur ein -Template für eine Fehlernachricht definiert, sodass es nicht notwendig ist anzugeben, welches Template für -Fehlernachrichten geändert werden soll. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(8); - - $validator->setMessage( - 'Der String \'%value%\' ist zu kurz; er muss mindestens %min% ' . - 'Zeichen sein', - Zend\Validate\StringLength::TOO_SHORT); - - if (!$validator->isValid('word')) { - $messages = $validator->getMessages(); - echo $messages[0]; - - // "Der String 'word' ist zu kurz; er muss mindestens 8 Zeichen sein" - } - -Es können mehrere Nachrichten durch Verwendung der Methode ``setMessages()`` gesetzt werden. Dessen Argument ist -ein Array, welches Schlüssel/Nachrichten Paare enthält. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - - $validator->setMessages( array( - Zend\Validate\StringLength::TOO_SHORT => - 'Der String \'%value%\' ist zu kurz', - Zend\Validate\StringLength::TOO_LONG => - 'Der String \'%value%\' ist zu lang' - )); - -Wenn die Anwendung mehr Flexibilität benötigt in der Art und Weise wie Prüffehler gemeldet werden, kann auf die -Eigenschaften durch denselben Namen zugegriffen werden, wie mit dem Nachrichtenkürzel, das von einer Prüfklasse -unterstützt wird. Die Eigenschaft ``value`` ist immer in einem Prüfer vorhanden; Das ist der Wert, der als -Argument von ``isValid()`` definiert wurde. Andere Eigenschaften können von Fall zu Fall in jeder Prüfklasse -unterstützt werden. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - - if (!validator->isValid('word')) { - echo 'Wort fehlgeschlaten: ' - . $validator->value - . '; die Länge ist nicht zwischen ' - . $validator->min - . ' und ' - . $validator->max - . "\n"; - } - -.. _zend.validator.introduction.static: - -Verwenden der statischen is() Methode -------------------------------------- - -Wenn es unpassend ist, eine gegebenen Prüfklasse zu laden und eine Instanz des Prüfers zu erstellen, kann die -statische Methode ``Zend\Validate\Validate::is()`` als alternativer Stil des Aufrufs verwendet werden. Das erste Argument -dieser Methode ist ein Datenwert, der an die Methode ``isValid()`` übergeben werden würde. Das zweite Argument -ist ein String, welcher mit dem Basisnamen der Prüfklasse übereinstimmt, relativ zum Namensraum von -``Zend_Validate``. Die Methode ``is()`` lädt die Klasse automatisch, erstellt eine Instanz und wendet die Methode -``isValid()`` auf die Eingabedaten an. - -.. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($email, 'EmailAddress')) { - // Ja, die Email Adresse scheint gültig zu sein - } - -Es kann auch ein Array von Konstruktor-Argumenten übergeben werden, wenn diese für die Prüfung benötigt werden. - -.. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($value, 'Between', array('min' => 1, 'max' => 12))) { - // Ja, $value ist zwischen 1 und 12 - } - -Die Methode ``is()`` gibt einen booleschen Wert zurück, denselben wie die Methode ``isValid()``. Wird die -statische Methode ``is()`` verwendet, sind Nachrichten für Prüffehler nicht vorhanden. - -Die statische Verwendung kann für das ad hoc Verwenden eines Prüfers bequem sein, aber wenn ein Prüfer für -mehrere Eingaben verwendet werden soll, ist es effizienter die nicht statische Verwendung zu benutzen, indem eine -Instanz des Prüfobjekts erstellt wird und dessen Methode ``isValid()`` aufgerufen wird. - -Die Klasse ``Zend\Filter\Input`` erlaubt es, auch mehrfache Filter und Prüfklassen zu instanzieren und bei Bedarf -aufzurufen, um Sets von Eingabedaten zu bearbeiten. Siehe :ref:`Zend\Filter\Input `. - -.. _zend.validator.introduction.static.namespaces: - -Namespaces -^^^^^^^^^^ - -Wenn man mit selbst definierten Prüfungen arbeitet, dann kann man an ``Zend\Validate\Validate::is()`` einen vierten -Parameter übergeben welcher der Namespace ist, an dem die eigene Prüfung gefunden werden kann. - -.. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($value, 'MyValidator', array('min' => 1, 'max' => 12), - array('FirstNamespace', 'SecondNamespace')) { - // Ja, $value ist in Ordnung - } - -``Zend_Validate`` erlaubt es auch, standardmäßige Namespaces zu setzen. Das bedeutet, dass man sie einmal in der -Bootstrap setzt und sie nicht mehr bei jedem Aufruf von ``Zend\Validate\Validate::is()`` angeben muss. Der folgende -Codeschnipsel ist identisch mit dem vorherigen. - -.. code-block:: php - :linenos: - - Zend\Validate\Validate::setDefaultNamespaces(array('FirstNamespace', 'SecondNamespace')); - if (Zend\Validate\Validate::is($value, 'MyValidator', array('min' => 1, 'max' => 12)) { - // Yes, $value is ok - } - - if (Zend\Validate\Validate::is($value, - 'OtherValidator', - array('min' => 1, 'max' => 12)) { - // Yes, $value is ok - } - -Der Bequemlichkeit halber gibt es die folgenden Methoden, welche die Behandlung von Namespaces erlauben: - -- **Zend\Validate\Validate::getDefaultNamespaces()**: Gibt alle standardmäßigen Namespaces als Array zurück. - -- **Zend\Validate\Validate::setDefaultNamespaces()**: Setzt neue standardmäßige Namespaces und überschreibt alle vorher - gesetzten. Es wird entweder ein String für einen einzelnen Namespace akzeptiert oder ein Array für mehrere - Namespaces. - -- **Zend\Validate\Validate::addDefaultNamespaces()**: Fügt zusätzliche Namespaces zu den bereits gesetzten hinzu. Es wird - entweder ein String für einen einzelnen Namespace akzeptiert oder ein Array für mehrere Namespaces. - -- **Zend\Validate\Validate::hasDefaultNamespaces()**: Gibt ``TRUE`` zurück, wenn ein oder mehrere standardmäßige - Namespaces gesetzt sind und ``FALSE``, wenn keine standardmäßigen Namespaces gesetzt sind. - -.. _zend.validator.introduction.translation: - -Meldungen übersetzen --------------------- - -Prüfungsklassen bieten eine Methode ``setTranslator()``, mit der man eine Instanz von ``Zend_Translator`` -definieren kann, die Nachrichten im Falle eines Prüfungsfehlers übersetzt. Die ``getTranslator()`` Methode gibt -die gesetzte Übersetzungsinstanz zurück. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - $translate = new Zend\Translator\Translator( - array( - 'adapter' => 'array', - 'content' => array( - Zend\Validate\StringLength::TOO_SHORT => 'Übersetzt \'%value%\'' - ), - 'locale' => 'en' - ) - ); - - $validator->setTranslator($translate); - -Mit der statischen Methode ``setDefaultTranslator()`` kann eine Instanz von ``Zend_Translator`` gesetzt werden und -mit ``getDefaultTranslator()`` empfangen. Das verhindert, dass man den Übersetzer manuell für alle -Prüfungsklassen setzen muss und vereinfacht den Code. - -.. code-block:: php - :linenos: - - $translate = new Zend\Translator\Translator( - array( - 'adapter' => 'array', - 'content' => array( - Zend\Validate\StringLength::TOO_SHORT => 'Übersetzt \'%value%\'' - ), - 'locale' => 'en' - ) - ); - Zend\Validate\Validate::setDefaultTranslator($translate); - -.. note:: - - Wenn man ein anwendungsweites Gebietsschema in der Registry gesetzt hat, wird dieses Gebietsschema als - standardmäßiger Übersetzer verwendet. - -Manchmal ist es notwendig, den Übersetzer in einer Prüfklasse auszuschalten. Um das zu tun, kann die Methode -``setDisableTranslator()`` verwendet werden, welche einen booleschen Wert akzeptiert und -``isTranslatorDisabled()``, um den gesetzten Wert zu erhalten. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - if (!$validator->isTranslatorDisabled()) { - $validator->setDisableTranslator(); - } - -Es ist auch möglich einen Übersetzer zu verwenden, statt eigene Meldungen mit ``setMessage()`` zu setzen. Aber -wenn man das tut, sollte man im Kopf behalten, dass der Übersetzer auch mit den Meldungen arbeitet, die man selbst -gesetzt hat. - - diff --git a/docs/languages/de/modules/zend.validator.set.rst b/docs/languages/de/modules/zend.validator.set.rst deleted file mode 100644 index b30fd9464..000000000 --- a/docs/languages/de/modules/zend.validator.set.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set: - -Standard Prüfklassen -==================== - -Zend Framework kommt mit einem Standardset von Prüfklassen, welche fertig zur Verwendung sind. - -.. include:: zend.i18n.validator.alnum.rst -.. include:: zend.i18n.validator.alpha.rst -.. include:: zend.validator.barcode.rst -.. include:: zend.validator.between.rst -.. include:: zend.validator.callback.rst -.. include:: zend.validator.credit-card.rst -.. _zend.validator.set.ccnum: - -Ccnum ------ - -.. note:: - - Die ``Ccnum`` Prüfung sollte nicht mehr eingesetzt werden. Stattdessen sollte man die ``CreditCard`` Prüfung - verwenden. Aus Gründen der Sicherheit sollte man CreditCard statt Ccnum verwenden. - -.. include:: zend.validator.date.rst -.. include:: zend.validator.db.rst -.. include:: zend.validator.digits.rst -.. include:: zend.validator.email-address.rst -.. include:: zend.i18n.validator.float.rst -.. include:: zend.validator.greater-than.rst -.. include:: zend.validator.hex.rst -.. include:: zend.validator.hostname.rst -.. include:: zend.validator.iban.rst -.. include:: zend.validator.identical.rst -.. include:: zend.validator.in-array.rst -.. include:: zend.i18n.validator.int.rst -.. include:: zend.validator.isbn.rst -.. include:: zend.validator.ip.rst -.. include:: zend.validator.less-than.rst -.. include:: zend.validator.not-empty.rst -.. include:: zend.validator.post-code.rst -.. include:: zend.validator.regex.rst -.. include:: zend.validator.sitemap.rst -.. include:: zend.validator.string-length.rst - diff --git a/docs/languages/de/modules/zend.validator.sitemap.rst b/docs/languages/de/modules/zend.validator.sitemap.rst deleted file mode 100644 index c1fa21dc5..000000000 --- a/docs/languages/de/modules/zend.validator.sitemap.rst +++ /dev/null @@ -1,97 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.sitemap: - -Sitemap Prüfungen -================= - -Die folgenden Prüfungen entsprechen dem `Sitemap XML Protokoll`_. - -.. _zend.validator.sitemap.changefreq: - -Sitemap_Changefreq ------------------- - -Prüft ob ein String gültig ist um Ihn als 'changefreq' Element in einem Sitemap *XML* Dokument zu verwenden. -Gültige Elemente sind: 'always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', oder 'never'. - -Gibt ``TRUE`` zurück wenn und nur wenn der Wert ein String ist und mit einer der oben spezifizierten Frequenzen -übereinstimmt. - -.. _zend.validator.sitemap.lastmod: - -Sitemap_Lastmod ---------------- - -Prüft ob ein String gültig ist um Ihn als 'lastmod' Element in einem Sitemap *XML* Dokument zu verwenden. Das -lastmod Element sollte einen *W3C* Datumsstring enthalten, und optional Informationen über die Zeit enthalten. - -Gibt ``TRUE`` zurück wenn, und nur wenn, der angegebene Wert ein String und in Bezug auf das Prokoll gültig ist. - -.. _zend.validator.sitemap.lastmod.example: - -.. rubric:: Sitemap Lastmod Prüfung - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Sitemap\Lastmod(); - - $validator->isValid('1999-11-11T22:23:52-02:00'); // true - $validator->isValid('2008-05-12T00:42:52+02:00'); // true - $validator->isValid('1999-11-11'); // true - $validator->isValid('2008-05-12'); // true - - $validator->isValid('1999-11-11t22:23:52-02:00'); // false - $validator->isValid('2008-05-12T00:42:60+02:00'); // false - $validator->isValid('1999-13-11'); // false - $validator->isValid('2008-05-32'); // false - $validator->isValid('yesterday'); // false - -.. _zend.validator.sitemap.loc: - -Sitemap_Loc ------------ - -Prüft ob ein String für die Verwendung als 'loc' Element in einem Sitemap *XML* Dokument gültig ist. Er -verwendet intern ``Zend\Form\Form::check()``. Mehr darüber kann man unter :ref:`URI Prüfung ` -lesen. - -.. _zend.validator.sitemap.priority: - -Sitemap_Priority ----------------- - -Prüft ob ein Wert für die Verwendung als 'priority' Element in einem Sitemap *XML* Dokument gültig ist. Der Wert -sollte ein Dezimalwert zwischen 0.0 und 1.0 sein. Diese Prüfung akzeptiert sowohl nummerische Werte als auch -Stringwerte. - -.. _zend.validator.sitemap.priority.example: - -.. rubric:: Sitemap Priority Prüfung - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Sitemap\Priority(); - - $validator->isValid('0.1'); // true - $validator->isValid('0.789'); // true - $validator->isValid(0.8); // true - $validator->isValid(1.0); // true - - $validator->isValid('1.1'); // false - $validator->isValid('-0.4'); // false - $validator->isValid(1.00001); // false - $validator->isValid(0xFF); // false - $validator->isValid('foo'); // false - -.. _zend.validator.set.sitemap.options: - -Unterstützte Optionen für Zend\Validate\Sitemap\* -------------------------------------------------- - -Es gibt keine unterstützten Optionen für irgendeine der Sitemap Prüfungen. - - - -.. _`Sitemap XML Protokoll`: http://www.sitemaps.org/protocol.php diff --git a/docs/languages/de/modules/zend.validator.string-length.rst b/docs/languages/de/modules/zend.validator.string-length.rst deleted file mode 100644 index ff1c2015b..000000000 --- a/docs/languages/de/modules/zend.validator.string-length.rst +++ /dev/null @@ -1,154 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.stringlength: - -StringLength -============ - -Diese Prüfung erlaubt es zu prüfen ob ein angegebener String eine definierte Länge besitzt. - -.. note:: - - **Zend\Validate\StringLength unterstützt nur die Prüfung von Strings** - - Es ist zu beachten das ``Zend\Validate\StringLength`` nur die Prüfung von Strings unterstützt. Integer, - Floats, Datumswerte oder Objekte können mit dieser Prüfung nicht überprüft werden. - -.. _zend.validator.set.stringlength.options: - -Unterstützte Optionen für Zend\Validate\StringLength ----------------------------------------------------- - -Die folgenden Optionen werden von ``Zend\Validate\StringLength`` unterstützt: - -- **encoding**: Setzt die Kodierung von ``ICONV`` welche für den String verwendet wird. - -- **min**: Setzt die erlaubte Mindestlänge für einen String. - -- **max**: Setzt die erlaubte Maximallänge für einen String. - -.. _zend.validator.set.stringlength.basic: - -Standardverhalten für Zend\Validate\StringLength ------------------------------------------------- - -Standardmäßig prüft diese Prüfung ob ein Wert zwischen ``min`` und ``max`` ist. Aber für ``min`` ist der -Standardwert **0** und für ``max`` ist er **NULL**, was unlimitiert bedeutet. - -Deshalb prüft diese Prüfung standardmäßig, ohne das eine Option angegeben wurde, nur ob die Eingabe ein String -ist. - -.. _zend.validator.set.stringlength.maximum: - -Die maximal erlaubte Länge eines String begrenzen -------------------------------------------------- - -Um die maximal erlaubte Länge eines Strings zu begrenzen muss man die Eigenschaft ``max`` setzen. Sie akzeptiert -einen Integerwert als Eingabe. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('max' => 6)); - - $validator->isValid("Test"); // Gibt true zurück - $validator->isValid("Testing"); // Gibt false zurück - -Man kann die maximal erlaubte Länge auch im Nachhinein setzen indem die ``setMax()`` Methode verwendet wird. Und -``getMax()`` um die aktuelle maximale Grenze zu erhalten. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(); - $validator->setMax(6); - - $validator->isValid("Test"); // Gibt true zurück - $validator->isValid("Testing"); // Gibt false zurück - -.. _zend.validator.set.stringlength.minimum: - -Die mindestens benötigte Länge eines Strings begrenzen ------------------------------------------------------- - -Um die mindestens benötigte Länge eines Strings zu begrenzen muss man die Eigenschaft ``min`` setzen. Sie -akzeptiert einen Integerwert als Eingabe. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 5)); - - $validator->isValid("Test"); // Gibt false zurück - $validator->isValid("Testing"); // Gibt true zurück - -Man kann die mindestens benötigte Länge auch im Nachhinein setzen indem die ``setMin()`` Methode verwendet wird. -Und ``getMin()`` um die aktuelle Mindestgrenze zu erhalten. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(); - $validator->setMin(5); - - $validator->isValid("Test"); // Gibt false zurück - $validator->isValid("Testing"); // Gibt true zurück - -.. _zend.validator.set.stringlength.both: - -Einen String auf beiden Seiten begrenzen ----------------------------------------- - -Manchmal ist es notwendig einen String zu erhalten der eine maximal definierte Länge, aber auch eine Mindestlänge -hat. Wenn man, zum Beispiel, eine Textbox hat in welcher der Benutzer seinen Namen angeben kann, könnte man den -Namen auf maximal 30 Zeichen begrenzen. Aber man will auch sicher gehen das er seinen Namen angegeben hat. Deshalb -setzt man die zumindest benötigte Länge auf 3 Zeichen. Siehe das folgende Beispiel: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 3, 'max' => 30)); - - $validator->isValid("."); // Gibt false zurück - $validator->isValid("Test"); // Gibt true zurück - $validator->isValid("Testing"); // Gibt true zurück - -.. note:: - - **Eine kleinere Maximalgrenze als die Mindestgrenze setzen** - - Wenn man versucht eine kleinere Maximalgrenze zu setzen als der aktuelle Mindestwert, oder eine größere - Mindestgrenze als den aktuellen Maximalwert, dann wird eine Exception geworfen. - -.. _zend.validator.set.stringlength.encoding: - -Kodierung von Werten --------------------- - -Strings verwenden immer eine Kodierung. Selbst wenn man keine explizite Kodierung verwendet, dann verwendet *PHP* -eine. Wenn die eigene Anwendung eine andere Kodierung verwendet als *PHP* selbst, dann sollte man eine Kodierung -setzen. - -Man kann eine eigene Kodierung bei der Instanzierung mit der ``encoding`` Option setzen, oder indem die -``setEncoding()`` Methode verwendet wird. Wir nehmen an das die eigene Installation *ISO* verwendet und die -Anwendung auf *ISO* gesetzt ist. In diesem Fall sieht man das folgende Verhalten. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength( - array('min' => 6) - ); - $validator->isValid("Ärger"); // Gibt false zurück - - $validator->setEncoding("UTF-8"); - $validator->isValid("Ärger"); // Gibt true zurück - - $validator2 = new Zend\Validate\StringLength( - array('min' => 6, 'encoding' => 'UTF-8') - ); - $validator2->isValid("Ärger"); // Gibt true zurück - -Wenn die eigene Installation und die Anwendung also unterschiedliche Kodierungen verwenden, dann sollte man immer -selbst eine Kodierung setzen. - - diff --git a/docs/languages/de/modules/zend.validator.validator-chains.rst b/docs/languages/de/modules/zend.validator.validator-chains.rst deleted file mode 100644 index f4f37e6ff..000000000 --- a/docs/languages/de/modules/zend.validator.validator-chains.rst +++ /dev/null @@ -1,56 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.validator_chains: - -Kettenprüfungen -=============== - -Oft sollen mehrere Prüfungen an dem selben Wert in einer bestimmten Reihenfolge durchgeführt werden. Der folgende -Code demonstriert einen Weg um das Beispiel der :ref:`Einführung ` zu Lösen, wo ein -Benutzername zwischen 6 und 12 Alphanumerischen Zeichen lang sein muss: - -.. code-block:: php - :linenos: - - // Eine Prüfkette erstellen und die Prüfungen hinzufügen - $validatorChain = new Zend\Validate\Validate(); - $validatorChain->addValidator( - new Zend\Validate\StringLength(array('min' => 6, - 'max' => 12))) - ->addValidator(new Zend\Validate\Alnum()); - - // Den Benutzernamen prüfen - if ($validatorChain->isValid($username)) { - // Benutzername das die Prüfung bestanden - } else { - // Der Benutzername hat die Prüfung nicht bestanden; Gründe ausdrucken - foreach ($validatorChain->getMessages() as $message) { - echo "$message\n"; - } - } - -Prüfungen werden in der Reihenfolge durchgeführt in der Sie ``Zend_Validate`` hinzugefügt wurden. Im obigen -Beispiel wird der Benutzername zuerst geprüft um sicherzustellen das die Länge zwischen 6 und 12 Zeichen -beträgt, und anschließend wird geprüft um sicherzustellen das er nur alphanumerische Zeichen enthält. Die -zweite Prüfung, für alphanumerische Zeichen, wird durchgeführt egal ob die Prüfung der Länge zwischen 6 und 12 -Zeichen erfolgreich war oder nicht. Das bedeutet, dass wenn beide Prüfungen fehlschlagen, ``getMessages()`` die -Fehlermeldungen von beiden Prüfungen zurück gibt. - -In einigen Fällen macht es Sinn eine Prüfung die Kette abbrechen zu lassen wenn der Prüfprozess fehlschlägt. -``Zend_Validate`` unterstützt solche Fälle mit dem zweiten Parameter der ``addValidator()`` Methode. Durch Setzen -von ``$breakChainOnFailure`` zu ``TRUE`` bricht die hinzugefügte Prüfung die Ausführung der Kette bei einem -Fehler ab und verhindert damit die Ausführung von jeglichen anderen Prüfungen welche für diese Situation als -unnötig oder nicht richtig erkannt werden. Wenn das obige Beispiel wie folgt geschrieben wird, wird die -alphanumerische Prüfung nicht stattfinden wenn die Prüfung der Stringlänge fehlschlägt: - -.. code-block:: php - :linenos: - - $validatorChain->addValidator( - new Zend\Validate\StringLength(array('min' => 6, - 'max' => 12)), - true) - ->addValidator(new Zend\Validate\Alnum()); - -Jegliches Objekt welches das ``Zend\Validate\Interface`` enthält kann in einer Prüfkette verwendet werden. - - diff --git a/docs/languages/de/modules/zend.validator.writing-validators.rst b/docs/languages/de/modules/zend.validator.writing-validators.rst deleted file mode 100644 index 41c38dcde..000000000 --- a/docs/languages/de/modules/zend.validator.writing-validators.rst +++ /dev/null @@ -1,218 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.writing_validators: - -Schreiben von Prüfern -===================== - -``Zend_Validate`` bietet ein Set von standardmäßig benötigten Prüfern, aber zwangsläufig, werden Entwickler -wünschen, eigene Prüfer für die eigenen Bedürfnisse zu schreiben. Die Aufgabe des Schreibens eigener Prüfer -wird in diesem Kapitel beschrieben. - -``Zend\Validate\Interface`` definiert zwei Methoden, ``isValid()`` und ``getMessages()``, welche von -Benutzerklassen implementiert werden können um eigene Prüfobjekte zu erstellen. Ein Objekt welches das -``Zend\Validate\Interface`` Interface implementiert kann einer Prüfkette mit ``Zend\Validate\Validate::addValidator()`` -hinzugefügt werden. Solche Objekte können auch mit :ref:`Zend\Filter\Input ` verwendet werden. - -Wie man bereits aus der obigen Beschreibung von ``Zend\Validate\Interface`` folgern kann, geben die vom Zend -Framework bereitgestellten Prüfklassen einen boolschen Wert zurück, ob die Prüfung des Wertes erfolgreich war -oder nicht. Sie geben auch darüber Informationen **warum** ein Wert die Prüfung nicht bestanden hat. Die -Verfügbarkeit der Gründe für fehlgeschlagene Prüfungen kann für eine Anwendung aus vielen Gründen nützlich -sein, wie zum Beispiel das zur Verfügung stellen von Statistiken für Useability Analysen. - -Grundlegende Funktionalitäten für fehlgeschlagene Prüfmeldungen ist in ``Zend\Validate\Abstract`` implementiert. -Um diese Funktionalität einzubinden wenn eine Prüfklasse erstellt wird, muß einfach ``Zend\Validate\Abstract`` -erweitert werden. In der existierenden Klasse wird die Logik der ``isValid()`` Methode implementiert und die -Variablen für die Nachrichten und Nachrichten-Templates definiert werden die zu den Typen von Prüffehlern passen -die auftreten können. Wenn ein Wert die Prüfung nicht besteht, sollte ``isValid()`` ``FALSE`` zurückgeben. Wenn -der Wert die Prüfung besteht, sollte ``isValid()`` ``TRUE`` zurückgeben. - -Normalerweise sollte die ``isValid()`` Methode keine Ausnahmen werfen, ausser wenn es unmöglich ist festzustellen -ob ein Eingabewert gültig ist oder nicht. Einige Beispiele für gute Fälle in denen keine Ausnahme geworfen -werden sollte sind, wenn eine Datei nicht geöffnet werden konnte, ein *LDAP* Server nicht erreicht wurde, oder -eine Datenbank Verbindung unerreichbar ist, und wo solche Dinge für Prüfprozesse benötigt werden um zu erkennen -ob die Prüfung gültig oder ungültig ist. - -.. _zend.validator.writing_validators.example.simple: - -.. rubric:: Erstellen einer einfachen Prüfklasse - -Das folgende Beispiel demonstriert wie ein sehr einfacher eigener Prüfer geschrieben werden könnte. In diesem -Fall sind die Prüfregeln sehr einfach und der Eingabewert muß ein Gleitkommawert sein. - -.. code-block:: php - :linenos: - - class MyValid_Float extends Zend\Validate\Abstract - { - const FLOAT = 'float'; - - protected $_messageTemplates = array( - self::FLOAT => "'%value%' ist kein Gleitkommawert" - ); - - public function isValid($value) - { - $this->_setValue($value); - - if (!is_float($value)) { - $this->_error(self::FLOAT); - return false; - } - - return true; - } - } - -Die Klasse definiert ein Template für Ihre einzige Nachricht bei Prüfungsfehlern, welche den eingebauten -magischen Parameter **%value%** inkludiert. Der Aufruf von ``_setValue()`` präpariert das Objekt den getesteten -Wert automatisch in die Fehlernachricht einzufügen, wenn die Prüfung des Wertes fehlschlägt. Der Aufruf von -``_error()`` spürt den Grund für die fehlgeschlagene Prüfung auf. Da diese Klasse nur eine Fehlernachricht -definiert, ist es nicht notwendig ``_error()`` den Namen des Templates der Fehlernachricht zu geben. - -.. _zend.validator.writing_validators.example.conditions.dependent: - -.. rubric:: Schreiben einer Prüfklasse die abhängige Konditionen besitzt - -Das folgende Beispiel demonstriert ein komplexeres Set von Prüfregeln, wobei es notwendig ist das der Eingabewert -nummerisch und innerhalb eines Bereiches von Mindest- und Maximalgrenzwerten ist. Bei einem Eingabewert würde die -Prüfung wegen exakt einer der folgenden Gründe fehlschlagen: - -- Der Eingabewert ist nicht nummerisch. - -- Der Eingabewert ist kleiner als der minimal erlaubte Wert. - -- Der Eingabewert ist größer als der maximal erlaubte Wert. - -Diese Gründe für fehlgeschlagene Prüfungen werden in Definitionen der Klasse übersetzt: - -.. code-block:: php - :linenos: - - class MyValid_NumericBetween extends Zend\Validate\Abstract - { - const MSG_NUMERIC = 'msgNumeric'; - const MSG_MINIMUM = 'msgMinimum'; - const MSG_MAXIMUM = 'msgMaximum'; - - public $minimum = 0; - public $maximum = 100; - - protected $_messageVariables = array( - 'min' => 'minimum', - 'max' => 'maximum' - ); - - protected $_messageTemplates = array( - self::MSG_NUMERIC => "'%value%' ist nicht nummerisch", - self::MSG_MINIMUM => "'%value%' muß mindestens '%min%' sein", - self::MSG_MAXIMUM => "'%value%' darf nicht mehr als '%max%' sein" - ); - - public function isValid($value) - { - $this->_setValue($value); - - if (!is_numeric($value)) { - $this->_error(self::MSG_NUMERIC); - return false; - } - - if ($value < $this->minimum) { - $this->_error(self::MSG_MINIMUM); - return false; - } - - if ($value > $this->maximum) { - $this->_error(self::MSG_MAXIMUM); - return false; - } - - return true; - } - } - -Die öffentlichen Eigenschaften ``$minimum`` und ``$maximum`` wurden eingeführt um die Mindest- und Maximalgrenzen -anzubieten, beziehungsweise, für einen Wert um die Prüfung erfolgreich zu bestehen. Die Klasse definiert auch -zwei Nachrichtenvariablen die zu den öffentlichen Eigenschaften korrespondieren und es erlauben ``min`` und -``max`` in den Nachrichten Templates als magische Parameter zu verwenden, genauso wie ``value``. - -Zu beachten ist, das wenn eine der Prüfungen in ``isValid()`` fehlschlägt, eine entsprechende Fehlernachricht -vorbereitet wird, und die Methode sofort ``FALSE`` zurückgibt. Diese Prüfregeln sind deswegen sequentiell -abhängig. Das bedeuted, wenn einer der Tests fehlschlägt, gibt es keinen Grund eine weitere nachfolgende -Prüfregel zu testen. Das muß aber trotzdem nicht der Fall sein. Das folgende Beispiel zeigt wie man eine Klasse -schreiben kann die unabhängige Prüfregeln besitzt, wo die Prüfobjekte mehrfache Gründe zurückgeben könnten, -warum ein spezieller Prüfversuch fehlgeschlagen ist. - -.. _zend.validator.writing_validators.example.conditions.independent: - -.. rubric:: Prüfen mit unabhängigen Konditionen, mehrfache Gründe für Fehler - -Angenommen es wird eine Prüfklasse geschrieben für das Erzwingen von Passwortstärke - wenn ein Benutzer ein -Passwort auswählen muß das diversen Kriterien entspricht um zu Helfen das die Benutzerzugänge sicher sind. -Angenommen die Passwort Sicherheitskriterien erzwingen das folgende Passwort: - -- mindestens 8 Zeichen Länge, - -- enthält mindestens ein großgeschriebenes Zeichen, - -- enthält mindestens ein kleingeschriebenes Zeichen, - -- und enthält mindestens eine Ziffer. - -Die folgende Klasse impementiert diese Prüfkriterien: - -.. code-block:: php - :linenos: - - class MyValid_PasswordStrength extends Zend\Validate\Abstract - { - const LENGTH = 'length'; - const UPPER = 'upper'; - const LOWER = 'lower'; - const DIGIT = 'digit'; - - protected $_messageTemplates = array( - self::LENGTH => "'%value%' muß mindestens 8 Zeichen lang sein", - self::UPPER => "'%value%' muß mindestens ein großgeschriebenes " - . "Zeichen enthalten", - self::LOWER => "'%value%' muß mindestens ein kleingeschriebenes " - . "Zeichen enthalten", - self::DIGIT => "'%value%' muß mindestens eine Ziffer enthalten" - ); - - public function isValid($value) - { - $this->_setValue($value); - - $isValid = true; - - if (strlen($value) < 8) { - $this->_error(self::LENGTH); - $isValid = false; - } - - if (!preg_match('/[A-Z]/', $value)) { - $this->_error(self::UPPER); - $isValid = false; - } - - if (!preg_match('/[a-z]/', $value)) { - $this->_error(self::LOWER); - $isValid = false; - } - - if (!preg_match('/\d/', $value)) { - $this->_error(self::DIGIT); - $isValid = false; - } - - return $isValid; - } - } - -Zu beachten ist das diese vier Testkriterien in ``isValid()`` nicht sofort ``FALSE`` zurückgeben. Das erlaubt der -Prüfklasse **alle** Gründe anzubieten bei denen das Eingabepasswort den Prüfvoraussetzungen nicht entsprochen -hat. Wenn, zum Beispiel, ein Benutzer den String "#$%" als Passwort angegeben hat, würde ``isValid()`` alle vier -Prüfungfehlermeldungen zurückgeben bei einen nachfolgenden Aufruf von ``getMessages()``. - - diff --git a/docs/languages/de/modules/zend.version.rst b/docs/languages/de/modules/zend.version.rst deleted file mode 100644 index 7ff1d2950..000000000 --- a/docs/languages/de/modules/zend.version.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. EN-Revision: none -.. _zend.version.reading: - -Die Version des Zend Frameworks erhalten -======================================== - -``Zend_Version`` bietet eine Klassenkonstante ``Zend\Version\Version::VERSION`` die einen String enthält, welcher die -Versionsnummer der eigenen Installation des Zend Frameworks enthält. ``Zend\Version\Version::VERSION`` kann zum Beispiel -"1.7.4" enthalten. - -Die statische Methode ``Zend\Version\Version::compareVersion($version)`` basiert auf der *PHP* Funktion -`version_compare()`_. Die Methode gibt -1 zurück wenn die angegebene Version älter als die installierte Version -des Zend Frameworks ist, 0 wenn Sie identisch sind und +1 wenn die angegebene Version neuer als die Version des -Zend Frameworks ist. - -.. _zend.version.reading.example: - -.. rubric:: Beispiel der compareVersion() Methode - -.. code-block:: php - :linenos: - - // gibt -1, 0 oder 1 zurück - $cmp = Zend\Version\Version::compareVersion('2.0.0'); - - - -.. _`version_compare()`: http://php.net/version_compare diff --git a/docs/languages/de/modules/zend.view.helpers.action.rst b/docs/languages/de/modules/zend.view.helpers.action.rst deleted file mode 100644 index 1dfdadc3d..000000000 --- a/docs/languages/de/modules/zend.view.helpers.action.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.action: - -Action View Helfer -================== - -Der ``Action`` View Helfer ermöglicht es View Skripten eine gegebene Controller Aktion auszuführen; das Ergebnis -des Antwortsobjektes das der Ausführung folgt wird dann zurückgegeben. Dieses kann verwendet werden wenn eine -bestimmte Aktion wiederverwendbare Inhalte oder "helfende" Inhalte erstellt. - -Aktionen die zu einem ``_forward()`` oder einer Umleitung führen werden als ungültig angenommen, und als leerer -String zurückgegeben. - -Die *API* für den ``Action`` View Helfer folgt dem der meisten *MVC* Komponenten die Controller Aktionen aufrufen: -``action($action, $controller, $module = null, array $params = array())``. ``$action`` und ``$controller`` werden -benötigt; wenn kein Modul angegeben wird, dann wird das Standardmodul angenommen. - -.. _zend.view.helpers.initial.action.usage: - -.. rubric:: Grundsätzliche Verwendung von Action View Helfern - -Als Beispiel, könnte man einen ``CommentController`` mit einer ``listAction()`` Methode haben die man in -Reihenfolge ausführen will, um eine Liste von Kommentaren für die aktuelle Anfrage herauszuholen: - -.. code-block:: php - :linenos: - - - - diff --git a/docs/languages/de/modules/zend.view.helpers.base-url.rst b/docs/languages/de/modules/zend.view.helpers.base-url.rst deleted file mode 100644 index 6c47fefee..000000000 --- a/docs/languages/de/modules/zend.view.helpers.base-url.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.baseurl: - -BaseUrl Helper -============== - -Wärend die meisten *URL*\ s die vom Framework erstellt werden automatisch die Basis *URL* vorangestellt haben, -müssen Entwickler die Basis *URL* Ihren eigenen *URL*\ s voranstellen damit die Pfade zu den Ressourcen korrekt -sind. - -Die Verwendung des BasisUrl Helfers ist sehr geradlinig: - -.. code-block:: php - :linenos: - - /* - * Das folgende nimmt an das die Basis URL der Seite/Anwendung "/mypage" ist. - */ - - /* - * Ausdruck: - * - */ - - - /* - * Ausdruck: - * - */ - - -.. note:: - - Der Einfachheit halber entfernen wir die Eingangs-*PHP* Datei (z.B. "``index.php``") von der Basis *URL* die in - ``Zend_Controller`` enthalten war. Trotzdem kann das in einigen Situationen Probleme verursachen. Wenn eines - Eintritt kann man ``$this->getHelper('BaseUrl')->setBaseUrl()`` verwenden um seine eigene BasisUrl zu setzen. - - diff --git a/docs/languages/de/modules/zend.view.helpers.cycle.rst b/docs/languages/de/modules/zend.view.helpers.cycle.rst deleted file mode 100644 index a0587c4b8..000000000 --- a/docs/languages/de/modules/zend.view.helpers.cycle.rst +++ /dev/null @@ -1,63 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.cycle: - -Cycle Helfer -============ - -Der ``Cycle`` Helfer wird verwendet um ein Set von Werte zu ändern. - -.. _zend.view.helpers.initial.cycle.basicusage: - -.. rubric:: Grundsätzliche Verwendung des Cycle Helfers - -Um Elemente hinzuzufügen die man durchlaufen will müssen diese im Constructor spezifiziert oder die -``assign(array $data)`` Funktion verwendet werden. - -.. code-block:: php - :linenos: - - books as $book):?> - next()?>"> - escape($book['author']) ?> - - - - // Rückwärts bewegen und die assign Funktion verwenden - $this->cycle()->assign(array("#F0F0F0","#FFFFFF")); - $this->cycle()->prev(); - ?> - -Die Ausgabe - -.. code-block:: php - :linenos: - - - Erstes - - - Zweites - - -.. _zend.view.helpers.initial.cycle.advanceusage: - -.. rubric:: Mit einem oder mehreren Zyklen arbeiten - -Um zwei Zyklen zu verwenden muß man den Namen des Zyklus verwenden. Einfach zwei Parameter in der cycle Methode -setzen. ``$this->cycle(array("#F0F0F0","#FFFFFF"),'cycle2')``. Man kann auch die setName($name) Funktion verwenden. - -.. code-block:: php - :linenos: - - books as $book):?> - next()?>"> - cycle(array(1,2,3),'number')->next()?> - escape($book['author'])?> - - - - diff --git a/docs/languages/de/modules/zend.view.helpers.doctype.rst b/docs/languages/de/modules/zend.view.helpers.doctype.rst deleted file mode 100644 index 143f0230f..000000000 --- a/docs/languages/de/modules/zend.view.helpers.doctype.rst +++ /dev/null @@ -1,87 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.doctype: - -Doctype Helfer -============== - -Gültige *HTML* und *XHTML* Dokumente sollten eine ``DOCTYPE`` Deklaration enthalten. Neben der Schwierigkeit sich -diese zu merken, können Sie auch beeinflussen wie bestimmte Elemente im Dokument dargestellt werden sollen (zum -Beispiel, CDATA Kommentierung in ** - - - -.. note:: - - **InlineScript Variante** - - Viele Browser blockieren oft die Anzeige von Seiten bis alle Skripte und Stylesheets geladen wurden auf die in - der **** Sektion referenziert wird. Wenn man eine Anzahl solcher Direktiven hat, kann das Einfluß darauf - haben wie bald jemand damit beginnen kann sich die Seite anzuschauen: - - Ein Weg darum zu kommen besteht darin die ** - - - - -.. _zend.paginator.usage.rendering.properties: - -Liste des propriétés -^^^^^^^^^^^^^^^^^^^^ - -Les options suivantes sont disponibles pour contrôler la pagination dans les partials de vue : - -.. _zend.paginator.usage.rendering.properties.table: - -.. table:: Propriétés disponibles aux partials de vue - - +----------------+---------------+----------------------------------------------------------------+ - |Propriété |Type |Description | - +================+===============+================================================================+ - |first |entier |Numéro de la première page | - +----------------+---------------+----------------------------------------------------------------+ - |firstItemNumber |entier |Numéro absolu du premier objet(item) dans cette page | - +----------------+---------------+----------------------------------------------------------------+ - |firstPageInRange|entier |Première page dans l'échelle retournée par le type de défilement| - +----------------+---------------+----------------------------------------------------------------+ - |current |entier |Numéro de la page en cours | - +----------------+---------------+----------------------------------------------------------------+ - |currentItemCount|entier |Nombre d'objets sur cette page | - +----------------+---------------+----------------------------------------------------------------+ - |itemCountPerPage|integer |Nombre d'objets maximum à afficher par page | - +----------------+---------------+----------------------------------------------------------------+ - |last |entier |Numéro de la dernière page | - +----------------+---------------+----------------------------------------------------------------+ - |lastItemNumber |entier |Numéro absolu du dernier objet sur cette page | - +----------------+---------------+----------------------------------------------------------------+ - |lastPageInRange |entier |Dernière page dans l'échelle retournée par le type de défilement| - +----------------+---------------+----------------------------------------------------------------+ - |next |entier |Numéro de la page suivante | - +----------------+---------------+----------------------------------------------------------------+ - |pageCount |entier |Nombre de pages | - +----------------+---------------+----------------------------------------------------------------+ - |pagesInRange |tableau (array)|Tableau des pages retournées par le type de défilement | - +----------------+---------------+----------------------------------------------------------------+ - |previous |entier |Numéro de la page précédente | - +----------------+---------------+----------------------------------------------------------------+ - |totalItemCount |entier |Nombre total d'objets | - +----------------+---------------+----------------------------------------------------------------+ - - - -.. _`IteratorAggregate`: http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html diff --git a/docs/languages/fr/modules/zend.permissions.acl.advanced.rst b/docs/languages/fr/modules/zend.permissions.acl.advanced.rst deleted file mode 100644 index 3c565c991..000000000 --- a/docs/languages/fr/modules/zend.permissions.acl.advanced.rst +++ /dev/null @@ -1,81 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.advanced: - -Utilisation avancée -=================== - -.. _zend.permissions.acl.advanced.storing: - -Rendre les données ACL persistantes ------------------------------------ - -``Zend\Permissions\Acl`` a été conçu pour ne pas nécessiter de technologie spécifique comme une base de données ou un -serveur de cache pour conserver les données *ACL*. Son implémentation *PHP* permet de créer des outils -d'administration basés sur ``Zend\Permissions\Acl`` assez facilement. De nombreuses situations nécessitent une certaine forme -de maintenance ou de gestion des *ACL*, et ``Zend\Permissions\Acl`` fournit les méthodes pour définir et interroger les -règles d'accès d'une application. - -Le stockage des données *ACL* est dès lors laissé aux bons soins du développeur, dans la mesure où les cas -d'utilisation peuvent grandement varier d'un cas à l'autre. Puisque ``Zend\Permissions\Acl`` est sérialisable, les objets -*ACL* peuvent être sérialisés avec la fonction `serialize()`_ de *PHP*, et le résultat peut être stocké -n'importe où le développeur le désire : fichier, base de donnée, cache. - -.. _zend.permissions.acl.advanced.assertions: - -Écrire des règles ACL conditionnelles avec des assertions ---------------------------------------------------------- - -Parfois, une règle pour autoriser ou interdire l'accès d'un rôle à une ressource n'est pas absolu, mais dépend -de plusieurs critères. Par exemple, supposons qu'un certain accès peut être autorisé, mais uniquement entre 8h -du matin et 5h du soir. Un autre exemple consisterait à interdire l'accès parce que la requête provient d'une -adresse IP qui est notée comme source d'abus. ``Zend\Permissions\Acl`` dispose d'un support intégré pour implémenter des -règles sur quoique ce soit dont le développeur ait besoin. - -``Zend\Permissions\Acl`` fourni le support pour les règles conditionnelles via ``Zend\Permissions\Acl\Assert\AssertInterface``. Pour mettre en -oeuvre cette interface, il suffit d'implémenter la méthode ``assert()``\  : - -.. code-block:: php - :linenos: - - class CleanIPAssertion implements Zend\Permissions\Acl\Assert\AssertInterface - { - public function assert(Zend\Permissions\Acl $acl, - Zend\Permissions\Acl\Role\RoleInterface $role = null, - Zend\Permissions\Acl\Resource\ResourceInterface $resource = null, - $privilege = null) - { - return $this->_isCleanIP($_SERVER['REMOTE_ADDR']); - } - - protected function _isCleanIP($ip) - { - //... - } - } - -Lorsqu'une classe d'assertion est disponible, le développeur doit fournir une instance de cette classe lorsqu'il -assigne une règle conditionnelle. Une règle qui est créée avec une assertion s'applique uniquement dans les cas -où l'assertion retourne une valeur ``TRUE``. - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - $acl->allow(null, null, null, new CleanIPAssertion()); - -Le code ci-dessus crée une règle conditionnelle qui autorise l'accès à tous les privilèges, sur tout et pour -tout le monde, sauf lorsque l'adresse IP de la requête fait partie de la liste noire. Si une requête provient -d'une adresse IP qui n'est pas considérée comme "propre", alors la règle d'autorisation ne s'applique pas. -Puisque la règle s'applique à tous les rôles, toutes les Ressources, et tous les privilèges, une IP "sale" -aboutira à un refus d'accès. Ceci constitue un cas spécial, et il faut bien noter que tous les autres cas (donc, -si un rôle, une ressource ou un privilège est défini pour la règle), une assertion qui échoue aboutit à une -règle qui ne s'applique pas et ce sont alors les autres règles qui servent à déterminer si l'accès est -autorisé ou non. - -La méthode ``assert()`` d'un objet d'assertion reçoit l'*ACL*, le rôle, la ressource et le privilège auquel une -requête d'autorisation (c.-à-d., ``isAllowed()``) s'applique, afin de fournir un contexte à la classe -d'assertion pour déterminer ses conditions lorsque cela est nécessaire. - - - -.. _`serialize()`: http://fr.php.net/serialize diff --git a/docs/languages/fr/modules/zend.permissions.acl.intro.rst b/docs/languages/fr/modules/zend.permissions.acl.intro.rst deleted file mode 100644 index 87ecb13a7..000000000 --- a/docs/languages/fr/modules/zend.permissions.acl.intro.rst +++ /dev/null @@ -1,292 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.introduction: - -Introduction -============ - -``Zend\Permissions\Acl`` fournit une implémentation légère et flexible de listes de contrôle d'accès (*ACL*) pour la -gestion de privilèges. En général, une application peut utiliser ces *ACL* pour contrôler l'accès à certains -objets par d'autres objets demandeurs. - -Dans le cadre de cette documentation : - -- une **ressource** est un objet dont l'accès est contrôlé, - -- un **rôle** est un objet qui peut demander l'accès à une ressource. - -Dit simplement, **les rôles demandent l'accès à des ressources**. Par exemple, si une personne demande l'accès -à une voiture, alors la personne est le rôle demandeur et la voiture est la ressource, puisque l'accès à la -voiture est soumis à un contrôle. - -Grâce à la définition et à la mise en oeuvre d'une *ACL*, une application peut contrôler comment les objets -demandeurs (rôles) reçoivent l'accès (ou non) à des objets protégés (ressources). - -.. _zend.permissions.acl.introduction.resources: - -A propos des ressources ------------------------ - -Avec ``Zend\Permissions\Acl``, créer une ressource est très simple. ``Zend\Permissions\Acl`` fournit ``Zend\Permissions\Acl\Resource\ResourceInterface`` pour -faciliter la tâche aux développeurs. Une classe a simplement besoin d'implémenter cette interface, qui consiste -en une seule méthode, ``getResourceId()``, pour que ``Zend\Permissions\Acl`` reconnaît l'objet comme étant une ressource. -Par ailleurs, ``Zend\Permissions\Acl\Resource`` est fourni par ``Zend\Permissions\Acl`` comme une implémentation basique de ressource que -les développeurs peuvent étendre si besoin. - -``Zend\Permissions\Acl`` fournit une structure en arbre à laquelle plusieurs ressources (ou "zone sous contrôle d'accès") -peuvent être ajoutées. Puisque les ressources sont sauvées dans cet arbre, elles peuvent être organisées du -général (via la racine de l'arbre) jusqu'au particulier (via les feuilles de l'arbre). Les requêtes envers une -ressource spécifique vont automatiquement entraîner la recherche de règles sur ses parents au sein de la -structure hiérarchique des ressources, ce qui permet un héritage simple des règles. Par exemple, si une règle -par défaut doit être appliquée à tous les bâtiments d'une ville, on pourra simplement assigner la règle à la -ville elle-même, au lieu de la répéter à tous les bâtiments. Mais certains bâtiments peuvent nécessiter des -règles spécifiques, et ceci peut se faire aisément avec ``Zend\Permissions\Acl`` en assignant les règles nécessaires à -chaque bâtiment de la ville qui nécessite une exception. Une ressource peut hériter d'un seul parent ressource, -qui hérite lui même de son propre parent, et ainsi de suite. - -``Zend\Permissions\Acl`` supporte aussi des privilèges pour chaque ressource (par exemple : "créer", "lire", "modifier", -"supprimer"), et le développeur peut assigner des règles qui affectent tous les privilèges ou seuls certains -privilèges d'une ressource. - -.. _zend.permissions.acl.introduction.roles: - -A propos des rôles ------------------- - -Comme pour les ressources, créer un rôle est très simple. Tout rôle doit implémenter -``Zend\Permissions\Acl\Role\RoleInterface`` qui consiste en une seule méthode ``getRoleId()``. De plus, ``Zend\Permissions\Acl\GenericRole`` est -inclus dans ``Zend\Permissions\Acl`` comme une implémentation basique de rôle que les développeurs peuvent étendre si -besoin. - -Dans ``Zend\Permissions\Acl``, un rôle peut hériter de un ou plusieurs rôles. Ceci permet de supporter l'héritage de -règles à travers plusieurs rôles. Par exemple, un rôle utilisateur, comme "Éric", peut appartenir à un ou -plusieurs rôles d'action, tels que "éditeur" ou "administrateur". Le développeur peut créer des règles pour -"éditeur" et "administrateur" séparément, et "Éric" va hériter des règles des deux sans avoir à définir des -règles directement pour "Éric". - -Bien que la possibilité d'hériter de plusieurs rôles soit très utile, l'héritage multiple introduit aussi un -certain degré de complexité. L'exemple ci-dessous illustre l'ambiguïté et la manière dont ``Zend\Permissions\Acl`` la -résout. - -.. _zend.permissions.acl.introduction.roles.example.multiple_inheritance: - -.. rubric:: Héritages multiples entre rôles - -Le code ci-dessous définit trois rôles de base - "guest", "member", et "admin" - desquels d'autres rôles peuvent -hériter. Ensuite, un rôle identifié par "someUser" est créé et hérite des trois autres rôles. L'ordre selon -lequel ces rôles apparaissent dans le tableau ``$parents`` est important. Lorsque cela est nécessaire -``Zend\Permissions\Acl`` recherche les règles d'accès définies non seulement pour le rôle demandé (ici "someUser"), mais -aussi pour les autres rôles desquels le rôle recherché hérite (ici "guest", "member", et "admin") : - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('guest')) - ->addRole(new Zend\Permissions\Acl\Role\GenericRole('member')) - ->addRole(new Zend\Permissions\Acl\Role\GenericRole('admin')); - - $parents = array('guest', 'member', 'admin'); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('someUser'), $parents); - - $acl->add(new Zend\Permissions\Acl\Resource\GenericResource('someResource')); - - $acl->deny('invite', 'someResource'); - $acl->allow('membre', 'someResource'); - - echo $acl->isAllowed('someUser', 'someResource') ? 'autorisé' : 'refusé'; - -Puisqu'il n'y a pas de règle spécifiquement définie pour le rôle "someUser" et "someResource", ``Zend\Permissions\Acl`` -doit rechercher des règles qui pourraient être définies pour des rôles dont "someUser" hérite. Premièrement, -le rôle "admin" est contrôlé, et il n'y a pas de règle d'accès définie pour lui. Ensuite, le rôle "member" -est visité, et ``Zend\Permissions\Acl`` trouve qu'il y a une règle qui spécifie que "member" a un accès autorisé à -"someResource". - -Si ``Zend\Permissions\Acl`` continuait à examiner toutes les règles de tous les rôles parents, il trouverait que -"someResource" est interdit d'accès à "someResource". Ceci introduit une ambiguïté puisque maintenant -"someUser" est à la fois autorisé et interdit d'accès à "someResource", puisqu'il hérite de règles opposées -de ses différents parents. - -``Zend\Permissions\Acl`` résout cette ambiguïté en arrêtant la recherche de règles d'accès dès qu'une première règle -est découverte. Dans notre exemple, puisque le rôle "member" est examiné avant le rôle "guest", le résultat -devrait afficher "autorisé". - -.. note:: - - Lorsque vous spécifiez plusieurs parents pour un rôle, conservez à l'esprit que le dernier parent listé est - le premier dans lequel une règle utilisable sera recherchée. - -.. _zend.permissions.acl.introduction.creating: - -Créer la Liste de Contrôle d'Accès ----------------------------------- - -Une *ACL* peut représenter n'importe quel ensemble d'objets physiques ou virtuels que vous souhaitez. Pour les -besoins de la démonstration, nous allons créer un système basique d'*ACL* pour une Gestion de Contenus (*CMS*) -qui comporte plusieurs niveaux de groupes au sein d'une grande variété de zones. Pour créer un nouvel objet -*ACL*, nous créons une nouvelle instance d'*ACL* sans paramètres : - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - -.. note:: - - Jusqu'à ce que le développeur spécifie une règle "allow", ``Zend\Permissions\Acl`` refuse l'accès pour tous les - privilèges sur chaque ressource pour chaque rôle. - -.. _zend.permissions.acl.introduction.role_registry: - -Registre des rôles ------------------- - -Les systèmes de gestion de contenu (ou *CMS*) vont pratiquement toujours nécessiter une hiérarchie de -permissions afin de déterminer les droits de rédaction de ses utilisateurs. Il pourrait y avoir un groupe -"Invités" qui donne accès aux démonstrations, un groupe "Staff" pour la majorité des utilisateurs du *CMS* qui -réalisent la plupart du travail quotidien, un groupe "Éditeur" pour ceux qui sont responsables de la publication, -l'archivage, la relecture et la suppression, et enfin un groupe "Administrateur" dont les tâches incluent toutes -les tâches des autres groupes plus des tâches de maintenance, de gestion des utilisateurs, configuration et -backup ou export. Cet ensemble de permissions peut être représenté dans un registre de rôles, permettant à -chaque groupe d'hériter des privilèges des groupes "parents". Les permissions peuvent être rendues de la -manière suivante : - -.. _zend.permissions.acl.introduction.role_registry.table.example_cms_access_controls: - -.. table:: Contrôles d'Accès pour un exemple de CMS - - +--------------+----------------------------+-----------------------+ - |Nom |Permissions |Permissions héritées de| - +==============+============================+=======================+ - |Invité |Voir |N/A | - +--------------+----------------------------+-----------------------+ - |Staff |Modifier, Soumettre, Relire |Invité | - +--------------+----------------------------+-----------------------+ - |Éditeur |Publier, Archiver, Supprimer|Staff | - +--------------+----------------------------+-----------------------+ - |Administrateur|(Reçoit tous les accès) |N/A | - +--------------+----------------------------+-----------------------+ - -Pour cet exemple, ``Zend\Permissions\Acl\GenericRole`` est utilisé, mais n'importe quel objet qui implémente -``Zend\Permissions\Acl\Role\RoleInterface`` est acceptable. Ces groupes peuvent être ajoutés au registre des rôles comme suit : - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - - // Ajoute des groupes au registre des rôles en utilisant Zend\Permissions\Acl\Role - - // Invité n'hérite d'aucun accès - $roleinvite = new Zend\Permissions\Acl\Role\GenericRole('invite'); - $acl->addRole($roleinvite); - - // Staff hérite de Invité - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('staff'), $roleinvite); - - // Ce que précède pourrait aussi être écrit: - // $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('staff'), 'invite'); - - // Editeur hérite de staff - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('editeur'), 'staff'); - - // Administrateur n'hérite pas d'accès - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('administrateur')); - -.. _zend.permissions.acl.introduction.defining: - -Définir les Contrôles d'Accès ------------------------------ - -Maintenant que l'*ACL* contient les rôles nécessaires, on peut établir des règles qui définissent comment les -ressources accèdent aux rôles. Vous avez sans doute noté que nous n'avons défini aucune ressource particulière -pour cet exemple, ce qui est plus simple pour illustrer comment les règles s'appliquent à toutes les ressources. -``Zend\Permissions\Acl`` fournit une implémentation dans laquelle les règles doivent simplement être assignées du général -au particulier, ce qui réduit le nombre de règles spécifiques à ajouter. Ceci grâce à l'héritage. - -.. note:: - - Généralement ``Zend\Permissions\Acl`` se conforme à une règle donnée si et seulement si une règle plus spécifique ne - s'applique pas. - -En conséquence, on peut définir un nombre assez complexe de règles avec un nombre minimal de code. Pour définir -les permissions comme définies ci-dessus : - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - - $roleinvite = new Zend\Permissions\Acl\Role\GenericRole('invité'); - $acl->addRole($roleinvite); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('staff'), $roleinvite); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('editeur'), 'staff'); - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('administrateur')); - - // Invité peut uniquement voir le contenu - $acl->allow($roleinvite, null, 'voir'); - - /* - ce qui précède peut aussi être écrit : - $acl->allow('invité', null, 'voir'); - */ - - // Staff hérite des privilèges de Invité, mais a aussi ses propres - // privilèges - $acl->allow('staff', null, array('edit', 'submit', 'relire')); - - // Editeur hérite les privilèges voir, modifier, soumettre, - // et relire de Staff, mais a aussi besoin de certains privilèges - $acl->allow('editeur', null, array('publier', 'archiver', 'supprimer')); - - // Administrateur hérite de rien, mais reçoit tous les privilèges - $acl->allow('administrateur'); - -Les valeurs ``NULL`` dans les appels ``allow()`` ci-dessus sont utilisées pour indiquer que les règles -s'appliquent à toutes les ressources. - -.. _zend.permissions.acl.introduction.querying: - -Interroger les ACL ------------------- - -Nous avons maintenant une *ACL* flexible, qui peut être utilisée pour déterminer si l'objet appelant a les -permissions pour réaliser les fonctions au sein de l'application web. Interroger cette liste est assez simple en -utilisant la méthode ``isAllowed()``\  : - -.. code-block:: php - :linenos: - - echo $acl->isAllowed('invité', null, 'voir') ? - "autorisé" : "refusé"; - // autorisé - - echo $acl->isAllowed('staff', null, 'publier') ? - "autorisé" : "refusé"; - // refusé - - echo $acl->isAllowed('staff', null, 'relire') ? - "autorisé" : "refusé"; - // autorisé - - echo $acl->isAllowed('editeur', null, 'voir') ? - "autorisé" : "refusé"; - // autorisé parce que hérité de Invité - - echo $acl->isAllowed('editeur', null, 'modifier') ? - "autorisé" : "refusé"; - // refusé parce qu'il n'y a pas de règle pour 'modifier' - - echo $acl->isAllowed('administrateur', null, 'voir') ? - "autorisé" : "refusé"; - // autorisé car administrateur est autorisé pour tout - - echo $acl->isAllowed('administrateur') ? - "autorisé" : "refusé"; - // autorisé car administrateur est autorisé pour tout - - echo $acl->isAllowed('administrateur', null, 'modifier') ? - "autorisé" : "refusé"; - // autorisé car administrateur est autorisé pour tout - - diff --git a/docs/languages/fr/modules/zend.permissions.acl.refining.rst b/docs/languages/fr/modules/zend.permissions.acl.refining.rst deleted file mode 100644 index 9bb25d112..000000000 --- a/docs/languages/fr/modules/zend.permissions.acl.refining.rst +++ /dev/null @@ -1,154 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.refining: - -Affiner les Contrôles d'Accès -============================= - -.. _zend.permissions.acl.refining.precise: - -Mieux définir les Contrôles d'Accès ------------------------------------ - -L'*ACL* basique définie dans le :ref:`chapitre précédent `\ montre comment plusieurs -privilèges peuvent être alloués pour l'ensemble de l'*ACL* (toutes les ressources). En pratique, toutefois, les -contrôles d'accès ont souvent des exceptions et des degrés de complexité variables. ``Zend\Permissions\Acl`` permet -d'atteindre ce degré de finesse d'une manière directe et flexible. - -Pour l'exemple du *CMS*, nous avons déterminé que bien que le groupe "Staff" couvre les besoins de la plupart des -utilisateurs, un groupe "Marketing" est nécessaire. Ce groupe doit avoir accès à la newsletter et aux dernières -news dans le *CMS*. Le groupe va recevoir la possibilité de publier et d'archiver à la fois des newsletters et -des news. - -De plus, il a été demandé que le groupe "Staff" puisse voir les nouveaux textes, mais pas les nouvelles news. -Enfin, il devrait être impossible pour tout le monde (y compris les administrateurs) d'archiver un contenu qui -n'aurait une durée de vie que de 1 ou 2 jours. - -En premier lieu, nous modifions le registre des rôles pour refléter ces changements. Nous avons dit que le groupe -"Marketing" a les même permissions de base que "Staff". Donc nous créons "marketing" pour qu'il hérite des -permissions de "staff". - -.. code-block:: php - :linenos: - - // Le nouveau groupe Marketing hérite des permissions de Staff - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('marketing'), 'staff'); - -Ensuite, notez que les contrôles d'accès plus haut font référence à des ressources (ex. "newsletters", -"dernières news", "annonces"). Maintenant, nous ajoutons ces Ressources : - -.. code-block:: php - :linenos: - - // Créer les Ressources pour les règles - - // newsletter - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('newsletter')); - - // news - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('news')); - - // dernières news - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('latest'), 'news'); - - // annonces - $acl->addResource(new Zend\Permissions\Acl\Resource\GenericResource('announcement'), 'news'); - -Ensuite c'est simplement une manière de définir ces règles spécifiques sur les parties cibles de l'*ACL*\  : - -.. code-block:: php - :linenos: - - // Le Marketing doit être capable de publier - // et d'archiver les newsletters et les dernières news - $acl->allow('marketing', - array('newsletter', 'latest'), - array('publish', 'archive')); - - // Staff (et marketing, par héritage), - // n'ont pas la permission de relire les dernières news - $acl->deny('staff', 'latest', 'relire'); - - // Personne (y compris les administrateurs) - // n'a la permission d'archiver des annonces - $acl->deny(null, 'annonce', 'archive'); - -On peut maintenant interroger les *ACL* sur base des dernières modifications : - -.. code-block:: php - :linenos: - - echo $acl->isAllowed('staff', 'newsletter', 'publish') ? - "autorisé" : "refusé"; // refusé - - echo $acl->isAllowed('marketing', 'newsletter', 'publish') ? - "autorisé" : "refusé"; // autorisé - - echo $acl->isAllowed('staff', 'latest', 'publish') ? - "autorisé" : "refusé"; // refusé - - echo $acl->isAllowed('marketing', 'latest', 'publish') ? - "autorisé" : "refusé"; // autorisé - - echo $acl->isAllowed('marketing', 'latest', 'archive') ? - "autorisé" : "refusé"; // autorisé - - echo $acl->isAllowed('marketing', 'latest', 'revise') ? - "autorisé" : "refusé"; // refusé - - echo $acl->isAllowed('editor', 'announcement', 'archive') ? - "autorisé" : "refusé"; // refusé - - echo $acl->isAllowed('administrator', 'announcement', 'archive') ? - "autorisé" : "refusé"; // refusé - -.. _zend.permissions.acl.refining.removing: - -Retirer les Contrôles d'Accès ------------------------------ - -Pour retirer une ou plusieurs règles des *ACL*, utilisez simplement la méthode ``removeAllow()`` ou -``removeDeny()``. Comme pour ``allow()`` et ``deny()``, vous pouvez utiliser une valeur ``NULL`` pour indiquer que -la méthode s'applique à tous les rôles, ressources et / ou privilèges. - -.. code-block:: php - :linenos: - - // Retire l'interdiction de relire les dernières news au Staff - // (et au marketing, par héritage) - $acl->removeDeny('staff', 'latest', 'relire'); - - echo $acl->isAllowed('marketing', 'latest', 'relire') ? - "autorisé" : "refusé"; // autorisé - - // Retire l'autorisation de publier - // et archiver les newsletters au Marketing - $acl->removeAllow('marketing', - 'newsletter', - array('publish', 'archive')); - - echo $acl->isAllowed('marketing', 'newsletter', 'publish') ? - "autorisé" : "refusé"; // refusé - - echo $acl->isAllowed('marketing', 'newsletter', 'archive') ? - "autorisé" : "refusé"; // refusé - -Les privilèges peuvent être modifiés de manière incrémentielle comme indiqué au dessus, mais une valeur -``NULL`` pour les privilèges écrase ces modifications incrémentielles. - -.. code-block:: php - :linenos: - - // donne au groupe Marketing toutes les permissions - // sur les dernières nouvelles - $acl->allow('marketing', 'latest'); - - echo $acl->isAllowed('marketing', 'latest', 'publish') ? - "autorisé" : "refusé"; // autorisé - - echo $acl->isAllowed('marketing', 'latest', 'archive') ? - "autorisé" : "refusé"; // autorisé - - echo $acl->isAllowed('marketing', 'latest', 'anything') ? - "autorisé" : "refusé"; // autorisé - - diff --git a/docs/languages/fr/modules/zend.progress-bar.adapter.console.rst b/docs/languages/fr/modules/zend.progress-bar.adapter.console.rst deleted file mode 100644 index bd9031186..000000000 --- a/docs/languages/fr/modules/zend.progress-bar.adapter.console.rst +++ /dev/null @@ -1,52 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.adapter.console: - -Zend\ProgressBar\Adapter\Console -================================ - -``Zend\ProgressBar\Adapter\Console`` est un adaptateur de type texte pour les terminaux. Il peut automatiquement -détecter la largeur du terminal mais supporte aussi des largeurs personnalisées. Vous pouvez définir quels -éléments seront affichés avec la barre de progression et personnaliser leur ordre. Vous pouvez aussi définir le -style de la barre de progression elle-même. - -.. note:: - - **Reconnaissance automatique de la largeur de la console** - - *shell_exec* est nécessaire pour que ceci fonctionne sur les systèmes de type \*nix. Sur Windows, il y a - toujours un terminal fixe de 80 caractères de large, donc la reconnaissance automatique n'est pas nécessaire. - -Vous pouvez paramétrer les options de l'adaptateur soit via les méthodes *set** soit en fournissant un tableau -("array") ou une instance ``Zend_Config`` en tant que premier paramètre du constructeur. Les options disponibles -sont : - -- *outputStream*\  : un flux de sortie différent, si vous ne souhaitez pas utiliser STDOUT. Peut être n'importe - quel autre flux come *php://stderr* ou un chemin vers un fichier. - -- *width*\  : soit un entier ou la constante ``AUTO`` de ``Zend\Console\ProgressBar``. - -- *elements*\  : soit ``NULL`` par défaut ou un tableau avec au moins l'une des constantes de - ``Zend\Console\ProgressBar`` suivantes comme valeur : - - - ``ELEMENT_PERCENT``\  : la valeur courante en pourcentage. - - - ``ELEMENT_BAR``\  : la barre qui va représenter le pourcentage. - - - ``ELEMENT_ETA``\  : le calcul automatique du temps restant estimé (NDT. : "Estimated Time for - Accomplishment"). Cet élément est affiché pour la première fois qu'après cinq secondes, car durant ce - temps, il n'est pas possible de calculer des résultats précis. - - - ``ELEMENT_TEXT``\  : un message de statut optionnel concernant le processus courant. - -- *textWidth*\  : largeur en caractères de l'élément ``ELEMENT_TEXT``. Par défaut vaut 20. - -- *charset*\  : encodage de l'élément ``ELEMENT_TEXT``. Par défaut vaut "utf-8". - -- *barLeftChar*\  : un caractère qui est utilisé du côté gauche de l'indicateur de la barre de progression. - -- *barRightChar*\  : un caractère qui est utilisé du côté droit de l'indicateur de la barre de progression. - -- *barIndicatorChar*\  : un caractère qui est utilisé pour l'indicateur de la barre de progression. Celui-ci - peut être vide. - - diff --git a/docs/languages/fr/modules/zend.progress-bar.adapter.js-pull.rst b/docs/languages/fr/modules/zend.progress-bar.adapter.js-pull.rst deleted file mode 100644 index db2c49b92..000000000 --- a/docs/languages/fr/modules/zend.progress-bar.adapter.js-pull.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.adapter.jspull: - -Zend\ProgressBar\Adapter\JsPull -=============================== - -``Zend\ProgressBar\Adapter\JsPull`` est l'opposé de jsPush, car il requiert de venir récupérer les nouvelles -mises à jour, plutôt que d'envoyer les mises à jour vers le navigateur. Généralement, vous devriez utiliser -l'adaptateur avec l'option de persistance de ``Zend_ProgressBar``. Lors de l'appel, l'adaptateur envoie une chaîne -*JSON* vers le navigateur, qui est comparable à la chaîne *JSON* envoyée par l'adaptateur jsPush. La seule -différence est qu'il contient un paramètre supplémentaire "*finished*", qui vaut ``FALSE`` quand ``update()`` -est appelée ou ``TRUE`` quand ``finish()`` est appelée. - -Vous pouvez paramétrer les options de l'adaptateur soit avec les méthodes *set** soit en fournissant un tableau -("array") ou une instance de ``Zend_Config`` contenant les options en tant que premier paramètre du constructeur. -Les options disponibles sont : - -- *exitAfterSend*: sort de la requête courante après que les données aient été envoyées au navigateur. Vaut - ``TRUE`` par défaut. - - diff --git a/docs/languages/fr/modules/zend.progress-bar.adapter.js-push.rst b/docs/languages/fr/modules/zend.progress-bar.adapter.js-push.rst deleted file mode 100644 index cdc56a965..000000000 --- a/docs/languages/fr/modules/zend.progress-bar.adapter.js-push.rst +++ /dev/null @@ -1,116 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.adapter.jspush: - -Zend\ProgressBar\Adapter\JsPush -=============================== - -``Zend\ProgressBar\Adapter\JsPush`` est un adaptateur qui vous permet de mettre à jour une barre de progression -dans un navigateur au travers de Javascript. Ceci veut dire qu'une seconde connexion n'est pas nécessaire pour -recueillir le statut du processus courant, mais que le processus lui-même envoie son statut directement au -navigateur. - -Vous pouvez paramétrer les options de l'adaptateur soit avec les méthodes *set** soit en fournissant un tableau -("array") ou une instance de ``Zend_Config`` contenant les options en tant que premier paramètre du constructeur. -Les options disponibles sont : - -- *updateMethodName*: la méthode Javascript qui sera appelée à chaque mise à jour. La valeur par défaut est - ``Zend\ProgressBar\Update``. - -- *finishMethodName*: la méthode Javascript qui sera appelée lorsque le statut terminé sera atteint. La valeur - par défaut est ``NULL``, qui veut dire que rien n'est fait. - -L'utilisation de cet adaptateur est assez simple. Premièrement vous créez une barre de progression pour le -navigateur, soit avec Javascript ou auparavant en pur HTML. Ensuite vous définissez une méthode de mise à jour -et optionnellement une méthode de finalisation en Javascript, les deux acceptant un objet *JSON* en tant qu'unique -argument. Ensuite vous appelez une page Web avec un processus chronophage dans une balise *iframe* ou *object* -masqué. Pendant que le processus tourne, l'adaptateur appelle la méthode de mise à jour à chaque mise à jour -avec un objet *JSON*, contenant le paramètres suivants : - -- *current*: la valeur courante - -- *max*: la valeur maximum - -- *percent*: le pourcentage calculé - -- *timeTaken*: le temps depuis quand le processus courant est en marche - -- *timeRemaining*: le temps estimé pour que le processus se termine - -- *text*: le message de statut optionnel, si fourni - -.. _zend.progressbar-adapter.jspush.example: - -.. rubric:: Exemple basique du fonctionnement côté-client - -Cet exemple illustre un paramétrage basique du HTML, *CSS* et JavaScript pour l'adaptateur JsPush : - -.. code-block:: html - :linenos: - -
-
-
- - - -.. code-block:: css - :linenos: - - #long-running-process { - position: absolute; - left: -100px; - top: -100px; - - width: 1px; - height: 1px; - } - - #zend-progressbar-container { - width: 100px; - height: 30px; - - border: 1px solid #000000; - background-color: #ffffff; - } - - #zend-progressbar-done { - width: 0; - height: 30px; - - background-color: #000000; - } - -.. code-block:: javascript - :linenos: - - function Zend\ProgressBar\Update(data) - { - document.getElementById('zend-progressbar-done').style.width = - data.percent + '%'; - } - -Ceci créera un simple conteneur avec une bordure noire et un bloc qui indique le niveau du processus courant. Vous -ne devez pas masquer l'*iframe* ou l'*object* par *display: none;*, car dans ce cas les navigateurs comme Safari 2 -ne chargeront pas le contenu réel. - -Plutôt que de créer votre barre de progression personnalisée, vous pouvez utiliser une de celles disponibles -dans les librairies JavaScript comme Dojo, jQuery etc. Par exemple, il existe : - -- Dojo : http://dojotoolkit.org/reference-guide/dijit/ProgressBar.html - -- jQuery : https://api.jqueryui.com/progressbar/ - -- MooTools : http://davidwalsh.name/dw-content/progress-bar.php - -- Prototype : http://livepipe.net/control/progressbar - -.. note:: - - **Intervalle de mise à jour** - - Vous devez faire attention à ne pas envoyer trop de mises à jour, puisque chaque mise à jour a une taille - minimum de 1ko. Ceci est requis par le navigateur Safari pour rendre et exécuter l'appel de fonction. Internet - Explorer possède une limitation similaire mais à 256 octets. - - - diff --git a/docs/languages/fr/modules/zend.progress-bar.rst b/docs/languages/fr/modules/zend.progress-bar.rst deleted file mode 100644 index 8d9f58950..000000000 --- a/docs/languages/fr/modules/zend.progress-bar.rst +++ /dev/null @@ -1,66 +0,0 @@ -.. EN-Revision: none -.. _zend.progressbar.introduction: - -Zend_ProgressBar -================ - -.. _zend.progressbar.whatisit: - -Introduction ------------- - -``Zend_ProgressBar`` est un composant pour créer et mettre à jour les barres de progression dans différents -environnements. Il consiste en un backend unique, qui affiche la progression au travers de l'un des multiples -adaptateurs. A chaque mise à jour, il prend un chemin absolu et un message d'état, et appelle ensuite -l'adaptateur avec certaines valeurs précalculées comme le pourcentage et le temps restant estimé. - -.. _zend.progressbar.basic: - -Utilisation basique de Zend_Progressbar ---------------------------------------- - -``Zend_ProgressBar`` est assez simple d'utilisation. Vous créez simplement une nouvelle instance de -``Zend_Progressbar``, en définissant des valeurs minimum et maximum, et en choisissant un adaptateur pour afficher -les données. Si vous voulez travailler avec un fichier, vous pouvez faire comme ceci : - -.. code-block:: php - :linenos: - - $progressBar = new Zend\ProgressBar\ProgressBar(0, $fileSize, $adapter); - - while (!feof($fp)) { - // Faire quelque chose - - $progressBar->update($currentByteCount); - } - - $progressBar->finish(); - -Dans un premier temps, une instance de ``Zend_ProgressBar``, avec une valeur minimum de 0, une valeur maximum -correspondant à la taille totale du fichier et un adaptateur spécifique. Ensuite on travaille avec le fichier et -à chaque boucle la barre de progression est mise à jour avec le nombre d'octets courant. A la fin de la boucle, -le statut de la barre de progression est réglé à terminé. - -``Zend_ProgressBar`` possède aussi une méthode ``refresh()`` qui recalcule le temps restant estimé et met à -jour l'adaptateur. Ceci est pratique quand il n'y a aucune donnée à mettre à jour mais que vous souhaitez que la -barre de progression soit mise à jour. - -.. _zend.progressbar.adapters: - -Adaptateurs standard --------------------- - -``Zend_ProgressBar`` est fourni avec les deux adaptateurs suivants : - - - :ref:` ` - - - :ref:` ` - - - :ref:` ` - - - -.. include:: zend.progress-bar.adapter.console.rst -.. include:: zend.progress-bar.adapter.js-push.rst -.. include:: zend.progress-bar.adapter.js-pull.rst - diff --git a/docs/languages/fr/modules/zend.rest.client.rst b/docs/languages/fr/modules/zend.rest.client.rst deleted file mode 100644 index d053304e9..000000000 --- a/docs/languages/fr/modules/zend.rest.client.rst +++ /dev/null @@ -1,188 +0,0 @@ -.. EN-Revision: none -.. _zend.rest.client: - -Zend\Rest\Client -================ - -.. _zend.rest.client.introduction: - -Introduction ------------- - -Utiliser le ``Zend\Rest\Client`` est très semblable à l'utilisation des objets de *SoapClient* (`SOAP web service -extension`_). Vous pouvez simplement appeler les procédures de service de REST comme méthodes de -``Zend\Rest\Client``. Vous devez indiquer l'adresse complète du service dans le constructeur de -``Zend\Rest\Client``. - -.. _zend.rest.client.introduction.example-1: - -.. rubric:: Une requête REST basique - -.. code-block:: php - :linenos: - - /** - * Connexion au serveur framework.zend.com server - */ - $client = new Zend\Rest\Client('http://framework.zend.com/rest'); - - echo $client->sayHello('Davey', 'Day')->get(); - // "Hello Davey, Good Day" - -.. note:: - - **Différences dans les appels** - - ``Zend\Rest\Client`` tente de rendre les méthodes distantes de la même manière que ses propres méthodes, la - seule différence étant que vous devez suivre l'appel de méthode ``get()``, ``post()``, ``put()`` ou - ``delete()``. Cet appel peut être fait par l'intermédiaire de méthodes enchaînées ou dans des appels - séparés de méthode : - - .. code-block:: php - :linenos: - - $client->sayHello('Davey', 'Day'); - echo $client->get(); - -.. _zend.rest.client.return: - -Réponses --------- - -Toutes les demandes faites en utilisant ``Zend\Rest\Client`` retourne un objet ``Zend\Rest\Client\Response``. Cet -objet a beaucoup de propriétés qui facilitent l'accès aux résultats. - -Quand le service est basé sur ``Zend\Rest\Server``, Zend\Rest\Client peut faire plusieurs suppositions au sujet de -la réponse, y compris le statut de réponse (succès ou échec) et le type de retour. - -.. _zend.rest.client.return.example-1: - -.. rubric:: État de la réponse - -.. code-block:: php - :linenos: - - $result = $client->sayHello('Davey', 'Day')->get(); - - if ($result->isSuccess()) { - echo $result; // "Hello Davey, Good Day" - } - -Dans l'exemple ci-dessus, vous pouvez voir que nous utilisons le résultat de la demande comme un objet, pour -appeler ``isSuccess()``, et puis grâce à ``__toString()``, nous pouvons simplement faire *echo* sur l'objet pour -récupérer le résultat. ``Zend\Rest\Client\Response`` vous permettra de afficher n'importe quelle valeur -scalaire. Pour les types complexes, vous pouvez employer la notation type objet ou type tableau. - -Si cependant, vous souhaitez questionner un service n'employant pas ``Zend\Rest\Server`` l'objet de -``Zend\Rest\Client\Response`` se comportera comme un *SimpleXMLElement*. Cependant, pour faciliter les choses, il -questionnera automatiquement le *XML* en utilisant XPath si la propriété n'est pas un descendant direct de -l'élément racine du document. En plus, si vous accédez à une propriété comme à une méthode, vous recevrez -la valeur de *PHP* pour l'objet, ou un tableau de résultats. - -.. _zend.rest.client.return.example-2: - -.. rubric:: Utiliser le service REST Technorati - -.. code-block:: php - :linenos: - - $technorati = new Zend\Rest\Client('http://api.technorati.com/bloginfo'); - $technorati->key($key); - $technorati->url('http://pixelated-dreams.com'); - $result = $technorati->get(); - echo $result->firstname() .' '. $result->lastname(); - -.. _zend.rest.client.return.example-3: - -.. rubric:: Exemple de réponse Technorati - -.. code-block:: xml - :linenos: - - - - - - - - http://pixelated-dreams.com - - Pixelated Dreams - http://pixelated-dreams.com - - DShafik - Davey - Shafik - - http://pixelated-dreams.com/feeds/index.rss2 - http://pixelated-dreams.com/feeds/atom.xml - 44 - 218 - 2006-04-26 04:36:36 GMT - 60635 - - 44 - 218 - - - - -Ici nous accédons aux propriétés *firstname* et *lastname*.Bien que ce ne soient pas les éléments supérieurs, -elles sont automatiquement retournées quand on accède par le nom. - -.. note:: - - **Éléments multiples** - - Si des éléments multiples sont trouvés en accédant à une valeur de nom, un tableau d'élément - SimpleXMLElement sera retourné ; l'accès par l'intermédiaire de la notation de méthode retournera un tableau - de valeurs. - -.. _zend.rest.client.args: - -Arguments de requêtes ---------------------- - -A moins que vous ne fassiez une demande à un service basé sur ``Zend\Rest\Server``, il y a des chances que vous -devez envoyer des arguments multiples avec votre requête. Ceci est fait en appelant une méthode avec le nom de -l'argument, en passant la valeur comme premier (et seul) argument. Chacun de ces appels de méthode renvoie l'objet -lui-même, tenant compte de l'enchaînement, ou de l'utilisation habituelle. Le premier appel, ou le premier -argument si vous passez plus d'un argument, est toujours considéré comme la méthode en appelant un service -``Zend\Rest\Server``. - -.. _zend.rest.client.args.example-1: - -.. rubric:: Affecter des arguments de requêtes - -.. code-block:: php - :linenos: - - $client = new Zend\Rest\Client('http://example.org/rest'); - - $client->arg('value1'); - $client->arg2('value2'); - $client->get(); - - // or - - $client->arg('value1')->arg2('value2')->get(); - -Les deux méthodes dans l'exemple ci-dessus, auront comme conséquence l'obtention des arguments suivants : -*?method=arg&arg1=value1&arg=value1&arg2=value2* - -Vous noterez que le premier appel de *$client->arg('value1');* a eu comme conséquence *method=arg&arg1=value1* et -*arg=value1*; ceci afin que ``Zend\Rest\Server`` puisse comprendre la demande correctement, plutôt que d'exiger la -connaissance préalable du service. - -.. warning:: - - **Sévérité de Zend\Rest\Client** - - Tout service REST qui est strict au sujet des arguments qu'il reçoit échouera probablement en utilisant - ``Zend\Rest\Client``, en raison du comportement décrit ci-dessus. Ce n'est pas une pratique courante et ne - devrait pas poser des problèmes. - - - -.. _`SOAP web service extension`: http://www.php.net/soap diff --git a/docs/languages/fr/modules/zend.rest.rst b/docs/languages/fr/modules/zend.rest.rst deleted file mode 100644 index 7bd776fba..000000000 --- a/docs/languages/fr/modules/zend.rest.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. EN-Revision: none -.. _zend.rest.introduction: - -Introduction -============ - -Les services Web REST utilisent des formats *XML* spécifiques. Ces normes ad-hoc signifient que la façon -d'accéder à un service Web REST est différente pour chaque service. Les services Web REST utilise typiquement -les paramètres *URL* (données GET) ou les informations du chemin pour demander des données, et les données POST -pour envoyer des données. - -Zend Framework fournit les possibilités de client et de serveur, qui, une fois utilisées ensemble tiennent compte -de beaucoup plus d'expérience d'interface "locale" par l'intermédiaire de l'accès aux propriétés d'objet -virtuel. Le composant serveur comporte l'exposition automatique des fonctions et des classes employant un format -compréhensible et simple de *XML*. En accédant à ces services via le client, il est possible de rechercher -facilement les données retournées lors de l'appel à distance. Si vous souhaitez employer le client avec un -service non basé sur le service Zend\Rest\Server, il fournira un accès plus facile aux données. - -En plus des composants ``Zend\Rest\Server`` et ``Zend\Rest\Client``, les classes :ref:`Zend\Rest\Route et -Zend\Rest\Controller ` sont fournies pour aider lors du routage des requêtes -vers les contrôleurs. - - diff --git a/docs/languages/fr/modules/zend.rest.server.rst b/docs/languages/fr/modules/zend.rest.server.rst deleted file mode 100644 index b74e96ebe..000000000 --- a/docs/languages/fr/modules/zend.rest.server.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. EN-Revision: none -.. _zend.rest.server: - -Zend\Rest\Server -================ - -.. _zend.rest.server.introduction: - -Introduction ------------- - -Zend\Rest\Server est prévu comme un serveur supportant l'ensemble des fonctionnalités d'un serveur REST. - -.. _zend.rest.server.usage: - -Utilisation d'un serveur REST ------------------------------ - -.. _zend.rest.server.usage.example-1: - -.. rubric:: Utilisation basique Zend\Rest\Server - Avec des classes - -.. code-block:: php - :linenos: - - $server = new Zend\Rest\Server(); - $server->setClass('Mon_Service_Classe'); - $server->handle(); - -.. _zend.rest.server.usage.example-2: - -.. rubric:: Utilisation basique Zend\Rest\Server - Avec des fonctions - -.. code-block:: php - :linenos: - - /** - * Dit Bonjour - * - * @param string $qui - * @param string $quand - * @return string - */ - function ditBonjour($qui, $quand) - { - return "Bonjour $qui, bonne $quand"; - } - - $server = new Zend\Rest\Server(); - $server->addFunction('ditBonjour'); - $server->handle(); - -.. _zend.rest.server.args: - -Appelé un service Zend\Rest\Server ----------------------------------- - -Pour appeler un service ``Zend\Rest\Server``, vous devez fournir un argument de *method* GET/POST avec une valeur -qui est la méthode que vous souhaitez appeler. Vous pouvez alors ajouter tout nombre d'arguments en utilisant le -nom de l'argument (c.-à-d. "qui ") ou en utilisant 'arg' suivi de la position numérique de l'argument (c.-à-d. -"arg1"). - -.. note:: - - **Index numérique** - - Les arguments numériques utilisent 1 comme point de départ. - -Pour appeler le *ditBonjour* de l'exemple ci-dessus, vous pouvez employer soit : - -*?method=ditBonjour&qui=Davey&quand=journée* - -or: - -*?method=ditBonjour&arg1=Davey&arg2=journée* - -.. _zend.rest.server.customstatus: - -Envoyer un statut personnalisé ------------------------------- - -En envoyant des valeurs, pour ajouter un statut personnalisé, vous pouvez envoyer un tableau avec une clé -*status*. - -.. _zend.rest.server.customstatus.example-1: - -.. rubric:: Renvoyer un statut personnalisé - -.. code-block:: php - :linenos: - - /** - * Dit Bonjour - * - * @param string $qui - * @param string $quand - * @return array - */ - function ditBonjour($qui, $quand) - { - return array('msg' => "Une erreur est apparue", 'status' => false); - } - - $server = new Zend\Rest\Server(); - $server->addFunction('ditBonjour'); - $server->handle(); - -.. _zend.rest.server.customxml: - -Renvoyer une réponse XML personnalisée --------------------------------------- - -Si vous voulez retourner du *XML* personnalisé, retournez simplement un objet *DOMDocument*, *DOMElement* ou -*SimpleXMLElement*. - -.. _zend.rest.server.customxml.example-1: - -.. rubric:: Renvoyer une réponse XML personnalisée - -.. code-block:: php - :linenos: - - /** - * Dit Bonjour - * - * @param string $who - * @param string $when - * @return SimpleXMLElement - */ - function ditBonjour($qui, $quand) - { - $xml =' - - Salut $qui! J\'espère que tu passes une bonne $when - 200 - '; - - $xml = simplexml_load_string($xml); - return $xml; - } - - $server = new Zend\Rest\Server(); - $server->addFunction('ditBonjour'); - - $server->handle(); - -La réponse du service sera retournée sans modification au client. - - diff --git a/docs/languages/fr/modules/zend.serializer.adapter.rst b/docs/languages/fr/modules/zend.serializer.adapter.rst deleted file mode 100644 index 72de5d0b2..000000000 --- a/docs/languages/fr/modules/zend.serializer.adapter.rst +++ /dev/null @@ -1,214 +0,0 @@ -.. EN-Revision: none -.. _zend.serializer.adapter: - -Zend\Serializer\Adapter -======================= - -Les adaptateurs ``Zend_Serializer`` servent à changer les méthodes de sérialisation facilement. - -Chaque adaptateurs possède ses propres atouts et inconvénients. Dans certains cas, certains types PHP (objets) ne -peuvent être représentés sous forme de chaînes. Dans ce cas, ces types seront convertis vers un type -sérialisable (par exemple, les objets seront convertis en tableaux). Ci ceci échoue, une exception -``Zend\Serializer\Exception`` sera alors envoyée. - -Voici une liste des adaptateurs disponibles. - -.. _zend.serializer.adapter.phpserialize: - -Zend\Serializer\Adapter\PhpSerialize ------------------------------------- - -Cet adaptateur utilise les fonctions PHP ``un/serialize`` et constitue un bon choix d'adaptateur par défaut. - -Aucune option de configuration n'existe pour cet adaptateur. - -.. _zend.serializer.adapter.igbinary: - -Zend\Serializer\Adapter\Igbinary --------------------------------- - -`Igbinary`_ est un logiciel Open Source crée par Sulake Dynamoid Oy. C'est un remplaçant du sérialiseur utiliser -par PHP. Au lieu d'utiliser une représentation textuelle (coûteuse en temps et en poids), igbinary représente les -structures de données PHP dans un format binaire compact. Les gains sont importants lorsqu'un système de stockage -comme memcache est utilisé pour les données sérialisées. - -L'extension PHP igbinary est requise pour l'utilisation de cet adaptateur. - -Aucune option de configuration n'existe pour cet adaptateur. - -.. _zend.serializer.adapter.wddx: - -Zend\Serializer\Adapter\Wddx ----------------------------- - -`WDDX`_ (Web Distributed Data eXchange) est à la fois un langage de programmation, une plateforme et un mecanisme -de transport de données entre différents environnements. - -Cet adaptateur utilise simplement les fonctions PHP `wddx_*()`_. Veuillez lire le manuel PHP afin de vérifier la -disponibilité et l'installation de ces fonctions. - -Aussi, l'extension PHP `SimpleXML`_ est utilisée pour vérifier si une valeur ``NULL`` retournée par -``wddx_unserialize()`` est basée sur une donnée sérialisée ``NULL`` ou au contraire des données non valides - -Les options disponibles sont: - -.. _zend.serializer.adapter.wddx.table.options: - -.. table:: Options Zend\Serializer\Adapter\Wddx - - +-------+--------------+-----------------+-----------------------------------------------------+ - |Option |Type de donnée|Valeur par défaut|Description | - +=======+==============+=================+=====================================================+ - |comment|chaîne | |Un commentaire qui apparaît dans l'entête du paquet. | - +-------+--------------+-----------------+-----------------------------------------------------+ - -.. _zend.serializer.adapter.json: - -Zend\Serializer\Adapter\Json ----------------------------- - -L'adaptateur *JSON* créer un pont vers ``Zend_Json`` et/ou ext/json (l'extension json de PHP). Pour plus -d'informations, lisez le manuel de :ref:`Zend_Json `. - -Les options disponibles sont: - -.. _zend.serializer.adapter.json.table.options: - -.. table:: Options Zend\Serializer\Adapter\Json - - +--------------------+-----------------+---------------------+-----------+ - |Option |Type de donnée |Valeur par défaut |Description| - +====================+=================+=====================+===========+ - |cycleCheck |booléen |false |Voyez | - +--------------------+-----------------+---------------------+-----------+ - |objectDecodeType |Zend\Json\Json::TYPE_*|Zend\Json\Json::TYPE_ARRAY|Voyez | - +--------------------+-----------------+---------------------+-----------+ - |enableJsonExprFinder|booléen |false |Voyez | - +--------------------+-----------------+---------------------+-----------+ - -.. _zend.serializer.adapter.amf03: - -Zend\Serializer\Adapter\Amf 0 et 3 ----------------------------------- - -Les adaptateurs *AMF*, ``Zend\Serializer\Adapter\Amf0`` et ``Zend\Serializer\Adapter\Amf3``, sont un pont vers le -sérialiseur du composant ``ZendAmf``. Veuillez lire la documentation de :ref:`ZendAmf documentation -` pour plus d'informations. - -Aucune option de configuration n'existe pour cet adaptateur. - -.. _zend.serializer.adapter.pythonpickle: - -Zend\Serializer\Adapter\PythonPickle ------------------------------------- - -Cet adaptateur convertit des types PHP vers une chaine `Python Pickle`_ Grâce à lui, vous pouvez lire en Python -des données sérialisées de PHP et inversement. - -Les options disponibles sont: - -.. _zend.serializer.adapter.pythonpickle.table.options: - -.. table:: Options Zend\Serializer\Adapter\PythonPickle - - +--------+----------------------+-----------------+---------------------------------------------+ - |Option |Type de donnée |Valeur par défaut|Description | - +========+======================+=================+=============================================+ - |protocol|entier (0 | 1 | 2 | 3)|0 |La version du protocole Pickle pour serialize| - +--------+----------------------+-----------------+---------------------------------------------+ - -Le transtypage (PHP vers Python) se comporte comme suit: - -.. _zend.serializer.adapter.pythonpickle.table.php2python: - -.. table:: Le transtypage (PHP vers Python) - - +------------------+------------+ - |Type PHP |Type Python | - +==================+============+ - |NULL |None | - +------------------+------------+ - |booléen |booléen | - +------------------+------------+ - |entier |entier | - +------------------+------------+ - |flottant |flottant | - +------------------+------------+ - |chaine |chaine | - +------------------+------------+ - |tableau |liste | - +------------------+------------+ - |tableau associatif|dictionnaire| - +------------------+------------+ - |objet |dictionnaire| - +------------------+------------+ - -Le transtypage (Python vers PHP) se comporte comme suit: - -.. _zend.serializer.adapter.pythonpickle.table.python2php: - -.. table:: Transtypage (Python vers PHP): - - +---------------+------------------------------------------------------+ - |Type Python |Type PHP | - +===============+======================================================+ - |None |NULL | - +---------------+------------------------------------------------------+ - |booléen |booléen | - +---------------+------------------------------------------------------+ - |entier |entier | - +---------------+------------------------------------------------------+ - |long |entier | flottant | chaine | Zend\Serializer\Exception| - +---------------+------------------------------------------------------+ - |flottant |flottant | - +---------------+------------------------------------------------------+ - |chaine |chaine | - +---------------+------------------------------------------------------+ - |octets |chaine | - +---------------+------------------------------------------------------+ - |chaine Unicode |chaine UTF-8 | - +---------------+------------------------------------------------------+ - |list |tableau | - +---------------+------------------------------------------------------+ - |tuple |tableau | - +---------------+------------------------------------------------------+ - |dictionnaire |tableau associatif | - +---------------+------------------------------------------------------+ - |Tout autre type|Zend\Serializer\Exception | - +---------------+------------------------------------------------------+ - -.. _zend.serializer.adapter.phpcode: - -Zend\Serializer\Adapter\PhpCode -------------------------------- - -Cet adaptateur génère une chaine représentant du code analysable par PHP via `var_export()`_.A la -désérialisation, les données seront exécutées par `eval`_. - -Aucune option de configuration n'existe pour cet adaptateur. - -.. warning:: - - **Désérialiser des objets** - - Les objets seront sérialisés en utilisant la méthode magique `\__set_state`_ Si la classe ne propose pas - cette méthode, une erreur fatale aboutira. - -.. warning:: - - **Utilisation de eval()** - - L'adaptateur ``PhpCode`` utilise ``eval()`` pour désérialiser. Ceci mène à des problèmes de performance et - de sécurité, un nouveau processus sera crée. Typiquement, vous devriez utiliser l'adaptateur ``PhpSerialize`` - à moins que vous ne vouliez que les données sérialisées ne soient analysables à l'oeil humain. - - - -.. _`Igbinary`: http://opensource.dynamoid.com -.. _`WDDX`: http://wikipedia.org/wiki/WDDX -.. _`wddx_*()`: http://php.net/manual/book.wddx.php -.. _`SimpleXML`: http://php.net/manual/book.simplexml.php -.. _`Python Pickle`: http://docs.python.org/library/pickle.html -.. _`var_export()`: http://php.net/manual/function.var-export.php -.. _`eval`: http://php.net/manual/function.eval.php -.. _`\__set_state`: http://php.net/manual/language.oop5.magic.php#language.oop5.magic.set-state diff --git a/docs/languages/fr/modules/zend.serializer.introduction.rst b/docs/languages/fr/modules/zend.serializer.introduction.rst deleted file mode 100644 index 1001eacf8..000000000 --- a/docs/languages/fr/modules/zend.serializer.introduction.rst +++ /dev/null @@ -1,82 +0,0 @@ -.. EN-Revision: none -.. _zend.serializer.introduction: - -Introduction -============ - -``Zend_Serializer`` utilise une interface basée sur des adaptateurs afin de générer des représentations -stockables de types php et inversement. - -.. _zend.serializer.introduction.example.dynamic: - -.. rubric:: Utiliser ``Zend_Serializer`` - -Pour instancier un sérialiseur, vous devriez utiliser la méthode de fabrique d'adaptateurs: - -.. code-block:: php - :linenos: - - $serializer = Zend\Serializer\Serializer::factory('PhpSerialize'); - // $serializer est instance de Zend\Serializer\Adapter\AdapterInterface, - // précisément Zend\Serializer\Adapter\PhpSerialize - - try { - $serialized = $serializer->serialize($data); - // $serialized est une chaîne - - $unserialized = $serializer->unserialize($serialized); - // ici $data == $unserialized - } catch (Zend\Serializer\Exception $e) { - echo $e; - } - -La méthode ``serialize`` génère une chaîne. Pour regénérer la donnée utilisez la méthode ``unserialize``. - -Si une erreur survient à la sérialisation ou désérialisation, ``Zend_Serializer`` enverra une -``Zend\Serializer\Exception``. - -Pour configurer l'adaptateur, vous pouvez passer un tableau ou un objet instance de ``Zend_Config`` à la méthode -``factory`` ou aux méthode ``un-/serialize``: - -.. code-block:: php - :linenos: - - $serializer = Zend\Serializer\Serializer::factory('Wddx', array( - 'comment' => 'serialized by Zend_Serializer', - )); - - try { - $serialized = $serializer->serialize($data, array('comment' => 'change comment')); - $unserialized = $serializer->unserialize($serialized, array(/* options pour unserialize */)); - } catch (Zend\Serializer\Exception $e) { - echo $e; - } - -Les options passées à ``factory`` sont valides pour l'objet crée. Vous pouvez alors changer ces options grâce -à la méthode ``setOption(s)``. Pour changer des options pour un seul appel, passez celles-ci en deuxième -argument des méthodes ``serialize`` ou ``unserialize``. - -.. _zend.serializer.introduction.example.static.php: - -.. rubric:: Utiliser l'interface statique de Zend_Serializer - -Vous pouvez enregistrer une adaptateur spécifique comme adaptateur par défaut à utiliser avec -``Zend_Serializer``. Par défaut, l'adaptateur enregistré est ``PhpSerialize`` mais vous pouvez le changer au -moyen de la méthode statique ``setDefaultAdapter()``. - -.. code-block:: php - :linenos: - - Zend\Serializer\Serializer::setDefaultAdapter('PhpSerialize', $options); - // ou - $serializer = Zend\Serializer\Serializer::factory('PhpSerialize', $options); - Zend\Serializer\Serializer::setDefaultAdapter($serializer); - - try { - $serialized = Zend\Serializer\Serializer::serialize($data, $options); - $unserialized = Zend\Serializer\Serializer::unserialize($serialized, $options); - } catch (Zend\Serializer\Exception $e) { - echo $e; - } - - diff --git a/docs/languages/fr/modules/zend.server.reflection.rst b/docs/languages/fr/modules/zend.server.reflection.rst deleted file mode 100644 index 7834b1292..000000000 --- a/docs/languages/fr/modules/zend.server.reflection.rst +++ /dev/null @@ -1,62 +0,0 @@ -.. EN-Revision: none -.. _zend.server.reflection: - -Zend\Server\Reflection -====================== - -.. _zend.server.reflection.introduction: - -Introduction ------------- - -``Zend\Server\Reflection`` fournit un mécanisme standard pour exécuter l'introspection de fonction et de classe -pour utiliser avec des classes serveur. Il est basé sur l'API de réflexion de *PHP* 5, et l'améliore pour -fournir des méthodes de recherche des types et des descriptions de paramètre et de valeur de retour, une liste -complète des prototypes de fonction et de méthode (c.-à-d., toutes les combinaisons d'appels valides possibles), -et des descriptions de fonction/méthode. - -Typiquement, cette fonctionnalité sera seulement utilisée par les développeurs des classes serveur pour le -framework. - -.. _zend.server.reflection.usage: - -Utilisation ------------ - -L'utilisation de base est simple : - -.. code-block:: php - :linenos: - - $class = Zend\Server\Reflection::reflectClass('Ma_Classe'); - $function = Zend\Server\Reflection::reflectFunction('ma_fonction'); - - // Récupère les prototypes - $prototypes = $reflection->getPrototypes(); - - // Parcoure chaque prototype pour une fonction - foreach ($prototypes as $prototype) { - - // Récupère les prototypes des types de retour - echo "Return type: ", $prototype->getReturnType(), "\n"; - - // Récupère les paramètres - $parameters = $prototype->getParameters(); - - echo "Paramètres: \n"; - foreach ($parameters as $parameter) { - // Récupère le type d'un paramètre - echo " ", $parameter->getType(), "\n"; - } - } - - // Récupère l'espace de noms d'une classe, d'une fonction, ou d'une méthode. - // Les espaces de noms peuvent être définis au moment de l'instanciation - // (deuxième argument), ou en utilisant setNamespace() - $reflection->getNamespace(); - -``reflectFunction()`` retourne un objet ``Zend\Server\Reflection\Function``. *reflectClass* retourne un objet -``Zend\Server\Reflection\Class``. Veuillez vous référer à la documentation d'API pour voir quelles méthodes -sont disponibles pour chacun. - - diff --git a/docs/languages/fr/modules/zend.server.rst b/docs/languages/fr/modules/zend.server.rst deleted file mode 100644 index 580002b76..000000000 --- a/docs/languages/fr/modules/zend.server.rst +++ /dev/null @@ -1,16 +0,0 @@ -.. EN-Revision: none -.. _zend.server.introduction: - -Introduction -============ - -La famille de classes ``Zend_Server`` fournit des fonctionnalités pour les différentes classes serveur, notamment -``Zend\XmlRpc\Server``, ``Zend\Rest\Server``, ``Zend\Json\Server`` et ``Zend\Soap\Wsdl``. ``Zend\Server\Interface`` -fournit une interface qui imite la classe *SoapServer* de PHP5; toutes les classes serveur devraient implémenter -cette interface de manière à fournir une *API* serveur standard. - -L'arbre ``Zend\Server\Reflection`` fournit un mécanisme standard permettant de réaliser l'introspection de -fonctions et de classes afin de s'en servir comme callback avec les classes serveur, et fournit des données -appropriées pour les méthodes ``getFunctions()`` et ``loadFunctions()`` de ``Zend\Server\Interface``. - - diff --git a/docs/languages/fr/modules/zend.soap.auto-discovery.rst b/docs/languages/fr/modules/zend.soap.auto-discovery.rst deleted file mode 100644 index 1073d7c34..000000000 --- a/docs/languages/fr/modules/zend.soap.auto-discovery.rst +++ /dev/null @@ -1,282 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.autodiscovery: - -Auto découverte -=============== - -.. _zend.soap.autodiscovery.introduction: - -Introduction à l'auto découverte --------------------------------- - -Les fonctionnalités *SOAP* de Zend Framework sont proposées afin de simplifier l'accès aux services Web de type -*SOAP*. - -*SOAP* est un protocole d'échange de données indépendant d'un langage. Il peut donc être utilisé avec une -autre technologie que *PHP*. - -Il y a trois configurations d'utilisation de *SOAP* avec Zend Framework : - - . SOAP serveur application *PHP* <---> *SOAP* client application *PHP* - - . SOAP serveur application non *PHP* <---> *SOAP* client application *PHP* - - . SOAP serveur application *PHP* <---> *SOAP* client application non *PHP* - - - -Il est indispensable de connaître les fonctionnalités qu'offre un serveur *SOAP*, afin de pouvoir communiquer -avec lui. `WSDL`_ est alors utilisé pour décrire en détail l'API des services disponibles sur un serveur *SOAP*. - -Le langage WSDL est assez complexe (voyez http://www.w3.org/TR/wsdl pour les détails ). Il est donc difficile -d'écrire une définition WSDL correcte, à la main. - -Un autre problème concerne la synchronisation des changements dans l'API avec des fichiers WSDL déjà existants. - -Ces 2 problèmes peuvent être résolus avec la génération automatique de WSDL, qui permet d'analyser une classe -ou des fonctions, d'en extraire les paramètres d'entrée/sortie, et de générer un fichier WSDL correct et -compréhensible par le serveur et les clients *SOAP*. - -Il y a deux façons d'utiliser Zend Framework pour une application serveur *SOAP*: - - - Utiliser des classes. - - - Utiliser des fonctions. - - - -Ces deux façons sont supportées par la fonctionnalité d'auto génération de Zend Framework. - -Zend\Soap\AutoDiscovery supporte aussi la correspondance des types *PHP* vers `les types XSD`_. - -Voici un exemple d'utilisation de l'auto découverte. La fonction ``handle()`` génère le fichier WSDL et l'envoie -au navigateur : - - .. code-block:: php - :linenos: - - class My_SoapServer_Class { - ... - } - - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->setClass('My_SoapServer_Class'); - $autodiscover->handle(); - - - -Si vous avez besoin d'accéder au fichier WSDL généré soit pour le sauvegarder dans un fichier ou en tant que -chaîne de caractères, vous pouvez utiliser les méthodes ``dump($filename)`` ou ``toXml()`` que la classe -AutoDiscover fournit. - -.. note:: - - **Zend\Soap\Autodiscover n'est pas un serveur SOAP** - - Il est très important de noter, que la classe ``Zend\Soap\Autodiscover`` n'agit pas en tant que serveur *SOAP* - elle-même. Elle génère seulement le WSDL et le fournit à ceux qui accèdent à l'URL qu'elle écoute. - - Par défaut l'URI de *SOAP* est *'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']*, mais ceci peut - être changé avec la méthode ``setUri()`` ou le paramètre de constructeur de la classe - ``Zend\Soap\AutoDiscover``. L'URI doit correspondre à un ``Zend\Soap\Server`` qui écoute les requêtes. - - - - .. code-block:: php - :linenos: - - if (isset($_GET['wsdl'])) { - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->setClass('HelloWorldService'); - $autodiscover->handle(); - } else { - // pointing to the current file here - $soap = new Zend\Soap\Server("http://example.com/soap.php?wsdl"); - $soap->setClass('HelloWorldService'); - $soap->handle(); - } - - - -.. _zend.soap.autodiscovery.class: - -Auto découverte de classe -------------------------- - -Si une classe est utilisée dans un serveur SOAP, alors celle-ci devrait aussi être fournie à -``Zend\Soap\AutoDiscovery`` afin d'en générer le fichier WSDL : - - .. code-block:: php - :linenos: - - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->setClass('My_SoapServer_Class'); - $autodiscover->handle(); - - - -Les règles suivantes sont utilisées lors de la génération du fichier WSDL : - - - Le fichier WSDL généré décrit un service Web de type RPC. - - - Le nom du service crée sera le nom de la classe utilisée. - - - *'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']* est utilisé comme *URI* où le fichier WSDL est - disponible par défaut mais ceci peut être surchargé avec la méthode ``setUri()``. - - Cet *URI* est aussi utilisé comme un espace de nom cible pour tous les noms du service (incluant les types - complexes décrits éventuellement). - - - Les méthodes de la classe sont jointes dans un `Port Type`_. - - *$className . 'Port'* est utilisé comme nom de Port Type. - - - Chaque méthode de la classe est enregistrée comme une opération. - - - Chaque prototype de méthode génère des messages de requête/réponse correspondants. - - Une méthode peut avoir plusieurs prototypes si des paramètres sont optionnels. - - - -.. note:: - - **Important !** - - L'auto génération du fichier WSDL (avec auto découverte de la classe) utilise les blocs de documentation de - *PHP* insérés par le développeur dans ses classes, afin de trouver les types retournés. De ce fait, pour les - types scalaires, c'est le seul moyen de les déterminer de manière sûre, et concernant les types de retour des - méthodes, c'est le seul moyen de les découvrir (PHP étant faiblement typé). - - Ceci signifie que documenter de manière correcte vos classes et méthodes n'est pas seulement une bonne - pratique, c'est tout simplement essentiel pour partager vos classes en tant que services *SOAP* auto générés. - -.. _zend.soap.autodiscovery.functions: - -Auto découverte des fonctions ------------------------------ - -Si des fonctions doivent être utilisées (partagées) via un serveur SOAP, alors elles doivent être passées à -``Zend\Soap\AutoDiscovery`` pour générer un fichier WSDL : - - .. code-block:: php - :linenos: - - $autodiscover = new Zend\Soap\AutoDiscover(); - $autodiscover->addFunction('function1'); - $autodiscover->addFunction('function2'); - $autodiscover->addFunction('function3'); - ... - $autodiscover->handle(); - - - -Les règles suivantes sont utilisées lors de la génération du fichier WSDL : - - - Le fichier WSDL généré décrit un service web de type RPC. - - - Le nom du service crée sera le nom du script analysé (utilisé). - - - *'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']* est utilisé comme *URI* pour rechercher le - fichier WSDL. - - Cet *URI* est aussi utilisé comme un espace de nom cible pour tous les noms du service (incluant les types - complexes décrits éventuellement). - - - Les fonctions sont encapsulées dans un `Port Type`_. - - *$functionName . 'Port'* est utilisé comme nom de Port Type. - - - Chaque fonction est enregistrée comme opération possible. - - - Chaque prototype de fonction génère des messages de requête/réponse correspondants. - - Une fonction peut avoir plusieurs prototypes si des paramètres sont optionnels. - - - -.. note:: - - **Important!** - - L'auto génération du fichier WSDL (avec auto découverte des fonctions) utilise les blocs de documentation de - *PHP* insérés par le développeur dans ses fonctions, afin de trouver les types retournés. De ce fait, pour - les types scalaires, c'est le seul moyen de les déterminer de manière sûre, et concernant les types de retour - des méthodes, c'est le seul moyen de les découvrir (PHP étant faiblement typé). - - Ceci signifie que documenter de manière correcte vos fonctions n'est pas seulement une bonne pratique, c'est - tout simplement essentiel pour partager vos fonctions en tant que services *SOAP* auto générés. - -.. _zend.soap.autodiscovery.datatypes: - -Types de donnée auto découverts -------------------------------- - -Les types de données d'entrée/sortie sont convertis en types spéciaux pour le réseau, suivant ces règles : - - - Chaînes strings <-> *xsd:string*. - - - Entiers *PHP* <-> *xsd:int*. - - - Flottants *PHP* (décimaux) <-> *xsd:float*. - - - Booléens *PHP* <-> *xsd:boolean*. - - - Tableaux *PHP* <-> *soap-enc:Array*. - - - Objets *PHP* <-> *xsd:struct*. - - - Classe *PHP* <-> basé sur la stratégie des types complexes (Voir : :ref:` - `) [#]_. - - - *type[]* or *object[]* (c'est-à-dire *int[]*) <-> basé sur la stratégie des types complexes - - - Void *PHP* <-> type vide. - - - Si le type n'est pas reconnu en tant que l'un de ceux-ci, alors *xsd:anyType* est utilisé. - -Où *xsd:* est l'espace "http://www.w3.org/2001/XMLSchema", *soap-enc:* est l'espace -"http://schemas.xmlsoap.org/soap/encoding/", *tns:* est "l'espace de nom cible" du service. - -.. _zend.soap.autodiscovery.wsdlstyles: - -Styles de liaisons WSDL ------------------------ - -WSDL offre différents mécanismes et styles de transport. Ceci affecte les balises *soap:binding* et *soap:body* -à l'intérieur de la section binding du WSDL. Différents clients ont différentes conditions quant aux options -qui sont vraiment utilisées. Par conséquent vous pouvez placer les styles avant d'appeler n'importe quelle -méthode *setClass* ou *addFunction* de la classe *AutoDiscover*. - - - - .. code-block:: php - :linenos: - - $autodiscover = new Zend\Soap\AutoDiscover(); - // Par défaut il s'agit de 'use' => 'encoded' - // et 'encodingStyle' => 'http://schemas.xmlsoap.org/soap/encoding/' - $autodiscover->setOperationBodyStyle(array('use' => 'literal', 'namespace' => 'http://framework.zend.com')); - - // Par défaut il s'agit de 'style' => 'rpc' - // et 'transport' => 'http://schemas.xmlsoap.org/soap/http' - $autodiscover->setBindingStyle(array('style' => 'document', 'transport' => 'http://framework.zend.com')); - ... - $autodiscover->addFunction('myfunc1'); - $autodiscover->handle(); - - - - - -.. _`WSDL`: http://www.w3.org/TR/wsdl -.. _`les types XSD`: http://www.w3.org/TR/xmlschema-2/ -.. _`Port Type`: http://www.w3.org/TR/wsdl#_porttypes - -.. [#] ``Zend\Soap\AutoDiscover`` sera créé avec la classe ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` en - tant qu'algorithme de détection pour les types complexes. Le premier paramètre du constructeur - AutoDiscover accepte toute stratégie de types complexes implémentant - ``Zend\Soap\Wsdl\Strategy\Interface`` ou une chaîne correspondant au nom de la classe. Pour une - compatibilité ascendante, avec ``$extractComplexType`` les variables booléennes sont analysées comme - avec Zend\Soap\Wsdl. Regardez le manuel :ref:`Zend\Soap\Wsdl sur l'ajout des types complexes - ` pour plus d'informations. diff --git a/docs/languages/fr/modules/zend.soap.client.rst b/docs/languages/fr/modules/zend.soap.client.rst deleted file mode 100644 index db4868219..000000000 --- a/docs/languages/fr/modules/zend.soap.client.rst +++ /dev/null @@ -1,155 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.client: - -Zend\Soap\Client -================ - -``Zend\Soap\Client`` est une classe destinée à simplifier l'interrogation de services *SOAP*. - -Cette classe peut être utilisée en mode WSDL ou non WSDL. - -Lorsque Zend\Soap\Client fonctionne en mode WSDL, il utilise le document WSDL pour définir les options de la -couche de transport des données. - -Le fichier WSDL est en général fournit par le service auquel vous souhaitez accéder. Si la description WSDL -n'est pas disponible, vous pouvez vouloir utiliser ``Zend\Soap\Client`` en mode non WSDL . Dans ce cas, toutes les -options du protocole devront être définies explicitement dans la classe ``Zend\Soap\Client``. - -.. _zend.soap.client.constructor: - -Constructeur de Zend\Soap\Client --------------------------------- - -Le constructeur de ``Zend\Soap\Client`` accepte 2 paramètres: - - - ``$wsdl``: l'URI du fichier WSDL. - - - ``$options``: options de création. - -Ces deux paramètres peuvent être insérés après construction, ceci grâce aux méthodes ``setWsdl($wsdl)`` et -``setOptions($options)``. - -.. note:: - - **Important!** - - Si vous utilisez Zend\Soap\Client en mode non WSDL, vous **devez** fournir les options 'location' et 'uri'. - -Les options suivantes sont reconnues: - - - 'soap_version' ('soapVersion') : version du protocole *SOAP* à utiliser (SOAP_1_1 ou *SOAP*\ _1_2). - - - 'classmap' ('classMap') : doit être utilisé pour faire correspondre des types WSDL à des classes *PHP*. - - Cette option doit être un tableau avec comme clés les types WSDL et comme valeurs les noms des classes - *PHP*. - - - 'encoding' : encodage interne des caractères (l'encodage externe est toujours UTF-8). - - - 'wsdl' : qui est équivalent à un appel à ``setWsdl($wsdlValue)``. - - Changer cette option peut faire basculer Zend\Soap\Client en mode WSDL ou non WSDL. - - - 'uri' : cible du service *SOAP* (requis pour le mode non WSDL, inusité en mode WSDL). - - - 'location' : l'URL à requêter (requis pour le mode non WSDL, inusité en mode WSDL). - - - 'style' : style de requête (inusité en mode WSDL): ``SOAP_RPC`` ou ``SOAP_DOCUMENT``. - - - 'use' : méthode d'encodage des messages (inusité en mode WSDL): ``SOAP_ENCODED`` ou ``SOAP_LITERAL``. - - - 'login' et 'password' : login et password pour l'authentification *HTTP*. - - - 'proxy_host', 'proxy_port', 'proxy_login', et 'proxy_password' : utilisés pour une connexion *HTTP* via un - proxy. - - - 'local_cert' et 'passphrase' : options d'authentification *HTTPS*. - - - 'compression' : options de compression ; c'est une combinaison entre ``SOAP_COMPRESSION_ACCEPT``, - ``SOAP_COMPRESSION_GZIP`` et ``SOAP_COMPRESSION_DEFLATE``, qui peuvent être utilisées de cette manière : - - .. code-block:: php - :linenos: - - // Accepte une response compressée - $client = new Zend\Soap\Client("some.wsdl", - array('compression' => SOAP_COMPRESSION_ACCEPT)); - ... - // Compresse les requêtes avec gzip et un taux de 5 - $client = new Zend\Soap\Client("some.wsdl", - array('compression' => - SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5)); - ... - // Compresse les requêtes en utilisant deflate - $client = new Zend\Soap\Client("some.wsdl", - array('compression' => - SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE)); - - - - - -.. _zend.soap.client.calls: - -Effectuer des requêtes SOAP ---------------------------- - -Lorsqu'un objet ``Zend\Soap\Client`` est crée, nous sommes prêts à créer des requêtes *SOAP*. - -Chaque méthode du service Web est liée à une méthode virtuelle de l'objet ``Zend\Soap\Client``, qui s'utilise -de manière tout à fait classique comme *PHP* le définit. - -Voici un exemple : - - .. code-block:: php - :linenos: - - ... - //**************************************************************** - // Code du serveur - //**************************************************************** - // class MyClass { - // /** - // * Cette méthode utilise ... - // * - // * @param integer $inputParam - // * @return string - // */ - // public function method1($inputParam) { - // ... - // } - // - // /** - // * Cette méthode utilise ... - // * - // * @param integer $inputParam1 - // * @param string $inputParam2 - // * @return float - // */ - // public function method2($inputParam1, $inputParam2) { - // ... - // } - // - // ... - // } - // ... - // $server = new Zend\Soap\Server(null, $options); - // $server->setClass('MyClass'); - // ... - // $server->handle(); - // - //**************************************************************** - // Fin du code du serveur - //**************************************************************** - - $client = new Zend\Soap\Client("MyService.wsdl"); - ... - // $result1 est une chaine - $result1 = $client->method1(10); - ... - // $result2 est un flottant - $result2 = $client->method2(22, 'some string'); - - - - diff --git a/docs/languages/fr/modules/zend.soap.server.rst b/docs/languages/fr/modules/zend.soap.server.rst deleted file mode 100644 index 43f14fe53..000000000 --- a/docs/languages/fr/modules/zend.soap.server.rst +++ /dev/null @@ -1,290 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.server: - -Zend\Soap\Server -================ - -La classe ``Zend\Soap\Server`` a été créée pour simplifier la création d'un service Web *SOAP* en *PHP*. - -Elle peut être utilisée en mode WSDL ou non-WSDL, et elle utilise des fonctions ou des classes pour définir le -service Web rendu. - -Lorsque le composant ``Zend\Soap\Server`` fonctionne en mode WSDL, il utilise le document WSDL pour décrire le -comportement des objets du serveur ainsi que les options de transport vers les clients. - -Un document WSDL peut être auto-généré en utilisant :ref:`le composant Zend\Soap\AutoDiscovery -`, ou alors construit manuellement avec :ref:`la classe Zend\Soap\Wsdl -` ou tout autre outil de génération de *XML* - -Si le mode non-WSDL est utilisé, alors toutes les options du protocole doivent être configurées. - -.. _zend.soap.server.constructor: - -Constructeur de Zend\Soap\Server --------------------------------- - -Le constructeur de ``Zend\Soap\Server`` s'utilise différemment selon que l'on fonctionne en mode WSDL ou non. - -.. _zend.soap.server.constructor.wsdl_mode: - -Constructeur de Zend\Soap\Server en mode WSDL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Le constructeur de ``Zend\Soap\Server`` prend 2 paramètres optionnel en mode WSDL: - - . ``$wsdl``, l'URI permettant l'accès au fichier WSDL [#]_. - - . ``$options``- options de création des objets serveurs [#]_. - - Les options suivantes sont reconnues en mode WSDL : - - - "soap_version" ("soapVersion") : version du protocole *SOAP* à utiliser (SOAP_1_1 ou *SOAP*\ _1_2). - - - "actor" : l'URI du serveur *SOAP*. - - - "classmap" ("classMap") : utilisé pour faire correspondre des types WSDL à des classes *PHP*. - - L'option doit être un tableau avec pour clés les types WSDL et pour valeur les classes *PHP* - correspondantes. - - - "encoding" : encodage interne des caractères (l'encodage externe est toujours UTF-8). - - - "wsdl" : équivalent à un appel à ``setWsdl($wsdlValue)`` - - - - - -.. _zend.soap.server.wsdl_mode: - -Constructeur de Zend\Soap\Server en mode non-WSDL -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Le premier paramètre du constructeur **doit** être mis à la valeur ``NULL`` si vous voulez utiliser -``Zend\Soap\Server`` en mode non-WSDL. - -Vous devez aussi spécifier "uri" dans ce cas (voir juste après). - -Le second paramètre de constructeur est un tableau (``$options``) d'options permettant la création de l'objet -serveur *SOAP*. [#]_. - -Les options suivantes sont reconnues en mode non-WSDL : - - - "soap_version" ("soapVersion") : version *SOAP* à utiliser (SOAP_1_1 ou *SOAP*\ _1_2). - - - "actor" : l'URI du serveur *SOAP*. - - - "classmap" ("classMap") : utilisé pour faire correspondre des types WSDL à des classes *PHP*. - - L'option doit être un tableau avec pour clés les types WSDL et pour valeur les classes *PHP* - correspondantes. - - - "encoding" : encodage interne des caractères (l'encodage externe est toujours UTF-8). - - - "wsdl" : équivalent à un appel à *setWsdl($wsdlValue).* - - - -.. _zend.soap.server.api_define_methods: - -Méthodes de définitions de l'API du service -------------------------------------------- - -Il existe 2 manières de déclarer l'API de votre serveur *SOAP*. - -La première consiste à attacher des classes à l'objet ``Zend\Soap\Server``, celles-ci devront alors décrire -l'API du service en totalité : - - .. code-block:: php - :linenos: - - ... - class MyClass { - /** - * Cette méthode accepte ... - * - * @param integer $inputParam - * @return string - */ - public function method1($inputParam) { - ... - } - - /** - * Cette méthode accepte ... - * - * @param integer $inputParam1 - * @param string $inputParam2 - * @return float - */ - public function method2($inputParam1, $inputParam2) { - ... - } - - ... - } - ... - $server = new Zend\Soap\Server(null, $options); - // Connecte la classe au serveur Soap - $server->setClass('MyClass'); - // Connecte un objet déjà initialisé au serveur Soap - $server->setObject(new MyClass()); - ... - $server->handle(); - - - - .. note:: - - **Important!** - - Vous devriez complètement décrire chaque méthode grâce aux blocs de commentaires PHPDoc dans le cas où - vous souhaitez utiliser l'auto découverte du service pour préparer le WSDL correspondant. - - - -La seconde manière de décrire l'API de votre service Web est d'utiliser des fonctions PHP conjointement avec les -méthodes ``addFunction()`` ou ``loadFunctions()``: - - .. code-block:: php - :linenos: - - ... - /** - * Cette fonction ... - * - * @param integer $inputParam - * @return string - */ - function function1($inputParam) { - ... - } - - /** - * Cette fonction ... - * - * @param integer $inputParam1 - * @param string $inputParam2 - * @return float - */ - function function2($inputParam1, $inputParam2) { - ... - } - ... - $server = new Zend\Soap\Server(null, $options); - $server->addFunction('function1'); - $server->addFunction('function2'); - ... - $server->handle(); - - - -.. _zend.soap.server.request_response: - -Gestion des objets de requête et de réponse -------------------------------------------- - -.. note:: - - **Avancée** - - Cette section décrit la gestion avancée des requêtes et réponses *SOAP* et pourra être évitée. - -Le composant Zend\Soap\Server effectue des requêtes et récupère des réponses, ceci automatiquement. Il est -possible d'intercepter la requête/réponse pour ajouter du pré ou post processus. - -.. _zend.soap.server.request_response.request: - -Requête -^^^^^^^ - -La méthode ``Zend\Soap\Server::handle()`` utilise la requête depuis le flux d'entrée standard ('php://input'). -Le comportement peut être changé en passant des paramètres à la méthode ``handle()`` ou en spécifiant sa -propre requête grâce à la méthode ``setRequest()``: - - .. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - // Affecte une requête personnalisée - $server->handle($request); - ... - // Affecte une requête personnalisée - $server->setRequest(); - $server->handle(); - - - -Un objet de requête peut être représenté de plusieurs manières différentes : - - - DOMDocument (casté en *XML*) - - - DOMNode (le DOMDocument attaché est extrait et casté en *XML*) - - - SimpleXMLElement (casté en *XML*) - - - stdClass (\__toString() est appelée et son contenu est vérifié comme *XML* valide) - - - chaînes de caractères (vérifiée comme *XML* valide) - - - -La dernière requête utilisée et traitée peut être récupérée en utilisant la méthode ``getLastRequest()``: - - .. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - $server->handle(); - $request = $server->getLastRequest(); - - - -.. _zend.soap.server.request_response.response: - -Réponse -^^^^^^^ - -``Zend\Soap\Server::handle()`` émet automatiquement la réponse vers le flux standard de sortie. Ce comportement -peut être changé en utilisant ``setReturnResponse()`` avec une valeur ``TRUE`` ou ``FALSE`` en paramètre. [#]_. -La réponse générée par ``handle()`` est alors retournée et non plus émise. - - .. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - // Récupère la réponse plutôt que de l'émettre - $server->setReturnResponse(true); - ... - $response = $server->handle(); - ... - - - -Autrement, la dernière réponse peut être récupérer avec la méthode ``getLastResponse()``: - - .. code-block:: php - :linenos: - - ... - $server = new Zend\Soap\Server(...); - ... - $server->handle(); - $response = $server->getLastResponse(); - ... - - - - - -.. [#] Peut être spécifié plus tard avec la méthode ``setWsdl($wsdl)`` -.. [#] Peut être spécifié plus tard avec la méthode ``setOptions($options)`` -.. [#] Les options se configurent aussi plus tard, grâce à la méthode ``setOptions($options)`` -.. [#] L'état actuel du drapeau de retour de la réponse peut être vérifié via la méthode - ``setReturnResponse()`` sans paramètre. \ No newline at end of file diff --git a/docs/languages/fr/modules/zend.soap.wsdl.rst b/docs/languages/fr/modules/zend.soap.wsdl.rst deleted file mode 100644 index c00265f0a..000000000 --- a/docs/languages/fr/modules/zend.soap.wsdl.rst +++ /dev/null @@ -1,341 +0,0 @@ -.. EN-Revision: none -.. _zend.soap.wsdl: - -WSDL -==== - -.. note:: - - La classe ``Zend\Soap\Wsdl`` est utilisée par le composant Zend\Soap\Server pour manipuler des documents WSDL. - Néanmoins, vous pouvez vous-même utiliser les services fournis par cette classe pour vos propres besoins. La - classe Zend\Soap\Wsdl contient à la fois un analyseur et un constructeur de documents WSDL. - - Si vous ne voulez pas l'utiliser pour vos propres besoins, vous pouvez alors passer cette section de la - documentation. - -.. _zend.soap.wsdl.constructor: - -Constructeur Zend\Soap\Wsdl ---------------------------- - -Le constructeur de ``Zend\Soap\Wsdl`` prend 3 paramètres : - - . ``$name``- nom du service Web décrit. - - . ``$uri``-*URI* d'accès au fichier WSDL. (Une référence dans le système de fichier local est possible.) - - . ``$strategy``- identifiant optionnel pour identifier la détection de stratégie des types complexes. Ceci est - un booléen ``$extractComplexTypes`` avant la version 1.7 et peut toujours être paramétrer via un booléen - pour la compatibilité ascendante. Par défaut le comportement de détection de la 1.6 est activé. Pour avoir - de plus amples informations concernant les stratégies de détection des types complexes, lisez : :ref:` - `. - - - -.. _zend.soap.wsdl.addmessage: - -addMessage() ------------- - -``addMessage($name, $parts)`` ajoute un message de description au document WSDL (/definitions/message de -l'élément). - -Chaque message correspond à une méthode en terme de fonctionnalité de ``Zend\Soap\Server`` et -``Zend\Soap\Client``. - -Le paramètre ``$name`` représente le nom du message. - -Le paramètre ``$parts`` est un tableau de paramètre des messages décrivant les paramètres d'appel *SOAP*. Le -tableau est associatif: 'nom du paramètre' (nom du paramètre d'appel *SOAP*) => 'type du paramètre'. - -La correspondance de types est effectuée grâce à ``addTypes()`` et ``addComplexType()``\ (voyez après). - -.. note:: - - Les paramètres de messages peuvent être soit "element", soit "type" (voyez - http://www.w3.org/TR/wsdl#_messages). - - "element" doit correspondre à un élément de définition de type. "type" correspond à une entrée - complexType. - - Tous les types standards XSD possèdent une définition "element" et "complexType" (Voyez - http://schemas.xmlsoap.org/soap/encoding/). - - Tous les éléments non standards, qui doivent être ajoutés avec la méthode - ``Zend\Soap\Wsdl::addComplexType()``, sont décrits en utilisant un noeud "complexType" décrits dans la section - "/definitions/types/schema/" du document WSDL. - - Ainsi, la méthode ``addMessage()`` utilise toujours un attribut "type" pour décrire des types. - -.. _zend.soap.wsdl.add_port_type: - -addPortType() -------------- - -``addPortType($name)`` ajoute un nouveau type de portage au document WSDL (/definitions/portType). - -Ceci fait la jointure entre des méthodes du service décrites en tant qu'implémentations de Zend\Soap\Server. - -Voyez http://www.w3.org/TR/wsdl#_porttypes pour plus de détails. - -.. _zend.soap.wsdl.add_port_operation: - -addPortOperation() ------------------- - -*addPortOperation($portType, $name, $input = false, $output = false, $fault = false)* ajoute des définitions de -portage au portage défini dans le document WSDL (/definitions/portType/operation). - -Chaque opération de portage correspond à une méthode de classe (si le Web Service est basé sur une classe) ou -à une fonction (si le Web Service est basé sur des fonctions), ceci en terme d'implémentation de -Zend\Soap\Server. - -Cette méthode ajoute aussi les messages d'opération correspondants aux portages, ceci dépend des paramètres -``$input``, ``$output`` and ``$fault``. - - .. note:: - - Zend\Soap\Server génère 2 messages pour chaque opération de portage lorsque le service est décrit au - travers de la classe ``Zend\Soap\Server``: - - - Le message d'entrée nommé *$methodName . 'Request'*. - - - Les message de sortie nommé *$methodName . 'Response'*. - - - - - -Voyez http://www.w3.org/TR/wsdl#_request-response pour les détails. - -.. _zend.soap.wsdl.add_binding: - -addBinding() ------------- - -``addBinding($name, $portType)`` ajoute de nouvelles correspondances (bindings) au document WSDL -(/definitions/binding). - -Le noeud du document WSDL "binding" définit le format du message et les détails du protocole pour les opérations -et messages définis par un portage "portType" particulier (voyez http://www.w3.org/TR/wsdl#_bindings). - -La méthode crée le noeud de correspondance et le retourne. Il peut alors être utilisé. - -L'implémentation de Zend\Soap\Server utilise le nom *$serviceName . "Binding"* pour la correspondance ("binding") -de l'élément du document WSDL. - -.. _zend.soap.wsdl.add_binding_operation: - -addBindingOperation() ---------------------- - -*addBindingOperation($binding, $name, $input = false, $output = false, $fault = false)* ajoute une opération à -l'élément de correspondance avec le nom spécifié (/definitions/binding/operation). - -Cette méthode prend un objet *XML_Tree_Node* tel que retourné par ``addBinding()``, en paramètre (``$binding``) -pour ajouter un élément "operation" avec des entrées input/output/false dépendantes des paramètres -spécifiés. - -``Zend\Soap\Server`` ajoute les correspondances pour chaque méthode du Web Service avec des entrées et sorties, -définissant l'élément "soap:body" comme ** - -Voyez les détails à http://www.w3.org/TR/wsdl#_bindings. - -.. _zend.soap.wsdl.add_soap_binding: - -addSoapBinding() ----------------- - -*addSoapBinding($binding, $style = 'document', $transport = 'http://schemas.xmlsoap.org/soap/http')* ajoute des -correspondances (bindings) *SOAP* ("soap:binding") à l'élément (déjà lié à un portage de type) avec le style -et le transport spécifié (``Zend\Soap\Server`` utilise le style RPC sur *HTTP*). - -L'élément "/definitions/binding/soap:binding" est alors utilisé pour spécifier que la correspondance est -relative au format du protocole *SOAP*. - -Voyez http://www.w3.org/TR/wsdl#_bindings pour les détails. - -.. _zend.soap.wsdl.add_soap_operation: - -addSoapOperation() ------------------- - -``addSoapOperation($binding, $soap_action)`` ajoute une opération *SOAP* ("soap:operation") à l'élément de -correspondance avec l'action spécifiée. L'attribut "style" de l'élément "soap:operation" n'est pas utilisé -alors que le modèle de programmation (RPC-oriented ou document-oriented) devrait utiliser la méthode -``addSoapBinding()`` - -L'attribut "soapAction" de l'élément "/definitions/binding/soap:operation" spécifie la valeur de l'en-tête -*SOAP*\ Action pour l'opération. Cet attribut est requis pour *SOAP* sur *HTTP* et **ne doit pas** être -renseigné pour les autres modes de transports. - -``Zend\Soap\Server`` utilise *$serviceUri . '#' . $methodName* pour le nom de l'action *SOAP*. - -Voyez http://www.w3.org/TR/wsdl#_soap:operation pour plus de détails. - -.. _zend.soap.wsdl.add_service: - -addService() ------------- - -``addService($name, $port_name, $binding, $location)`` ajoute un élément "/definitions/service" au document WSDL -avec le nom du Web Service spécifié, le nom du portage, la correspondance, et l'adresse. - -WSDL 1.1 autorise d'avoir plusieurs types de portage par service. Cette particularité n'est pas utilisée dans -``Zend\Soap\Server`` et est non supportée par la classe ``Zend\Soap\Wsdl``. - -Utilisations de ``Zend\Soap\Server``: - - - *$name . 'Service'* comme nom du Web Service, - - - *$name . 'Port'* comme nom de portage des types, - - - *'tns:' . $name . 'Binding'* [#]_ comme nom de la correspondance, - - - l'URI du script [#]_ en tant qu'URI du service pour les Web Service utilisant des classes. - -où ``$name`` est un nom de classe pour le Web Service utilisant des classes, ou un nom de script pour le Web -Service qui utilise des fonctions. - -Voyez http://www.w3.org/TR/wsdl#_services pour les détails. - -.. _zend.soap.wsdl.types: - -Correspondance de type ----------------------- - -Le WSDL de Zend_Soap utilise les correspondances suivantes pour faire correspondre les type *SOAP* à des types -*PHP*: - - - chaînes *PHP* <-> *xsd:string*. - - - entiers *PHP* <-> *xsd:int*. - - - flottants *PHP* <-> *xsd:float*. - - - booléens *PHP* <-> *xsd:boolean*. - - - tableaux *PHP* <-> *soap-enc:Array*. - - - objets *PHP* <-> *xsd:struct*. - - - Classe *PHP* <-> basé sur la stratégie des types complexes (Voir : :ref:` - `) [#]_. - - - Type *PHP* vide <-> void. - - - Si le type na aucune correspondance avec les valeurs ci-dessus, alors *xsd:anyType* est utilisé. - -Où *xsd:* est l'espace de noms "http://www.w3.org/2001/XMLSchema", *soap-enc:* est l'espace de noms -"http://schemas.xmlsoap.org/soap/encoding/", *tns:* est un "espace de noms cible" pour le service. - -.. _zend.soap.wsdl.types.retrieve: - -Récupérer des infos sur les types -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``getType($type)`` peut être utilisée pour récupérer la correspondance d'un type PHP spécifié : - - .. code-block:: php - :linenos: - - ... - $wsdl = new Zend\Soap\Wsdl('My_Web_Service', $myWebServiceUri); - - ... - $soapIntType = $wsdl->getType('int'); - - ... - class MyClass { - ... - } - ... - $soapMyClassType = $wsdl->getType('MyClass'); - - - -.. _zend.soap.wsdl.types.add_complex: - -Ajouter des infos sur les types complexes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -``addComplexType($type)`` est utilisée pour ajouter des types complexes (classes *PHP*) à un document WSDL. - -C'est automatiquement utilisé par la méthode ``getType()`` pour ajouter les types complexes des paramètres de -méthodes ou des types retournés. - -Sa détection et son algorithme de construction est basé sur la détection de stratégie des types complexes -couramment active. Vous pouvez paramétrer la stratégie de détection soit en spécifiant le nom de classe sous la -forme d'une chaîne de caractères ou une instance implémentant ``Zend\Soap\Wsdl\Strategy\Interface`` en tant que -troisième paramètre du constructeur ou en utilisant la fonction ``setComplexTypeStrategy($strategy)`` de -``Zend\Soap\Wsdl``. Les stratégies de détection suivantes existent couramment : - -- la classe ``Zend\Soap\Wsdl\Strategy\DefaultComplexType``: activé par défaut (quand aucun troisième paramètre - n'est fourni). Itère parmi les attributs publics d'un type de classe et les enregistre en tant que sous-types - d'un type d'objet complexe. - -- la classe ``Zend\Soap\Wsdl\Strategy\AnyType``: caste tous les types complexes en un type XSD simple xsd:anyType. - Attention ce raccourci pour la détection des types complexes peut probablement seulement être géré avec des - langages faiblement typés comme le *PHP*. - -- la classe ``Zend\Soap\Wsdl\Strategy\ArrayOfTypeSequence``: cette stratégie permet de spécifier les paramètres - de retour de type : *int[]* ou *string[]*. A partir de Zend Framework 1.9, il peut gérer des types *PHP* simples - comme int, string, boolean, float ainsi que des objets ou des tableaux d'objets. - -- la classe ``Zend\Soap\Wsdl\Strategy\ArrayOfTypeComplex``: cette stratégie permet de détecter des tableaux - complexes d'objets. Les types d'objets sont détectés sur la base de - ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` et un tableau enveloppe cette définition. - -- la classe ``Zend\Soap\Wsdl\Strategy\Composite``: cette stratégie peut combiner toutes les stratégies en - connectant les types complexes *PHP* (nom de classe) à la stratégie désirée grâce à la méthode - ``connectTypeToStrategy($type, $strategy)``. Une carte de correspondance complète de types peut être fourni au - constructeur sous la forme d'un tableau de paires ``$type``-> ``$strategy``. Le second paramètre spécifie la - stratégie par défaut si un type inconnu est ajouté. La valeur par défaut de ce paramètre est la stratégie - ``Zend\Soap\Wsdl\Strategy\DefaultComplexType``. - -la méthode ``addComplexType()`` crée un élément "*/definitions/types/xsd:schema/xsd:complexType*" pour chaque -type complexe décrit avec le nom d'une classe *PHP* spécifiée. - -Les propriétés des classes **doivent** posséder un bloc de documentation avec le type *PHP* en question, afin -que la propriété soit incluse dans la description WSDL. - -``addComplexType()`` vérifie sur le type est déjà décrit dans la section des types du document WSDL. - -Ceci évite les duplications et récursions si cette méthode est appelée plus d'une fois. - -Voyez http://www.w3.org/TR/wsdl#_types pour plus de détails. - -.. _zend.soap.wsdl.add_documentation: - -addDocumentation() ------------------- - -``addDocumentation($input_node, $documentation)`` ajoute de la documentation lisible ("human readable") grâce à -l'élément optionnel "wsdl:document". - -L'élément "/definitions/binding/soap:binding" est utilisé pour dire que la correspondance est liée au format du -protocole *SOAP*. - -Voyez http://www.w3.org/TR/wsdl#_documentation pour les détails. - -.. _zend.soap.wsdl.retrieve: - -Récupérer un document WSDL finalisé ------------------------------------ - -``toXML()``, ``toDomDocument()`` et *dump($filename = false)* peuvent être utilisées pour récupérer un document -WSDL sous forme de *XML*, de structure DOM, ou de fichier. - - - - -.. [#] *'tns:' namespace* est l'URI du script (*'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']*). -.. [#] *'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']* -.. [#] ``Zend\Soap\AutoDiscover`` sera créé avec la classe ``Zend\Soap\Wsdl\Strategy\DefaultComplexType`` en - tant qu'algorithme de détection pour les types complexes. Le premier paramètre du constructeur - AutoDiscover accepte toute stratégie de types complexes implémentant - ``Zend\Soap\Wsdl\Strategy\Interface`` ou une chaîne correspondant au nom de la classe. Pour une - compatibilité ascendante, avec ``$extractComplexType`` les variables booléennes sont analysées comme - avec Zend\Soap\Wsdl. Regardez le manuel :ref:`Zend\Soap\Wsdl sur l'ajout des types complexes - ` pour plus d'informations. \ No newline at end of file diff --git a/docs/languages/fr/modules/zend.tag.cloud.rst b/docs/languages/fr/modules/zend.tag.cloud.rst deleted file mode 100644 index 927bca1fb..000000000 --- a/docs/languages/fr/modules/zend.tag.cloud.rst +++ /dev/null @@ -1,115 +0,0 @@ -.. EN-Revision: none -.. _zend.tag.cloud: - -Zend\Tag\Cloud -============== - -``Zend\Tag\Cloud`` est la partie qui s'occupe du rendu dans ``Zend_Tag``. par défaut, elle utilise un ensemble de -décorateurs HTML , ce qui permet de créer des nuages de tags pour un site, mais elle met aussi à votre -disposition 2 classes abstraites vous permettant de créer vos propres rendus, par exemple pour créer des tags -rendus en *PDF*. - -Vous pouvez instancier et configurer ``Zend\Tag\Cloud`` de manière classique, ou via un tableau ou un objet -``Zend_Config``. Voici les options disponibles: - -- *cloudDecorator*\  : défini le décorateur du nuage. Ceci peut être un objet, un nom de classe qui sera - chargée par pluginloader, une instance de ``Zend\Tag\Cloud\Decorator\Cloud`` ou un tableau contenant les clés - *decorator* et optionnellement *options*, qui est elle-même un tableau passé comme options au constructeur du - décorateur. - -- *tagDecorator*\  : le décorateur d'un tag individuel. Ceci peut être un objet, un nom de classe qui sera - chargée par pluginloader, une instance de ``Zend\Tag\Cloud\Decorator\Cloud`` ou un tableau contenant les clés - *decorator* et optionnellement *options*, qui est elle-même un tableau passé comme options au constructeur du - décorateur. - -- *pluginLoader*\  : un chargeur de classe à utiliser. Doit implémenter l'interface - ``Zend\Loader\PluginLoader\Interface``. - -- *prefixPath*\  : préfixes de chemins à ajouter au chargeur de classes. Doit être un tableau contenant les - préfixes et les chemins. Les éléments invalides seront ignorés. - -- *itemList*\  : une liste d'entités à utiliser. Doit être une instance de ``Zend\Tag\ItemList``. - -- *tags*\  : une liste de tags à assigner au nuage. Chacun doit implémenter ``Zend\Tag\Taggable`` ou être un - tableau qui pourra être utilisé pour instancier ``Zend\Tag\Item``. - -.. _zend.tag.cloud.example.using: - -.. rubric:: Utiliser Zend\Tag\Cloud - -Cet exemple illustre les manipulations de base pour créer un nuage de tags, ajouter des tags et afficher le rendu. - -.. code-block:: php - :linenos: - - // Crée un nuage et assigne des tags statiques - $cloud = new Zend\Tag\Cloud(array( - 'tags' => array( - array('title' => 'Code', 'weight' => 50, - 'params' => array('url' => '/tag/code')), - array('title' => 'Zend Framework', 'weight' => 1, - 'params' => array('url' => '/tag/zend-framework')), - array('title' => 'PHP', 'weight' => 5, - 'params' => array('url' => '/tag/php')), - ) - )); - - // Rendu du nuage - echo $cloud; - -Ceci affichera le nuage de tags, avec les polices par défaut. - -.. _zend.tag.cloud.decorators: - -Decorateurs ------------ - -``Zend\Tag\Cloud`` a besoin de 2 types de décorateurs afin de rendre le nuage. Un décorateur pour rendre chacun -des tags, et un décorateur pour rendre le nuage lui-même. ``Zend\Tag\Cloud`` propose un décorateur par défaut -qui formate le nuage en HTML. Il utilise par défaut des listes ul/li et des tailles de polices différentes selon -les poids des tags. - -.. _zend.tag.cloud.decorators.htmltag: - -Décorateur HTML -^^^^^^^^^^^^^^^ - -Le décorateur HTML va rendre chaque tag dans un élément ancré, entouré d'un élément li. L'ancre est fixe et -ne peut être changée, mais l'élément peut lui l'être. - -.. note:: - - **Paramètre d'URL** - - Une ancre étant ajoutée à chaque tag, vous devez spécifier une *URL* pour chacun d'eux. - -Le décorateur de tags peut utiliser des tailles de police différentes pour chaque ancre, ou pour chaque classe de -liste. Les options suivantes sont disponibles: - -- *fontSizeUnit*\  : définit l'unité utilisée dans la taille des polices. em, ex, px, in, cm, mm, pt, pc et %. - -- *minFontSize*\  : Taille minimale de la police (poids le plus faible) (doit être un entier). - -- *maxFontSize*\  : Taille maximale de la police (poids le plus fort) (doit être un entier). - -- *classList*\  : un tableau de classes utilisées dans les tags. - -- *htmlTags*\  : un tableau de tags HTML entourant l'ancre. Chaque élément peut être une chaîne de - caractères, utilisée comme type d'élément, ou un tableau contenant une liste d'attributs pour l'élément. La - clé du tableau est alors utilisée pour définir le type de l'élément. - -.. _zend.tag.cloud.decorators.htmlcloud: - -Décorateur HTML de nuage -^^^^^^^^^^^^^^^^^^^^^^^^ - -Le décorateur HTML de nuage va entourer les tags avec une balise ul. Vous pouvez changer la balise, en utiliser -plusieurs, utiliser un séparateur. Voici les options: - -- *separator*\  : définit le séparateur utilisé entre chaque tag. - -- *htmlTags*\  : un tableau de balises HTML entourant chaque tag. Chaque élément peut être une chaîne de - caractères, utilisée comme type d'élément, ou un tableau contenant une liste d'attributs pour l'élément. La - clé du tableau est alors utilisée pour définir le type de l'élément. - - diff --git a/docs/languages/fr/modules/zend.tag.introduction.rst b/docs/languages/fr/modules/zend.tag.introduction.rst deleted file mode 100644 index 5bf4cff81..000000000 --- a/docs/languages/fr/modules/zend.tag.introduction.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. EN-Revision: none -.. _zend.tag.introduction: - -Introduction -============ - -``Zend_Tag`` est une suite de composants permettant de manipuler des entités taguables. Ce composant propose 2 -classes dans ce but, ``Zend\Tag\Item`` et ``Zend\Tag\ItemList``. Aussi, l'interface ``Zend\Tag\Taggable`` vous -permet d'utiliser vos modèles dans des tags avec ``Zend_Tag``. - -``Zend\Tag\Item`` est un composant proposant les fonctionnalités basiques pour traiter des tags dans ``Zend_Tag``. -Une entités taguables consiste en un titre et un poids (nombre d'occurrences). Il existe aussi d'autres -paramètres utilisés par ``Zend_Tag``. - -Pour grouper plusieurs entités ensemble, ``Zend\Tag\ItemList`` propose un itérateur de tableau et des fonctions -pour calculer le poids absolu des valeurs en fonction du poids de chaque entité. - -.. _zend.tag.example.using: - -.. rubric:: Utiliser Zend_Tag - -Cet exemple montre comment créer une liste de tags en pondérant chacun d'eux. - -.. code-block:: php - :linenos: - - // Crée la liste - $list = new Zend\Tag\ItemList(); - - // Ajoute des entités dans la liste - $list[] = new Zend\Tag\Item(array('title' => 'Code', 'weight' => 50)); - $list[] = new Zend\Tag\Item(array('title' => 'Zend Framework', 'weight' => 1)); - $list[] = new Zend\Tag\Item(array('title' => 'PHP', 'weight' => 5)); - - // Valeurs absolues des entités - $list->spreadWeightValues(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); - - // Sortie - foreach ($list as $item) { - printf("%s: %d\n", $item->getTitle(), $item->getParam('weightValue')); - } - -Ceci va afficher les 3 entités Code, Zend Framework et *PHP* avec les valeurs absolues 10, 1 et 2. - - diff --git a/docs/languages/fr/modules/zend.text.figlet.rst b/docs/languages/fr/modules/zend.text.figlet.rst deleted file mode 100644 index 632c39419..000000000 --- a/docs/languages/fr/modules/zend.text.figlet.rst +++ /dev/null @@ -1,87 +0,0 @@ -.. EN-Revision: none -.. _zend.text.figlet: - -Zend\Text\Figlet -================ - -``Zend\Text\Figlet`` est un composant qui permet aux développeurs de créer des textes dénommés FIGlet. Un texte -FIGlet test une chaîne de caractères, qui est représenté en "ASCII-art". FIGlet utilise une format de police -spécial , nommée FLT (FigLet Font). Par défaut, une police standard est fourni avec ``Zend\Text\Figlet``, mais -vous pouvez ajouter des polices additionnels à http://www.figlet.org. - -.. note:: - - **Polices compressée** - - ``Zend\Text\Figlet`` supporte les polices compressées en gzip. Ceci veut dire que vous pouvez prendre un - fichier *.flf* et le gzipper. Pour permettre à ``Zend\Text\Figlet`` de les reconnaître, les polices gzippées - doivent avoir l'extension *.gz*. De plus, pour pouvoir utiliser les polices compressées, vous devez activer - l'extension GZIP de *PHP*. - -.. note:: - - **Encodage** - - ``Zend\Text\Figlet`` considère que vos chaînes sont encodées en UTF-8 par défaut. Si ce n'est pas le cas, - vous pouvez fournir le type d'encodage des caractères en tant que second paramètre à la méthode - ``render()``. - -Il existe plusieurs options pour un FIGlet. Quand vous instanciez ``Zend\Text\Figlet``, vous pouvez les fournir -sous la forme d'un tableau ou d'un objet ``Zend_Config``. - - - *font*: défini la police utilisée pour le rendu. Par défaut la police incorporé sera utilisée. - - - *outputWidth*: défini la largeur maximum de la chaîne résultat. Ceci est utilisé pour le retour à la - ligne automatique ainsi que pour la justification. Attention cependant à de trop petites valeurs, qui - pourraient induire un comportement indéfini. La valeur par défaut est 80. - - - *handleParagraphs*: un booléen qui indique, comment les nouvelles lignes sont gérées. Réglé à ``TRUE``, - les nouvelles lignes uniques sont ignorées et traitées comme un espace unique. Seules des nouvelles lignes - multiples seront gérées comme telles. La valeur par défaut est ``FALSE``. - - - *justification*: peut être une des valeurs de type ``Zend\Text\Figlet::JUSTIFICATION_*``. Il existe - ``JUSTIFICATION_LEFT``, ``JUSTIFICATION_CENTER`` et ``JUSTIFICATION_RIGHT``. La justification par défaut est - défini par la valeur de *rightToLeft*. - - - *rightToLeft*: défini la direction d'écriture du texte. Peut être - ``Zend\Text\Figlet::DIRECTION_LEFT_TO_RIGHT`` ou ``Zend\Text\Figlet::DIRECTION_RIGHT_TO_LEFT``. Par défaut le - réglage du fichier de police est utilisé. Quand aucune justification n'est définie, un texte écrit de - droite à gauche est automatiquement aligné à droite. - - - *smushMode*: un entier qui définit comme chaque caractère est fusionné avec les autres. Peut être la somme - de multiple valeurs de type ``Zend\Text\Figlet::SM_*``. Il existe les modes de fusion suivant : SM_EQUAL, - SM_LOWLINE, SM_HIERARCHY, SM_PAIR, SM_BIGX, SM_HARDBLANK, SM_KERN et SM_SMUSH. Une valeur de 0 ne désactive - pas entièrement la fusion, mais force la valeur SM_KERN, tandis que la valeur de -1 la désactive. Une - explication des différents modes de fusion peut être trouvé `ici`_. Par défaut le réglage de la police - est utilisé. L'option du mode de fusion est normalement seulement utilisé par les concepteurs de police - testant les différents mode de disposition d'une nouvelle police. - - - -.. _zend.text.figlet.example.using: - -.. rubric:: Utilisation Zend\Text\Figlet - -Cet exemple illustre une utilisation basique de ``Zend\Text\Figlet`` pour créer une texte FIGlet simple : - -.. code-block:: php - :linenos: - - $figlet = new Zend\Text\Figlet(); - echo $figlet->render('Zend'); - -En considérant que vous utilisez une police à espacement fixe, vous obtiendrez quelque chose comme ceci : - -.. code-block:: text - :linenos: - - ______ ______ _ __ ______ - |__ // | ___|| | \| || | __ \\ - / // | ||__ | ' || | | \ || - / //__ | ||___ | . || | |__/ || - /_____|| |_____|| |_|\_|| |_____// - `-----`' `-----` `-` -`' -----` - - - -.. _`ici`: http://www.jave.de/figlet/figfont.txt diff --git a/docs/languages/fr/modules/zend.text.table.rst b/docs/languages/fr/modules/zend.text.table.rst deleted file mode 100644 index 75db2a845..000000000 --- a/docs/languages/fr/modules/zend.text.table.rst +++ /dev/null @@ -1,111 +0,0 @@ -.. EN-Revision: none -.. _zend.text.table.introduction: - -Zend\Text\Table -=============== - -``Zend\Text\Table`` est un composant pour créer à la volée des tables de type texte avec différents -décorateurs. Ceci peut être utile, si vous souhaitez soit envoyé des données structurées dans des emails -textuels, qui sont sont utilisés pour leurs polices mono-espacés, ou pour afficher des informations sous forme de -tableaux dans une application CLI. ``Zend\Text\Table`` supporte les colonnes multi-lignes, les fusions de colonnes -ainsi que l'alignement. - -.. note:: - - **Encodage** - - ``Zend\Text\Table`` suppose que vos chaînes sont encodés en UTF-8 par défaut. Si ce n'est pas le cas, vous - pouvez fournir l'encodage en tant que paramètre du constructeur ou à la méthode *setContent* de - ``Zend\Text\Table\Column``. Alternativement si vous avez un encodage différent dans le processus complet, vous - pouvez définir l'encodage d'entrée ("input") standard avec ``Zend\Text\Table::setInputCharset($charset)``. - Dans le cas où vous avez besoin d'un autre encodage pour la sortie ("output") de la table, vous pouvez le - paramétrer avec ``Zend\Text\Table::setOutputCharset($charset)``. - -Un objet ``Zend\Text\Table`` consiste en des lignes, qui contiennent des colonnes, représenté par -``Zend\Text\Table\Row`` et ``Zend\Text\Table\Column``. Lors de la création d'une table, vous pouvez fournir un -tableau avec les options pour la table. Celles-ci sont : - - - *columnWidths* (obligatoire) : un tableau définissant toutes les largeurs de colonnes en nombre de - caractères. - - - *decorator*: le décorateur à utiliser pour les bordures de la table. Le défaut est *unicode*, mais vous - pouvez aussi spécifier *ascii* ou fournir une instance d'un objet décorateur personnalisé. - - - *padding*: le remplissage gauche et droit de la colonne en caractères. Le remplissage par défaut est zéro. - - - *AutoSeparate*: la manière comment les lignes sont séparées avec des lignes horizontales. Par défaut, il y - a une séparation entre chaque ligne. Ceci est défini entant que bitmask contenant une ou plus des constantes - de ``Zend\Text\Table`` suivantes : - - - ``Zend\Text\Table::AUTO_SEPARATE_NONE`` - - - ``Zend\Text\Table::AUTO_SEPARATE_HEADER`` - - - ``Zend\Text\Table::AUTO_SEPARATE_FOOTER`` - - - ``Zend\Text\Table::AUTO_SEPARATE_ALL`` - - Où "header" est toujours la première ligne, et "footer" est toujours la dernière. - - - -Les lignes sont simplement ajoutées à la table en créant une nouvelle instance de ``Zend\Text\Table\Row``, et en -l'ajoutant à la table via la méthode *appendRow*. Les lignes elle-même n'ont pas d'options. Vous pouvez aussi -fournir un tableau directement à la méthode *appendRow*, qui le convertira automatiquement en des objets *Row*, -contenant les multiples objets *Column*. - -De la même manière vous pouvez ajouter les colonnes aux lignes. Créez un instance de ``Zend\Text\Table\Column`` -et ensuite paramétrer les options de colonnes soit dans le constructeur ou plus tard par les méthodes *set**. Le -premier paramètre est le contenu de la colonne qui peut avoir des lignes multiples, elles sont dans le meilleur -des cas séparées par le caractère *\n*. Le second paramètre définit l'alignement, qui est *left* par défaut -et peut être l'une des constantes de la classe ``Zend\Text\Table\Column``: - - - ``ALIGN_LEFT`` - - - ``ALIGN_CENTER`` - - - ``ALIGN_RIGHT`` - -Le troisième paramètre est le colspan ("fusion") de la colonne. Par exemple, quand vous choisissez "2 comme -colspan, la colonne va déborder sur deux colonnes de la table. Le dernier paramètre définit l'encodage du -contenu, qui peut être fourni, si le contenu n'est ni de l'ASCII ni de l'UTF-8. Pour ajouter la colonne à la -ligne, vous appelez simplement *appendColumn* dans votre objet *Row* avec l'objet *Column* en tant que paramètre. -Alternativement vous pouvez directement fournir la chaîne à la méthode *appendColumn*. - -Pour finalement effectuer le rendu de la table, vous pouvez soit utiliser la méthode *render* de la table, ou -utilisez la méthode magique *__toString* en faisant *echo $table;* ou *$tableString = (string) $table*. - -.. _zend.text.table.example.using: - -.. rubric:: Utilisation de Zend\Text\Table - -Cet exemple illustre un utilisation basique de ``Zend\Text\Table`` pour créer une table simple : - -.. code-block:: php - :linenos: - - $table = new Zend\Text\Table(array('columnWidths' => array(10, 20))); - - // Either simple - $table->appendRow(array('Zend', 'Framework')); - - // Or verbose - $row = new Zend\Text\Table\Row(); - - $row->appendColumn(new Zend\Text\Table\Column('Zend')); - $row->appendColumn(new Zend\Text\Table\Column('Framework')); - - $table->appendRow($row); - - echo $table; - -Ceci entraînera l'affichage suivant : - -.. code-block:: text - :linenos: - - ┌──────────┬────────────────────┐ - │Zend │Framework │ - └──────────┴────────────────────┘ - - diff --git a/docs/languages/fr/modules/zend.uri.rst b/docs/languages/fr/modules/zend.uri.rst deleted file mode 100644 index 36766f058..000000000 --- a/docs/languages/fr/modules/zend.uri.rst +++ /dev/null @@ -1,224 +0,0 @@ -.. EN-Revision: none -.. _zend.uri.chapter: - -Zend_Uri -======== - -.. _zend.uri.overview: - -Aperçu ------- - -``Zend_Uri`` est un composant destiné à aider à la manipulation et à la validation des `Uniform Resource -Identifiers`_ (URIs). ``Zend_Uri`` existe dans le but d'aider les autres composants de Zend Framework tels que -``Zend\Http\Client`` mais peut aussi être utilisé comme composant individuel. - -Les *URI*\ s commence toujours avec la définition de leur schéma, suivie d'un double-points. La construction des -différents schémas variant beaucoup, une fabrique est à votre disposition. ``Zend_Uri`` possède une fabrique -qui retourne des instances sous-classes d'elle même. Chaque sous classe possède le nom du schéma dans son nom, -comme ``Zend\Uri\``, où ** est le nom du schéma utilisé, tout en minuscule, sauf la première -lettre. Une exception à cette règle est *HTTPS*, qui est aussi géré par ``Zend\Uri\Http``. - -.. _zend.uri.creation: - -Créer un nouvel URI -------------------- - -``Zend_Uri`` fabriquera un *URI* vierge, si seul son schéma est passé à ``Zend\Uri\Uri::factory()``. - -.. _zend.uri.creation.example-1: - -.. rubric:: Créer un URI avec ``Zend\Uri\Uri::factory()`` - -.. code-block:: php - :linenos: - - // Création d'un URI vierge - $uri = Zend\Uri\Uri::factory('http'); - - // $uri instanceof Zend\Uri\Http - -Pour créer un *URI* à partir de rien, passez simplement le schéma à ``Zend\Uri\Uri::factory()`` [#]_. Si un schéma -non supporté lui est passé ou aucune classe n'est spécifié, une ``Zend\Uri\Exception`` sera levée. - -Si un schéma ou *URI* fourni est supporté, ``Zend\Uri\Uri::factory()`` retournera une sous-classe d'elle-même -spécialisée pour le schéma à créer. - -Creating a New Custom-Class URI -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Starting from Zend Framework 1.10.5, you can specify a custom class to be used when creating the Zend_Uri instance, -as a second parameter to the ``Zend\Uri\Uri::factory()`` method. This enables you to subclass Zend_Uri and create your -own custom URI classes, and instantiate new URI objects based on your own custom classes. - -The 2nd parameter passed to ``Zend\Uri\Uri::factory()`` must be a string with the name of a class extending -``Zend_Uri``. The class must either be already-loaded, or loadable using ``Zend\Loader\Loader::loadClass()``- that is, it -must follow the Zend Framework class and file naming conventions, and must be in your include_path. - -.. _zend.uri.creation.custom.example-1: - -.. rubric:: Creating a URI using a custom class - -.. code-block:: php - :linenos: - - // Create a new 'ftp' URI based on a custom class - $ftpUri = Zend\Uri\Uri::factory( - 'ftp://user@ftp.example.com/path/file', - 'MyLibrary_Uri_Ftp' - ); - - // $ftpUri is an instance of MyLibrary_Uri_Ftp, which is a subclass of Zend_Uri - -.. _zend.uri.manipulation: - -Manipuler un URI existant -------------------------- - -Pour manipuler un *URI* existant, passez le entièrement à ``Zend\Uri\Uri::factory()``. - -.. _zend.uri.manipulation.example-1: - -.. rubric:: Manipuler un URI existant avec ``Zend\Uri\Uri::factory()`` - -.. code-block:: php - :linenos: - - // Passez l'URI complet à la fabrique - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - // $uri instanceof Zend\Uri\Http - -L'URI sera alors analysé et validé. S'il s'avère être invalide, une ``Zend\Uri\Exception`` sera envoyée -immédiatement. Sinon, ``Zend\Uri\Uri::factory()`` retournera une sous classe d'elle-même qui spécialisera le schéma -manipulé. - -.. _zend.uri.validation: - -Validation d'URI ----------------- - -La méthode ``Zend\Uri\Uri::check()`` peut être utilisée pour valider un *URI*. - -.. _zend.uri.validation.example-1: - -.. rubric:: Validation d'URI avec ``Zend\Uri\Uri::check()`` - -.. code-block:: php - :linenos: - - // Valide si l'URI passé est bien formé - $valid = Zend\Uri\Uri::check('http://uri.en.question'); - - // $valid est TRUE ou FALSE - -``Zend\Uri\Uri::check()`` retourne un simple booléen, ce qui est plus pratique que de passer par -``Zend\Uri\Uri::factory()`` et de capturer les exceptions. - -.. _zend.uri.validation.allowunwise: - -Autoriser les caractères "imprudents" dans les URIs -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Par défaut, ``Zend_Uri`` n'acceptera pas les caractères suivants, définis par la *RFC* comme "imprudents" et -invalide : *"{", "}", "|", "\", "^", "`"*. Cependant, de nombreuses implémentations acceptent ces caractères -comme valides. - -``Zend_Uri`` peut être paramètré pour accepter ces caractères "imprudents" en réglant l'option "allow_unwise" -à ``TRUE`` en utilisant la méthode ``Zend\Uri\Uri::setConfig()``: - -.. _zend.uri.validation.allowunwise.example-1: - -.. rubric:: Autoriser les caractères spéciaux dans les URIs - -.. code-block:: php - :linenos: - - // Normalement, ceci devrait retourner false : - $valid = Zend\Uri\Uri::check('http://example.com/?q=this|that'); // Contient le symbole '|' - - // Cependant, vous pouvez autorise les caractères "imprudents" - Zend\Uri\Uri::setConfig(array('allow_unwise' => true)); - $valid = Zend\Uri\Uri::check('http://example.com/?q=this|that'); // Retournera 'true' - - // Initialiser 'allow_unwise' à sa valeur par défaut FALSE - Zend\Uri\Uri::setConfig(array('allow_unwise' => false)); - -.. note:: - - ``Zend\Uri\Uri::setConfig()`` paramètre les options de configuration de manière globale. Il est recommandé de - réinitialiser l'option *allow_unwise* à ``FALSE`` comme dans l'exemple ci-dessus, à moins d'être certain de - vouloir utiliser les caractères "imprudents" de manière globale. - -.. _zend.uri.instance-methods: - -Méthodes communes ------------------ - -Toute instance sous-classe de ``Zend_Uri`` (par exemple ``Zend\Uri\Http``) possède plusieurs méthodes utiles : - -.. _zend.uri.instance-methods.getscheme: - -Retrouver le schéma d'un URI -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Le schéma d'un *URI* est la partie précédent les double-points (:). Par exemple, le schéma de -*http://www.zend.com* est *http*. - -.. _zend.uri.instance-methods.getscheme.example-1: - -.. rubric:: Récupérer le schéma d'un objet ``Zend\Uri\*`` - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - $scheme = $uri->getScheme(); // "http" - -La méthode ``getScheme()`` retourne une chaîne de caractères. - -.. _zend.uri.instance-methods.geturi: - -Récupérer l'URI entier -^^^^^^^^^^^^^^^^^^^^^^ - -.. _zend.uri.instance-methods.geturi.example-1: - -.. rubric:: Récupérer l'URI entier depuis un objet ``Zend\Uri\*`` - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - echo $uri->getUri(); // "http://www.zend.com" - -La méthode ``getUri()`` retourne une chaîne de caractères représentant l'URI entier. - -.. _zend.uri.instance-methods.valid: - -Valider l'URI -^^^^^^^^^^^^^ - -``Zend\Uri\Uri::factory()`` validera de toute façon systématiquement l'URI qui lui est passé en paramètre. Par -contre, l'URI peut devenir invalide après, s'il est modifié. - -.. _zend.uri.instance-methods.valid.example-1: - -.. rubric:: Valider un objet ``Zend\Uri\*`` - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - $isValid = $uri->valid(); // TRUE - -La méthode ``valid()`` propose une façon de vérifier si l'URI est toujours valide. - - - -.. _`Uniform Resource Identifiers`: http://www.w3.org/Addressing/ - -.. [#] Actuellement, ``Zend_Uri`` ne supporte que les schémas intégrés *HTTP* et *HTTPS* \ No newline at end of file diff --git a/docs/languages/fr/modules/zend.validator.barcode.rst b/docs/languages/fr/modules/zend.validator.barcode.rst deleted file mode 100644 index 4e6414eb9..000000000 --- a/docs/languages/fr/modules/zend.validator.barcode.rst +++ /dev/null @@ -1,277 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.barcode: - -Barcode -======= - -``Zend\Validate\Barcode`` permet de vérifier si une donnée représente un code barres. - -``Zend\Validate\Barcode`` supporte de multiples standards de codes à barres et peut être étendu pour les codes -barres propriétaires. Les formats suivants sont supportés: - -- **CODE25**: Aussi appelé "two of five" ou "Code25 Industrial". - - Ce code n'a pas de limite de taille. Il supporte les chiffres et le dernier chiffre peut être une somme de - contrôle optionnelle calculée sur un modulo 10. Ce standard est très vieux et plus trop utilisé. Les cas - d'utilisations classiques sont l'industrie - -- **CODE25INTERLEAVED**: Aussi appelé "Code 2 of 5 Interleaved". - - C'est une variante de CODE25. Il n'a pas de limite de taille mais il doit contenir un nombre de caractères pair. - Il supporte uniquement les chiffres et le dernier chiffre peut être une somme de contrôle optionnelle calculée - sur un modulo 10. Il est utilisé au travers le monde et typiquement dans l'industrie / la distribution. - -- **CODE39**: CODE39 est un des codes les plus vieux. - - Ce code a une taille variable. Il supporte les chiffres, les lettres majuscules, et 7 caractères spéciaux comme - l'espace, le point ou le signe dollar. Il peut posséder optionnellement une somme de contrôle calculée sur un - modulo 43. Il est utilisé dans le monde, dans l'industrie. - -- **CODE39EXT**: CODE39EXT est une extension de CODE39. - - Ce code à barres a les mêmes propriétés que CODE39. Aussi, il autorise l'utilisation de tous les caractères - ASCII (128). Ce standard est très utilisé dans l'industrie, dans le monde. - -- **CODE93**: CODE93 est le successeur de CODE39. - - Ce code a une taille variable. Il supporte les chiffres, les lettres de l'alphabet et 7 caractères spéciaux. Il - possède optionnellement une somme de contrôle à 2 caractères calculée sur un modulo 47. Ce standard produit - un code plus dense que CODE39 et est plus sécurisé. - -- **CODE93EXT**: CODE93EXT est une extension de CODE93. - - Ce type de code à barres a les mêmes propriétés que CODE93. Aussi, il permet l'utilisation des 128 - caractères du jeu ASCII. Ce standard est utilisé dans le monde et principalement dans l'industrie. - -- **EAN2**: EAN est un raccourci de "European Article Number". - - Ces codes ont deux caractères. Seuls les chiffres sont supportés et ils n'ont pas de somme de contrôle. Ce - standard est utilisé principalement en plus de EAN13 (ISBN) sur les livres imprimés. - -- **EAN5**: EAN est un raccourci pour "European Article Number". - - Ce code barres doit comporter 5 caractères. Il ne supporte que les chiffres et ne possède pas de somme de - contrôle. Ce standard est principalement utilisé en plus de EAN13 (ISBN) pour l'impression de livres. - -- **EAN8**: EAN est un raccourci pour "European Article Number". - - Ce code barres se compose de 7 ou 8 caractères. Il supporte les chiffres uniquement. Lorsqu'il est à 8 - caractères, il inclut une somme de contrôle. Ce standard est utilisé dans le monde mais pour des besoins - limités. On le trouve pour les petits articles où un code barres plus long n'aurait pas pu être imprimé. - -- **EAN12**: EAN est un raccourci pour "European Article Number". - - Ce code doit faire 12 caractères de long. Il ne supporte que les chiffres et le dernier chiffre est une somme de - contrôle calculée sur un modulo 10. C'est un code utilisé aux Etats-Unis et courant sur le marché. Il a été - dépassé par EAN13. - -- **EAN13**: EAN est un raccourci pour "European Article Number". - - Ce code doit faire 13 caractères de long, il ne supporte que les chiffres et le dernier chiffre est une somme de - contrôle calculée sur un modulo 10. Ce standard est utilisé dans le monde et est très commun sur le marché. - -- **EAN14**: EAN est un raccourci pour "European Article Number". - - Ce code fait 14 caractères de longueur et ne supporte que les chiffres. Le dernier chiffre représente la somme - de contrôle calculée sur un modulo 10. Ce code barres est utilisé dans le monde pour la distribution. C'est le - successeur de EAN13. - -- **EAN18**: EAN est un raccourci pour "European Article Number". - - Ce code fait 18 caractères de longueur et ne supporte que les chiffres. Le dernier chiffre représente la somme - de contrôle calculée sur un modulo 10. Ce code barres est utilisé pour identifier les conteneur d'envoi dans - le transport. - -- **GTIN12**: GTIN est le raccourci de "Global Trade Item Number". - - Ce code utilise le même standard que EAN12 et est son successeur. Il est utilisé paticulièrement aux - Etats-Unis. - -- **GTIN13**: GTIN est le raccourci de "Global Trade Item Number". - - Ce code utilise le même standard que EAN13 et est son successeur. Il est utilisé dans le monde entier par - l'industrie. - -- **GTIN14**: GTIN est le raccourci de "Global Trade Item Number". - - Ce code utilise le même standard que EAN14 et est son successeur. Il est utilisé dans le monde entier par - l'industrie. - -- **IDENTCODE**: Identcode est utilisé par Deutsche Post et DHL. C'est un cas particulier de Code25. - - Ce code fait 12 caractères de longueur et ne supporte que les chiffres. Le dernier chiffre représente la comme - de contrôle calculée modulo 10. Ce code barres est utilisé principalement par les entreprises DP et DHL. - -- **INTELLIGENTMAIL**: Intelligent Mail est utilisé par les services postaux. - - Ce code fait 20, 25, 29 ou 31 caractères de longueur. Il ne support que les chiffres et ne contient pas de somme - de contrôle. Il est le successeur de *PLANET* et *POSTNET*. Il est utilisé principalement dans les services - postaux aux Etats-Unis. - -- **ISSN**: *ISSN* est l'abréviation de International Standard Serial Number. - - Ce code a une longueur de 8 ou 13 caractères. Il ne supporte que les chiffres et le dernier chiffre représente - la somme de contrôle calculée sur un modulo 11. Il est utilisé dans le print à travers le monde. - -- **ITF14**: ITF14 est l'implémentation GS1 de Interleaved Two of Five bar code. - - Ce code est une implémentation particulière de Interleaved 2 of 5. Il doit mesurer 14 caractères de long et - est basé sur GTIN14. Il ne contient que des chiffres et le dernier chiffre est une somme de contrôle calculée - sur un modulo 10. Il est utilisé dans le monde dans la distribution. - -- **LEITCODE**: Leitcode est utilisé par Deutsche Post et DHL. C'est un cas particulier de Code25. - - Ce code mesure 14 caractères de longueur et ne supporte que les chiffres. Le dernier chiffre est une somme de - contrôle calculée sur un modulo 10. Il est principalement utilisé par les entreprises DP et DHL. - -- **PLANET**: Planet est l'abréviation de Postal Alpha Numeric Encoding Technique. - - Ce code fait 12 ou 14 caractères de long. Il ne supporte que les chiffres et le dernier chiffre est une somme de - contrôle. Ce code barres est utilisé principalement dans les services postaux des Etats-Unis. - -- **POSTNET**: Postnet est utilisé par le service des Postes des Etats-Unis. - - Ce code fait 6, 7, 10 ou 12 caractères. Il ne supporte que les chiffres et le dernier chiffre est une somme de - contrôle. Ce code barres est utilisé dans les services postaux aux Etats-Unis principalement. - -- **ROYALMAIL**: Royalmail est utilisé par Royal Mail. - - Ce code n'a pas de taille précise. Il supporte les chiffres, les lettres majuscules et le dernier caractère est - une somme de contrôle. Ce standard est utilisé par Royal Mail pour le service Cleanmail. Il est aussi appelé - *RM4SCC*. - -- **SSCC**: SSCC est un raccourci pour "Serial Shipping Container Code". - - Ce code est une variante de EAN, il doit faire 18 caractères de long et ne supporte que les chiffres. Le dernier - chiffre doit être la somme de contrôle qui est calculée sur un modulo 10. Ce code est utilisé principalement - dans le transport. - -- **UPCA**: UPC est le raccourci de "Univeral Product Code". - - Ce code a précédé EAN13. Il doit faire 12 caractères et ne supporte que les chiffres. Le dernier chiffre est - une somme de contrôle calculée sur un modulo 10. Ce code barres est utilisé aux Etats-Unis. - -- **UPCE**: UPCE est une variante simplifié et plus courte de UPCA. - - Il peut faire 6, 7 ou 8 caractères et ne supporte que les chiffres. Lorsqu'il fait 8 caractères, il inclut une - somme de contrôle calculée sur un modulo 10. Ce code barres est utilisé sur de petits produits sur lesquels - UPCA ne pourrait pas tenir. - -.. _zend.validator.set.barcode.options: - -Options supportées par Zend\Validate\Barcode --------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\Barcode``: - -- **adapter**: Affecte l'adaptateur de code barres à utiliser. La liste des adaptateurs est donnée ci-dessus. Si - vous voulez préciser un adaptateur personnalisé, le nom complet de la classe est requis. - -- **checksum**: ``TRUE`` si oui ou non utiliser une somme de contrôle. Notez que certains adaptateurs ne - supportent pas un telle option. - -- **options**: Affecte des options personnalisées pour un adaptateur personnalisé. - -.. _zend.validator.set.barcode.basic: - -Utilisation classique ---------------------- - -Pour valider si une chaine est un code barres, vous devez juste connaitre son type. Voyez l'exemple suivant pour un -EAN13: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Barcode('EAN13'); - if ($valid->isValid($input)) { - // input semble être valide - } else { - // input est invalide - } - -.. _zend.validator.set.barcode.checksum: - -Somme de contrôle optionnelle ------------------------------ - -Certains codes barres proposent une somme de contrôle. Ils peuvent être valides sans cette somme mais si vous -préciser celle-la alors elle devra être validée. Par défaut la somme de contrôle n'est pas activée. En -utilisant l'option ``checksum`` vous pouvez indiquer si oui ou non la somme de contrôle doit être vérifiée. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Barcode(array( - 'adapter' => 'EAN13', - 'checksum' => false, - )); - if ($valid->isValid($input)) { - // input semble être valide - } else { - // input est invalide - } - -.. note:: - - **Sécurité moindre en désactivant la validation de la somme de contrôle** - - En désactivant la validation de la somme de contrôle vous réduirez la sécurité du code à barres. Aussi - veuillez noter que si vous désactiver ce contrôle pour des codes l'utilisant vous risqueriez de considérer - comme valides des codes barres qui ne le sont pas en réalité. - -.. _zend.validator.set.barcode.custom: - -Ecrire des validateurs personnalisés ------------------------------------- - -Vous pouvez créer vos propres validateurs pour ``Zend\Validate\Barcode``; ce qui est nécessaire si vous traitez -des codes barres propriétaires. Vous aurez alors besoin des informations suivantes. - -- **Length**: La taille du code barres. Peut être une des valeur suivantes: - - - **Integer**: Une valeur plus grande que zéro qui définit exactement le nombre de caractères du code barres. - - - **-1**: Aucune limite de taille pour ce code barres. - - - **"even"**: La taille du code barres doit être un nombre de caractères pair. - - - **"odd"**: La taille du code barres doit être un nombre de caractères impair. - - - **array**: Un tableau de valeurs entières. La taille du code barres doit être exactement égale à une des - valeurs dans le tableau. - -- **Characters**: Une chaine qui contient tous les caractères autorisés pour ce code barres. La valeur entière - spéciale 128 est autorisée ici, elle signifie "les 128 premiers caractères du jeu ASCII". - -- **Checksum**: Une chaine utilisée comme callback pour valideer la somme de contrôle. - -Votre validateur de code à barres personnalisé doit étendre ``Zend\Validate\Barcode\AdapterAbstract`` ou -implémenter Zend\Validate\Barcode\AdapterInterface. - -Comme exemple, créons un validateur qui utilise un nombre pair de caractères pouvant être des chiffres et les -lettres 'ABCDE'. Une somme de contrôle sera aussi calculée. - -.. code-block:: php - :linenos: - - class My_Barcode_MyBar extends Zend\Validate\Barcode\AdapterAbstract - { - protected $_length = 'even'; - protected $_characters = '0123456789ABCDE'; - protected $_checksum = '_mod66'; - - protected function _mod66($barcode) - { - // effectuer de la validation et retourner un booléen - } - } - - $valid = new Zend\Validate\Barcode('My_Barcode_MyBar'); - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - - diff --git a/docs/languages/fr/modules/zend.validator.between.rst b/docs/languages/fr/modules/zend.validator.between.rst deleted file mode 100644 index dba3e186c..000000000 --- a/docs/languages/fr/modules/zend.validator.between.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.between: - -Between -======= - -``Zend\Validate\Between`` permet de valider qu'une valeur soit bien comprise entre deux bornes. - -.. note:: - - **Zend\Validate\Between ne supporte que les nombres** - - Zend\Validate\Between ne supporte pas les chaines ou les dates. - -.. _zend.validator.set.between.options: - -Options gérées par Zend\Validate\Between ----------------------------------------- - -Les options suivantes sont reconnues par ``Zend\Validate\Between``: - -- **inclusive**: Défini si les bornes sont inclusives dans la validation (min et max). Par défaut, ``TRUE``. - -- **min**: Affecte la borne inférieure. - -- **max**: Affecte la borne supérieure. - -.. _zend.validator.set.between.basic: - -Comportement par défaut de Zend\Validate\Between ------------------------------------------------- - -Par défaut ce validateur vérifie sur la valeur est entre ``min`` et ``max`` inclusivement pour les deux bornes. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Between(array('min' => 0, 'max' => 10)); - $value = 10; - $result = $valid->isValid($value); - // retourne true - -Dans l'exemple ci-dessus, ``TRUE`` est retourné car par défaut les bornes supérieures et inférieures sont -inclusives. Toute valeur depuis '0' à '10' sont donc autorisées et reconnues. '-1' et '11' auraient retourné -``FALSE``. - -.. _zend.validator.set.between.inclusively: - -Validation exclusive sur les bornes ------------------------------------ - -Il peut être nécessaire d'exclure les bornes dans la validation. Voyez l'exemple qui suit: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Between( - array( - 'min' => 0, - 'max' => 10, - 'inclusive' => false - ) - ); - $value = 10; - $result = $valid->isValid($value); - // retourne false - -L'exemple ci-dessus fait en sorte que '0' et '10' retournent ``FALSE``. - - diff --git a/docs/languages/fr/modules/zend.validator.callback.rst b/docs/languages/fr/modules/zend.validator.callback.rst deleted file mode 100644 index 3720cb593..000000000 --- a/docs/languages/fr/modules/zend.validator.callback.rst +++ /dev/null @@ -1,225 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.callback: - -Callback (fonction de rappel) -============================= - -``Zend\Validate\Callback`` permet de fournir une fonction de rappel utilisée pour valider la valeur. - -.. _zend.validator.set.callback.options: - -Options supportées par Zend\Validate\Callback ---------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\Callback``\  : - -- **callback**\  : spécifie la fonction de rappel qui sera utilisée pour la validation. - -- **options**\  : spécifie les options additionnelles qui seront fournies à la fonction de rappel. - -.. _zend.validator.set.callback.basic: - -Utilisation classique ---------------------- - -Le plus simple est de posséder une fonction classique, qui sera utilisée pour valider la donnée. Soit la -fonction ci-après : - -.. code-block:: php - :linenos: - - function myMethod($value) - { - // ici de la validation à effectuer - return true; - } - -Pour l'utiliser avec ``Zend\Validate\Callback`` vous devez simplement effectuer votre appel comme ceci: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Callback('myMethod'); - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -.. _zend.validator.set.callback.closure: - -Utilisation avec les fonctions anonymes (closures) --------------------------------------------------- - -PHP 5.3 introduit les `fonctions anonymes`_ ou fonctions de **fermeture**. PHP traite les fonctions anonymes comme -des fonctions de rappel valides, et il est donc possible d'utiliser celles-ci avec ``Zend\Validate\Callback``. -Exemple: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Callback(function($value){ - // Validation ici - return true; - }); - - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -.. _zend.validator.set.callback.class: - -Utilisation avec les méthodes de rappel ---------------------------------------- - -Bien sûr, il est aussi possible d'utiliser des méthodes de rappel: - -.. code-block:: php - :linenos: - - class MyClass - { - public function myMethod($value) - { - // Validation ici - return true; - } - } - -La définition de la fonction de rappel se fait alors dans un tableau contenant un objet de la classe et la -méthode à appeler: - -.. code-block:: php - :linenos: - - $object = new MyClass; - $valid = new Zend\Validate\Callback(array($object, 'myMethod')); - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -Il est aussi possible d'utiliser une méthode statique comme fonction de rappel: - -.. code-block:: php - :linenos: - - class MyClass - { - public static function test($value) - { - // Validation ici - return true; - } - } - - $valid = new Zend\Validate\Callback(array('MyClass', 'test')); - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -Enfin, PHP 5.3 définit la méthode magique ``__invoke()``. Si vous l'utilisez, alors un simple objet suffira comme -fonction de rappel: - -.. code-block:: php - :linenos: - - class MyClass - { - public function __invoke($value) - { - // Validation ici - return true; - } - } - - $object = new MyClass(); - $valid = new Zend\Validate\Callback($object); - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -.. _zend.validator.set.callback.options2: - -Ajouter des options -------------------- - -``Zend\Validate\Callback`` permet d'utiliser des options, celles-ci seront alors passées comme argument -supplémentaires à la fonction de callback. - -Soit la définition suivante: - -.. code-block:: php - :linenos: - - class MyClass - { - function myMethod($value, $option) - { - // De la validation ici - return true; - } - } - -Il extsite deux manières d'indiquer des options au validateur : via le constructeur ou sa méthode -``setOptions()``. - -Via le constructeur, passez un tableau contenant les clés "callback" et "options": - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Callback(array( - 'callback' => array('MyClass', 'myMethod'), - 'options' => $option, - )); - - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -Sinon, vous pouvez passer les options après: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Callback(array('MyClass', 'myMethod')); - $valid->setOptions($option); - - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -Si des valeurs supplémentaires sont passées à ``isValid()`` elles seront utilisées comme arguments -supplémentaires lors de l'appel à la fonction de rappel, mais avant les options ``$options``. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Callback(array('MyClass', 'myMethod')); - $valid->setOptions($option); - - if ($valid->isValid($input, $additional)) { - // input semble valide - } else { - // input est invalide - } - -Lors de l'appel à la fonction de rappel, la valeur à valider sera toujours passée comme premier argument à la -fonction de rappel suivie de toutes les autres valeurs passées à ``isValid()``; les autres options suivront. Le -nombre et le type d'options qui peuvent être utilisées est illimité. - - - -.. _`fonctions anonymes`: http://php.net/functions.anonymous diff --git a/docs/languages/fr/modules/zend.validator.credit-card.rst b/docs/languages/fr/modules/zend.validator.credit-card.rst deleted file mode 100644 index 30a33ac6f..000000000 --- a/docs/languages/fr/modules/zend.validator.credit-card.rst +++ /dev/null @@ -1,223 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.creditcard: - -CreditCard -========== - -``Zend\Validate\CreditCard`` permet de valider si une valeur est susceptible de représenter un numéro de carte de -crédit. - -Une carte de crédit contient plein de données, incluant un hologramme, un numéro de compte, un logo, une date -d'expiration, un code de sécurité et le nom du détenteur. L'algorithme qui vérifie la combinaison de ces -données n'est connu que des entreprises délivrant les cartes et devrait être vérifié lors d'un paiement. -Cependant, il est utile de savoir si le numéro de la carte est valable **avant** d'effectuer de telles -vérifications complexes. ``Zend\Validate\CreditCard`` vérifie simplement que le numéro est bien formé. - -Dans les cas où vous posséderiez un service capable d'effectuer des vérifications complètes, -``Zend\Validate\CreditCard`` vous permet de passer une fonction de rappel à utiliser si le numéro a été -vérifié comme valide. Le retour de la fonction de rappel servira alors de retour général du validateur. - -Les institutions suivantes sont acceptées: - -- **American Express** - - **China UnionPay** - - **Diners Club Card Blanche** - - **Diners Club International** - - **Diners Club US & Canada** - - **Discover Card** - - **JCB** - - **Laser** - - **Maestro** - - **MasterCard** - - **Solo** - - **Visa** - - **Visa Electron** - -.. note:: - - **Institutions non valides** - - **Bankcard** et **Diners Club enRoute** n'existent plus, elles sont donc considérées non valides. - - **Switch** est rattaché à **Visa** et est donc considérée comme non valide. - -.. _zend.validator.set.creditcard.options: - -Options supportées par Zend\Validate\CreditCard ------------------------------------------------ - -Les options suivantes sont supportées par ``Zend\Validate\CreditCard``\  : - -- **service**\  : une fonction de rappel vers un service en ligne qui sera utilisé en plus pour la validation. - -- **type**\  : le type de carte crédit qui sera validée. Voir ci-dessous la liste des institutions pour de plus - amples détails. - -.. _zend.validator.set.creditcard.basic: - -Utilisation classique ---------------------- - -Il y a plusieurs institutions qui peuvent être validées par ``Zend\Validate\CreditCard``. Par défaut, toutes les -institutions connues sont acceptées: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\CreditCard(); - if ($valid->isValid($input)) { - // input semble valide - } else { - // input est invalide - } - -L'exemple ci-dessus valide le numéro pour toutes les institutions connues. - -.. _zend.validator.set.creditcard.institute: - -Accepter seulement certains types de cartes -------------------------------------------- - -Il peut arriver que vous ne vouliez valider que certains types de cartes plutôt que toutes les institutions -connues. ``Zend\Validate\CreditCard`` permet ceci. - -Pour utiliser une limite, spécifiez les institutions accéptées à l'initialisation ou après, grâce à -``setType()``. Plusieurs arguments sont utilisables. - -Vous pouvez préciser une seule institution: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\CreditCard( - Zend\Validate\CreditCard::AMERICAN_EXPRESS - ); - -Plusieurs institutions se précisent au moyen d'un tableau: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\CreditCard(array( - Zend\Validate\CreditCard::AMERICAN_EXPRESS, - Zend\Validate\CreditCard::VISA - )); - -Et comme pour tout validateur, vous pouvez passer un tableau global ou un objet ``Zend_Config``. Dans ce cas, les -institutions se précisent au moyen de la clé ``type``: - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\CreditCard(array( - 'type' => array(Zend\Validate\CreditCard::AMERICAN_EXPRESS) - )); - -.. _zend.validator.set.creditcard.institute.table: - -.. table:: Constante représentant les institutions - - +-------------------------+----------------+ - |Institution |Constante | - +=========================+================+ - |American Express |AMERICAN_EXPRESS| - +-------------------------+----------------+ - |China UnionPay |UNIONPAY | - +-------------------------+----------------+ - |Diners Club Card Blanche |DINERS_CLUB | - +-------------------------+----------------+ - |Diners Club International|DINERS_CLUB | - +-------------------------+----------------+ - |Diners Club US & Canada |DINERS_CLUB_US | - +-------------------------+----------------+ - |Discover Card |DISCOVER | - +-------------------------+----------------+ - |JCB |JCB | - +-------------------------+----------------+ - |Laser |LASER | - +-------------------------+----------------+ - |Maestro |MAESTRO | - +-------------------------+----------------+ - |MasterCard |MASTERCARD | - +-------------------------+----------------+ - |Solo |SOLO | - +-------------------------+----------------+ - |Visa |VISA | - +-------------------------+----------------+ - |Visa Electron |VISA | - +-------------------------+----------------+ - -Vous pouvez aussi configurer les institutions valides après la construction, au moyen des méthodes ``setType()``, -``addType()`` et ``getType()``. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\CreditCard(); - $valid->setType(array( - Zend\Validate\CreditCard::AMERICAN_EXPRESS, - Zend\Validate\CreditCard::VISA - )); - -.. note:: - - **Institution par défaut** - - Si vous ne précisez pas d'institution à la construction, alors ``ALL`` sera utilisée, et donc toutes les - institutions seront utilisées. - - Dans ce cas, utiliser ``addType()`` ne sert à rien. - -.. _zend.validator.set.creditcard.servicecheck: - -Validation par fonction de rappel ---------------------------------- - -Comme déja dit, ``Zend\Validate\CreditCard`` ne valide que le numéro de la carte. Heureusement, certaines -institutions proposent des *API*\ s pour valider des numéros de carte de crédit qui ne sont pas publiques. Ces -services sont très souvent payants, ainsi cette vérification est par défaut désactivée. - -Lorsque vous avez accès à de telles *API*\ s, vous pouvez les utiliser comme fonctions additionnelles à -``Zend\Validate\CreditCard`` et ainsi augmenter la sécurité de la validation. - -Pour ce faire, vous devez simplement préciser une fonction de rappel qui sera appelée après que la validation -"classique" ait réussi. Ceci évite un appel à l'*API* avec un numéro de toute façon non valide et augmentera -ainsi les performances de la validation et donc de l'application. - -``setService()`` et ``getService()`` sont utilisée pour la fonction de rappel. La clé de configuration à -utiliser, si vous le souhaitez, est '``service``' (à la construction). Des détails peuvent être trouvés sur la -documentation du validateur :ref:`Callback `. - -.. code-block:: php - :linenos: - - // Votre classe de service - class CcService - { - public function checkOnline($cardnumber, $types) - { - // Processus de validation ici - } - } - - // La validation - $service = new CcService(); - $valid = new Zend\Validate\CreditCard(Zend\Validate\CreditCard::VISA); - $valid->setService(array($service, 'checkOnline')); - -Ici le service sera appelé avec le numéro de carte comme premier paramètre, et les types accéptés comme -second. - - diff --git a/docs/languages/fr/modules/zend.validator.date.rst b/docs/languages/fr/modules/zend.validator.date.rst deleted file mode 100644 index 15d1e5b92..000000000 --- a/docs/languages/fr/modules/zend.validator.date.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.date: - -Date -==== - -``Zend\Validate\Date`` permet de valider qu'une donnée est bien une date. Le validateur gère la localisation. - -.. _zend.validator.set.date.options: - -Options supportées par Zend\Validate\Date ------------------------------------------ - -Les options suivantes sont supportées par ``Zend\Validate\Date``: - -- **format**: affecte le format utilisé pour écrire la date. - -- **locale**: affecte la locale utilisée lors de la validation. - -.. _zend.validator.set.date.basic: - -Validation de dates par défaut ------------------------------- - -La manière la plus simple de valider une date est d'utiliser le format par défaut du système. Ce format est -utilisé lorsqu'aucune locale et aucun format particulier n'est précisé. Voyez l'exemple ci-après: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Date(); - - $validator->isValid('2000-10-10'); // retourne true - $validator->isValid('10.10.2000'); // retourne false - -Le format par défaut de ``Zend\Validate\Date`` est 'yyyy-MM-dd'. - -.. _zend.validator.set.date.formats: - -Formats de dates personnalisés ------------------------------- - -``Zend\Validate\Date`` supporte des formats de date personnalisés. Utilisez l'option ``format`` pour cela. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Date(array('format' => 'yyyy')); - - $validator->isValid('2010'); // retourne true - $validator->isValid('May'); // retourne false - -Vous pouvez combiner ``format`` et ``locale``. Dans ce cas vous pouvez utiliser des noms de mois ou de jours -localisés. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Date(array('format' => 'yyyy MMMM', 'locale' => 'de')); - - $validator->isValid('2010 Dezember'); // retourne true - $validator->isValid('2010 June'); // retourne false - - diff --git a/docs/languages/fr/modules/zend.validator.db.rst b/docs/languages/fr/modules/zend.validator.db.rst deleted file mode 100644 index 98085d431..000000000 --- a/docs/languages/fr/modules/zend.validator.db.rst +++ /dev/null @@ -1,162 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.Db: - -Db_RecordExists et Db_NoRecordExists -==================================== - -``Zend\Validate\Db\RecordExists`` et ``Zend\Validate\Db\NoRecordExists`` permettent de vérifier si un -enregistrement existe (ou pas) dans une table de base de données. - -.. _zend.validator.set.db.options: - -Options supportées par Zend\Validate\Db\* ------------------------------------------ - -Les options suivantes sont supportées par ``Zend\Validate\Db\NoRecordExists`` et -``Zend\Validate\Db\RecordExists``\  : - -- **adapter**\  : l'adaptateur de base de données qui sera utilisé pour la recherche. - -- **exclude**\  : jeu d'enregistrements qui seront exclus de la recherche. - -- **field**\  : le champs dans la table de la base de données dans lequel sera effectué la recherche. - -- **schema**\  : le schéma utilisé pour la recherche. - -- **table**\  : la table qui sera utilisée pour la recherche. - -.. _zend.validator.db.basic-usage: - -Utilisation de base -------------------- - -Voici un exemple basique: - -.. code-block:: php - :linenos: - - //Vérifie que l'email existe bien dans la base de données - $validator = new Zend\Validate\Db\RecordExists('users', 'emailaddress'); - if ($validator->isValid($emailaddress)) { - // l'adresse email existe - } else { - // l'adresse email n'existe pas, affichons les messages d'erreur - foreach ($validator->getMessages() as $message) { - echo "$message\n"; - } - } - -Le code ci-dessus vérifie la présence d'une adresse email ``$emailaddress`` vis à vis d'un champ d'une table de -base de données. - -.. code-block:: php - :linenos: - - //Vérifie que le nom d'utilisateur n'est pas présent dans la table - $validator = new Zend\Validate\Db\NoRecordExists('users', 'username'); - if ($validator->isValid($username)) { - // Le nom d'utilisateur semble absent de la table - } else { - // invalide : l'utilisateur est probablement présent dans la table - $messages = $validator->getMessages(); - foreach ($messages as $message) { - echo "$message\n"; - } - } - -Le code ci-dessus vérifie l'absence d'un nom d'utilisateur ``$username`` vis à vis d'un champ d'une table de base -de données. - -.. _zend.validator.db.excluding-records: - -Exclure des enregistrement --------------------------- - -``Zend\Validate\Db\RecordExists`` et ``Zend\Validate\Db\NoRecordExists`` proposent aussi un moyen de tester la base -de données en excluant certaines parties de table, en passant une clause where ou un tableau de paires "champs" -"valeur". - -Lorsqu'un tableau est passé, l'opérateur *!=* est utilisé et vous pouvez ainsi tester le reste de la table. - -.. code-block:: php - :linenos: - - //Vérifie qu'aucun autre utilisateur que celui dont l'id est spécifié, ne possède ce nom - $user_id = $user->getId(); - $validator = new Zend\Validate\Db\NoRecordExists( - 'users', - 'username', - array( - 'field' => 'id', - 'value' => $user_id - ) - ); - - if ($validator->isValid($username)) { - // OK - } else { - // KO - $messages = $validator->getMessages(); - foreach ($messages as $message) { - echo "$message\n"; - } - } - -L'exemple ci dessus va vérifier qu'aucun utilisateur dont l'id n'est pas celui spécifié, possède ce nom là -``$username``. - -La clause d'exclusion peut aussi être renseignée avec une chaine afin de pouvoir utiliser un opérateur autre que -*!=*. - -.. code-block:: php - :linenos: - - $post_id = $post->getId(); - $clause = $db->quoteInto('post_id = ?', $category_id); - $validator = new Zend\Validate\Db\RecordExists( - 'posts_categories', - 'post_id', - $clause - ); - - if ($validator->isValid($username)) { - // OK - } else { - // KO - $messages = $validator->getMessages(); - foreach ($messages as $message) { - echo "$message\n"; - } - } - -L'exemple ci-dessus vérifie la table *posts_categories* pour s'assurer qu'un enregistrement avec *post_id* -corresponde à ``$category_id`` - -.. _zend.validator.db.database-adapters: - -Adaptateurs de base de données ------------------------------- - -Un adaptateur spécifique peut être passé au validateur. Dans le cas contraire, il utilisera l'adaptateur -déclaré comme étant celui par défaut: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Db\RecordExists('users', 'id', null, $dbAdapter); - -.. _zend.validator.db.database-schemas: - -Nom des bases de données ------------------------- - -Vous pouvez spécifier un nom de base de données (schéma) pour l'adaptateur PostgreSQL et DB/2 simplement grâce -à un tableau possédant les clés *table* et *schema*. Voici un exemple: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Db\RecordExists(array('table' => 'users', - 'schema' => 'my'), 'id'); - - diff --git a/docs/languages/fr/modules/zend.validator.digits.rst b/docs/languages/fr/modules/zend.validator.digits.rst deleted file mode 100644 index 0ecdf9007..000000000 --- a/docs/languages/fr/modules/zend.validator.digits.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.digits: - -Digits -====== - -``Zend\Validate\Digit`` valide si une donnée contient des chiffres. - -.. _zend.validator.set.digits.options: - -Options supportées par Zend\Validate\Digits -------------------------------------------- - -Aucun option n'est gérée par ``Zend\Validate\Digits`` - -.. _zend.validator.set.digits.basic: - -Valider des chiffres --------------------- - -Pour valider si une donnée ne contient que des chiffres et pas d'autre caractère, appelez simplement le -validateur comme montré dans l'exemple suivant: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Digits(); - - $validator->isValid("1234567890"); // retourne true - $validator->isValid(1234); // retourne true - $validator->isValid('1a234'); // retourne false - -.. note:: - - **Valider des nombres** - - Si vous voulez valider des nombres ou des valeurs numériques, faites attention car ce validateur ne valide que - les chiffres. Ceci signifie que les signes comme les séparateurs des milliers ou les virgules ne seront pas - pris en compte et le validateur échouera. Voyez pour ces cas ``Zend\Validate\Int`` ou ``Zend\Validate\Float``. - - diff --git a/docs/languages/fr/modules/zend.validator.email-address.rst b/docs/languages/fr/modules/zend.validator.email-address.rst deleted file mode 100644 index 2966e891f..000000000 --- a/docs/languages/fr/modules/zend.validator.email-address.rst +++ /dev/null @@ -1,250 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.email_address: - -EmailAddress -============ - -``Zend\Validate\EmailAddress`` permet de valider une adresse émail. Ce validateur éclate d'abord l'adresse émail -entre partie locale et domaine et essaie de valider ces deux parties conformément aux spécifications des adresses -émail et des noms de domaine. - -.. _zend.validator.set.email_address.basic: - -Utilisation de base -------------------- - -Vous trouverez ci-dessous un exemple d'utilisation basique  - -.. code-block:: php - :linenos: - - $validateur = new Zend\Validate\EmailAddress(); - if ($validateur->isValid($email)) { - // l'email est valide - } else { - // l'email est invalide ; afficher pourquoi - foreach ($validateur->getMessages() as $message) { - echo "$message\n"; - } - } - -Ceci validera l'adresse émail ``$email`` et, en cas d'échec, fournira des messages d'erreur informatifs via -*$validator->getMessages()*. - -.. _zend.validator.set.email_address.options: - -Options for validating Email Addresses --------------------------------------- - -``Zend\Validate\EmailAddress`` supports several options which can either be set at initiation, by giving an array -with the related options, or afterwards, by using ``setOptions()``. The following options are supported: - -- **allow**: Defines which type of domain names are accepted. This option is used in conjunction with the hostname - option to set the hostname validator. For more informations about possible values of this option, look at - :ref:`Hostname ` and possible ``ALLOW``\ * constants. This option defaults to - ``ALLOW_DNS``. - -- **deep**: Defines if the servers MX records should be verified by a deep check. When this option is set to - ``TRUE`` then additionally to MX records also the A, A6 and ``AAAA`` records are used to verify if the server - accepts emails. This option defaults to ``FALSE``. - -- **domain**: Defines if the domain part should be checked. When this option is set to ``FALSE``, then only the - local part of the email address will be checked. In this case the hostname validator will not be called. This - option defaults to ``TRUE``. - -- **hostname**: Sets the hostname validator with which the domain part of the email address will be validated. - -- **mx**: Defines if the MX records from the server should be detected. If this option is defined to ``TRUE`` then - the MX records are used to verify if the server accepts emails. This option defaults to ``FALSE``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - $validator->setOptions(array('domain' => false)); - -.. _zend.validator.set.email_address.complexlocal: - -Parties locales complexes -------------------------- - -``Zend\Validate\EmailAddress`` validera toute adresse émail conforme à la RFC2822. Comme par exemple -*bob@domaine.com*, *bob+jones@domaine.fr*, *"bob@jones"@domaine.com* et *"bob jones"@domaine.com*. Quelques formats -d'émail obsolètes ne seront pas validés (comme tout émail contenant un retour chariot ou un caractère "\\"). - -.. _zend.validator.set.email_address.purelocal: - -Validating only the local part ------------------------------- - -If you need ``Zend\Validate\EmailAddress`` to check only the local part of an email address, and want to disable -validation of the hostname, you can set the ``domain`` option to ``FALSE``. This forces -``Zend\Validate\EmailAddress`` not to validate the hostname part of the email address. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - $validator->setOptions(array('domain' => FALSE)); - -.. _zend.validator.set.email_address.hostnametype: - -Validation de différents types de noms de domaine -------------------------------------------------- - -La partie domaine d'une adresse émail est validée via :ref:`Zend\Validate\Hostname `. -Par défaut, seules les domaines qualifiés sous la forme *domaine.com* sont acceptés, même si, il vous est -possible d'accepter les adresses IP et les domaines locaux également. - -Afin de réaliser cette opération, il vous faut instancier ``Zend\Validate\EmailAddress`` en lui passant un -paramètre indiquant le type de nom de domaine à accepter. Les détails sont disponibles dans -``Zend\Validate\EmailAddress`` mais vous trouverez ci-dessous un exemple illustrant comment accepter les noms de -domaines qualifiés et les hôtes locaux : - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress( - Zend\Validate\Hostname::ALLOW_DNS | - Zend\Validate\Hostname::ALLOW_LOCAL); - if ($validator->isValid($email)) { - // l'email est valide - } else { - // l'email est invalide ; afficher pourquoi - foreach ($validateur->getMessages() as $message) { - echo "$message\n"; - } - } - -.. _zend.validator.set.email_address.checkacceptance: - -Vérification que le nom de domaine accepte réellement l'émail -------------------------------------------------------------- - -Le fait qu'une adresse électronique est dans un format correct, ne signifie pas nécessairement que l'adresse -électronique existe en réalité. Pour aider résoudre ce problème, vous pouvez utiliser la validation MX pour -vérifier si une entrée MX (l'émail) existe dans le l'enregistrement du DNS pour le nom de domaine de l'émail. -Cela vous dit que le nom de domaine accepte l'émail, mais ne vous dit pas que l'adresse électronique elle-même -est valable. - -La vérification MX n'est pas active par défaut et est seulement supporté par des plates-formes UNIX pour -l'instant. Pour activer la vérification MX vous pouvez passer un deuxième paramètre au constructeur -``Zend\Validate\EmailAddress``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'mx' => true - ) - ); - -.. note:: - - **MX Check under Windows** - - Within Windows environments MX checking is only available when *PHP* 5.3 or above is used. Below *PHP* 5.3 MX - checking will not be used even if it's activated within the options. - -Alternativement vous pouvez passer soit ``TRUE`` soit ``FALSE`` à *$validator->setValidateMx()* pour activer ou -désactiver la validation MX. - -En activant ce paramètre, les fonctions de réseau seront utilisés pour vérifier la présence d'un -enregistrement MX sur le nom de domaine de l'adresse électronique que vous voulez valider. Faîtes cependant -attention, cela ralentira probablement votre scénario. - -Sometimes validation for MX records returns ``FALSE``, even if emails are accepted. The reason behind this -behaviour is, that servers can accept emails even if they do not provide a MX record. In this case they can provide -A, A6 or ``AAAA`` records. To allow ``Zend\Validate\EmailAddress`` to check also for these other records, you need -to set deep MX validation. This can be done at initiation by setting the ``deep`` option or by using -``setOptions()``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'mx' => true, - 'deep' => true - ) - ); - -.. warning:: - - **Performance warning** - - You should be aware that enabling MX check will slow down you script because of the used network functions. - Enabling deep check will slow down your script even more as it searches the given server for 3 additional types. - -.. note:: - - **Disallowed IP addresses** - - You should note that MX validation is only accepted for external servers. When deep MX validation is enabled, - then local IP addresses like ``192.168.*`` or ``169.254.*`` are not accepted. - -.. _zend.validator.set.email_address.validateidn: - -Valider les noms de domaines internationaux -------------------------------------------- - -``Zend\Validate\EmailAddress`` peut aussi vérifier les caractères internationaux qui existent dans quelques -domaines. Ceci est connu comme le support de Nom de Domaine International (IDN). Celui-ci est activé par défaut, -quoique vous puissiez le mettre hors service en changeant le paramètre via l'objet interne -``Zend\Validate\Hostname`` qui existe dans ``Zend\Validate\EmailAddress``. - -.. code-block:: php - :linenos: - - $validator->hostnameValidator->setValidateIdn(false); - -De plus amples informations concernant l'utilisation de ``setValidateIdn()`` sont présentes dans la -:ref:`documentation de Zend\Validate\Hostname `. - -Notez cependant que les IDNs sont seulement validés si vous autorisez la validation des nom de domaines. - -.. _zend.validator.set.email_address.validatetld: - -Validation des "Top Level Domains" ----------------------------------- - -Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Ceci est activé par défaut, -quoique vous puissiez le mettre hors service en changeant le paramètre via l'objet ``Zend\Validate\Hostname`` -interne qui existe dans ``Zend\Validate\EmailAddress``. - -.. code-block:: php - :linenos: - - $validator->hostnameValidator->setValidateTld(false); - -De plus amples informations concernant l'utilisation de ``setValidateTld()`` sont présentes dans la -:ref:`documentation de Zend\Validate\Hostname `. - -Notez cependant que les TLDs sont seulement validés si vous autorisez la validation des nom de domaines. - -.. _zend.validator.set.email_address.setmessage: - -Setting messages ----------------- - -``Zend\Validate\EmailAddress`` makes also use of ``Zend\Validate\Hostname`` to check the hostname part of a given -email address. As with Zend Framework 1.10 you can simply set messages for ``Zend\Validate\Hostname`` from within -``Zend\Validate\EmailAddress``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - $validator->setMessages( - array( - Zend\Validate\Hostname::UNKNOWN_TLD => 'I don't know the TLD you gave' - ) - ); - -Before Zend Framework 1.10 you had to attach the messages to your own ``Zend\Validate\Hostname``, and then set this -validator within ``Zend\Validate\EmailAddress`` to get your own messages returned. - - diff --git a/docs/languages/fr/modules/zend.validator.greater-than.rst b/docs/languages/fr/modules/zend.validator.greater-than.rst deleted file mode 100644 index b10d7395a..000000000 --- a/docs/languages/fr/modules/zend.validator.greater-than.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.greaterthan: - -GreaterThan -=========== - -``Zend\Validate\GreaterThan`` permet de valider qu'une valeur est plus grande qu'une autre (la borne). - -.. note:: - - **Zend\Validate\GreaterThan ne supporte que les nombres** - - Zend\Validate\GreaterThan ne fonctionnera pas avec les chaînes ou les dates. - -.. _zend.validator.set.greaterthan.options: - -Options supportées par Zend\Validate\GreaterThan ------------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\GreaterThan``: - -- **min**: Affecte la borne inférieure. - -.. _zend.validator.set.greaterthan.basic: - -Utilisation de base -------------------- - -Voyez l'exemple ci-après. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\GreaterThan(array('min' => 10)); - $value = 10; - $return = $valid->isValid($value); - // retourne true - -L'exemple ci-dessus retourne ``TRUE`` pour toutes les valeurs égales ou supérieures à 10. - - diff --git a/docs/languages/fr/modules/zend.validator.hex.rst b/docs/languages/fr/modules/zend.validator.hex.rst deleted file mode 100644 index 30e6b93e9..000000000 --- a/docs/languages/fr/modules/zend.validator.hex.rst +++ /dev/null @@ -1,35 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.hex: - -Hex -=== - -``Zend\Validate\Hex`` permet de valider qu'un nombre ne contienne bien que des caractères hexadécimaux. Ce sont -les caractères de **0 à 9** et de **A à F** insensibles à la casse. Il n'existe pas de limite de longueur de la -chaîne à valider. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Hex(); - if ($validator->isValid('123ABC')) { - // value ne contient que des caractères hex - } else { - // false - } - -.. note:: - - **Caractères invalides** - - Tous les autres caractères retourneront false, même l'espace et le point. Les zéros unicode ou les chiffres - d'autres encodages que latin seront considérés comme invalides. - -.. _zend.validator.set.hex.options: - -Options supportées par Zend\Validate\Hex ----------------------------------------- - -Il n'y a pas d'options additionnelles supportées par ``Zend\Validate\Hex``: - - diff --git a/docs/languages/fr/modules/zend.validator.hostname.rst b/docs/languages/fr/modules/zend.validator.hostname.rst deleted file mode 100644 index caf08b572..000000000 --- a/docs/languages/fr/modules/zend.validator.hostname.rst +++ /dev/null @@ -1,132 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.hostname: - -Hostname -======== - -``Zend\Validate\Hostname`` vous permet de valider un nom de domaine sur la base d'un ensemble de spécifications -connues. Il est ainsi possible de valider trois types différents de noms de domaine : un nom de domaine qualifié -(ex : domaine.com), une adresse IP (ex : 1.2.3.4) ou un nom de domaine local (ex : localhost). Par défaut, seul -les noms de domaine qualifiés sont acceptés. - -**Utilisation basique** - -Exemple simple : - - .. code-block:: php - :linenos: - - $validateur = new Zend\Validate\Hostname(); - if ($validateur->isValid($domaine)) { - // le nom de domaine est valide - } else { - // le nom de domaine est invalide ; afficher pourquoi - foreach ($validateur->getMessages() as $message) { - echo "$message\n"; - } - } - -Ceci validera le domaine ``$domaine`` et, en cas d'échec, fournira des messages d'erreur informatifs via -*$validator->getMessages()*. - -**Validation de différents types de noms de domaine** - -Il peut se trouver que vous souhaitez valider des adresses IP, des noms de domaine locaux ou toute combinaison de -tous les types disponibles. Cette opération peut être effectuée en passant un paramètre à -``Zend\Validate\Hostname`` au moment de l'instanciation. Le paramètre doit être un entier qui détermine quels -types de noms de domaine sont admis. Il est recommandé d'utiliser les constantes de la classe -``Zend\Validate\Hostname``. - -Les constantes de ``Zend\Validate\Hostname`` sont : ``ALLOW_DNS`` qui autorise uniquement les noms de domaine -qualifiés, ``ALLOW_IP`` qui autorise les adresses IP, ``ALLOW_LOCAL`` qui autorise les domaines locaux et -``ALLOW_ALL`` qui autorise les trois types précédents. Pour vérifier uniquement les adresses IP, vous pouvez -utiliser l'exemple suivant : - - .. code-block:: php - :linenos: - - $validateur = new Zend\Validate\Hostname(Zend\Validate\Hostname::ALLOW_IP); - if ($validateur->isValid($hostname)) { - // le nom de domaine est valide - } else { - // le nom de domaine est invalide ; afficher pourquoi - foreach ($validateur->getMessages() as $message) { - echo "$message\n"; - } - } - - - -Vous pouvez utiliser ``ALLOW_ALL`` pour accepter tous les types de domaines. De même, vous pouvez créer des -configurations combinant ces différents types. Par exemple, pour accepter les domaines qualifiés et les domaines -locaux, instanciez votre objet ``Zend\Validate\Hostname`` de la manière suivante : - - .. code-block:: php - :linenos: - - $validateur = new Zend\Validate\Hostname(Zend\Validate\Hostname::ALLOW_DNS | - Zend\Validate\Hostname::ALLOW_IP); - - - -**Validation de Nom de Domaine International (IDN)** - -Certains noms de domaines nationaux (Country Code Top Level Domains ou ccTLD), comme .de (Allemagne), supporte les -caractères internationaux dans leurs noms de domaine. Ceci est connu sous le nom de Nom de Domaine International -(IDN). Ces domaines peuvent être vérifiés par ``Zend\Validate\Hostname`` grâce aux caractères étendus qui -sont utilisés dans le processus de validation. - -Jusqu'à maintenant plus de 50 ccTLDs supportent les domaines IDN. - -Pour vérifier un domaine IDN c'est aussi simple que d'utiliser le validateur standard de nom de domaine puisque la -validation IDN est activé par défaut. Si vous voulez mettre hors service la validation IDN, cela peut être fait -par le passage d'un paramètre au constructeur ``Zend\Validate\Hostname`` ou via la méthode -*$validator->setValidateIdn()*. - -Vous pouvez aussi désactiver la validation IDN en passant un second paramètre au constructeur du -``Zend\Validate\Hostname`` comme ceci : - - .. code-block:: php - :linenos: - - $validator = - new Zend\Validate\Hostname( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'idn' => false - ) - ); - -Alternativement vous pouvez passer soit ``TRUE`` soit ``FALSE`` à *$validator->setValidateIdn()* pour activer ou -désactiver la validation IDN. Si vous essayez de vérifier un nom de domaine IDN qui n'est pas actuellement -soutenu il est probable qu'il retournera une erreur s'il y a des caractères internationaux. Quand un fichier de -ccTLD spécifiant les caractères supplémentaires n'existe pas dans "Zend/Validate/Hostname",une validation de nom -de domaine normale est réalisée. - -Notez cependant que les IDNs sont seulement validés si vous autorisez la validation des noms de domaine. - -**Validation des "Top Level Domains"** - -Par défaut un nom de domaine sera vérifié grâce à une liste de TLDs connus. Si cette fonctionnalité n'est pas -nécessaire, elle peut être désactivée de la même façon que la désactivation du support des IDNs. Vous pouvez -désactiver la validation TLD en passant un troisième paramètre au constructeur de ``Zend\Validate\Hostname``. -Dans l'exemple ci-dessous, la validation IDN est supportée via le second paramètre. - - .. code-block:: php - :linenos: - - $validator = - new Zend\Validate\Hostname( - array( - 'allow' => Zend\Validate\Hostname::ALLOW_DNS, - 'idn' => true, - 'tld' => false - ) - ); - -Alternativement vous pouvez passer soit ``TRUE`` soit ``FALSE`` à *$validator->setValidateTld()* pour activer ou -désactiver la validation TLD. - -Notez cependant que les TLDs sont seulement validés si vous autorisez la validation des noms de domaine. - - diff --git a/docs/languages/fr/modules/zend.validator.iban.rst b/docs/languages/fr/modules/zend.validator.iban.rst deleted file mode 100644 index 2fd1c1905..000000000 --- a/docs/languages/fr/modules/zend.validator.iban.rst +++ /dev/null @@ -1,110 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.iban: - -Iban -==== - -``Zend\Validate\Iban`` valide si un nombre donnée est un numéro *IBAN* number. *IBAN* est l'abréviation de -"International Bank Account Number". - -.. _zend.validator.set.iban.options: - -Options supportées par Zend\Validate\Iban ------------------------------------------ - -Les options suivantes sont supportées par ``Zend\Validate\Iban``: - -- **locale**: Affecte la locale à utiliser pour la validation du format du numéro *IBAN*. - -.. _zend.validator.set.iban.basic: - -Validation IBAN ---------------- - -Les numéros *IBAN* sont toujours relatifs à un pays. Ceci signifie que différents pays utilisent des formats -différents de numéros *IBAN*. C'est la raison pour laquelle les numéros *IBAN* ont toujours besoin d'une locale. -Sachant cela, nous savons déja utiliser ``Zend\Validate\Iban``. - -.. _zend.validator.set.iban.basic.application: - -Locale globale à l'application -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Nous pourrions utiliser la locale globale à l'application. Ainsi si on ne passe aucune option à l'initialisation -de ``Zend\Validate\Iban``, celui-ci va chercher la locale globale. Voyez le code qui suit: - -.. code-block:: php - :linenos: - - // dans le bootstrap - Zend\Registry\Registry::set('Zend_Locale', new Zend\Locale\Locale('de_AT')); - - // dans le module - $validator = new Zend\Validate\Iban(); - - if ($validator->isValid('AT611904300234573201')) { - // IBAN est valide - } else { - // IBAN n'est pas valide - } - -.. note:: - - **Locale globale à l'application** - - Bien sûr cela ne fonctionne que lorsqu'une locale globale a été spécifiée et enregistrée dans le registre. - Sinon, ``Zend_Locale`` va essayer d'utiliser la locale que le client envoie, si aucune n'a été envoyée, la - locale de l'environnement sera utilisée. Méfiez-vous cela peut mener à des comportements non voulus lors de - la validation. - -.. _zend.validator.set.iban.basic.false: - -Validation IBAN simplifiée -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Il peut arriver parfois que vous ayez juste besoin de vérifier le format du numéro et s'il **est** un numéro -*IBAN*. Vous ne voudriez pas utiliser un pays particulier pour valider. Ceci peut être réalisé en passant -``FALSE`` en tant que locale. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Iban(array('locale' => false)); - // Note: Vous pouvez aussi passer FALSE comme paramètre unique (sans tableau) - - if ($validator->isValid('AT611904300234573201')) { - // IBAN est valide - } else { - // IBAN n'est pas valide - } - -Ainsi **tout** numéro *IBAN* sera valide. Notez que ceci ne devrait pas être utilisé si vous ne supportez qu'un -seul pays. - -.. _zend.validator.set.iban.basic.aware: - -Validation IBAN en fonction d'un pays -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Pour valider par rapport à un pays/région, passez simplement la locale désirée. L'option ``locale`` peut alors -être utilisée ou la méthode ``setLocale()``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Iban(array('locale' => 'de_AT')); - - if ($validator->isValid('AT611904300234573201')) { - // IBAN est valide - } else { - // IBAN n'est pas valide - } - -.. note:: - - **Utilisez des locales pleinement qualifiées** - - Vous devez passer une locale pleinement qualifiée sinon le nom de la région ne pourra être trouvé et - utilisé. - - diff --git a/docs/languages/fr/modules/zend.validator.identical.rst b/docs/languages/fr/modules/zend.validator.identical.rst deleted file mode 100644 index dd96be7fc..000000000 --- a/docs/languages/fr/modules/zend.validator.identical.rst +++ /dev/null @@ -1,110 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.identical: - -Identical -========= - -``Zend\Validate\Identical`` vous permet de valider si une valeur donnée est identique à une valeur préalablement -fournie. - -.. _zend.validator.set.identical.options: - -Options supportées par Zend\Validate\Identical ----------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\Identical``\  : - -- **token**\  : spécifie la valeur qui servira à la validation de l'entrée. - -.. _zend.validator.set.identical.basic: - -Utilisation de base -------------------- - -Pour valider si deux valeurs sont identiques, vous devez d'abord fournir la valeur d'origine. L'exemple montre la -validation de deux chaînes : - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical('origin'); - if ($valid->isValid($value) { - return true; - } - -La validation retournera ``TRUE`` seulement si les deux valeurs sont rigoureusement identiques. Dans notre exemple, -quand ``$value`` vaudra "origin". - -Vous pouvez aussi fournir la valeur souhaitée plus tard en utilisant la méthode ``setToken()`` et ``getToken()`` -pour récupérer la valeur actuellement paramétrée. - -.. _zend.validator.set.identical.types: - -Objets identiques ------------------ - -Bien sûr ``Zend\Validate\Identical`` ne se limite pas à la validation de chaînes, mais aussi tout type de -variable comme un booléen, un entier, un flottant, un tableau et même les objets. Comme énoncé ci-dessus, les -valeurs fournies et à valider doivent être identiques. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical(123); - if ($valid->isValid($input)) { - // l'entrée est valide - } else { - // l'entrée est incorrecte - } - -.. note:: - - **Comparaison de type** - - Il est important de noter que le type de la variable sert aussi lors de la validation. Ceci veut dire que la - chaîne **"3"** n'est pas identique à l'entier **3**. - - Ceci est aussi valable pour les éléments de formulaires. Ce sont des objets ou des tableaux. Donc vous ne - pouvez pas simplement comparer un champs texte qui contient un mot de passe avec une valeur textuelle provenant - d'une autre source. L'élément de formualire lui-même est fourni en tant que tableau qui peut aussi contenir - des informations additionnelles. - -.. _zend.validator.set.identical.configuration: - -Configuration -------------- - -Comme tous les autres validateurs ``Zend\Validate\Identical`` supporte aussi des paramètres de configuration en -tant que paramètre d'entrée. Ceci veut dire que vous pouvez configurer ce validateur avec une objet -``Zend_Config``. - -Mais ceci entraîne un changement dont vous devez tenir compte. Quand vous utilisez un tableau en tant qu'entrée -du constructeur, vous devez envelopper la valeur d'origine avec la clé ``token``, dans ce cas elle contiendra une -valeur unique. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical(array('token' => 123)); - if ($valid->isValid($input)) { - // l'entrée est valide - } else { - // l'entrée est incorrecte - } - -L'exemple ci-dessus valide l'entier 123 car vous avez fourni la valeur en l'associant à la clé ``token``. - -Mais, si vous devez valider un tableau qui contient un seul élément et que cet élément est nommé ``token`` -alors vous devez l'envelopper comme dans l'example ci-dessous : - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\Identical(array('token' => array('token' => 123))); - if ($valid->isValid($input)) { - // l'entrée est valide - } else { - // l'entrée est incorrecte - } - - diff --git a/docs/languages/fr/modules/zend.validator.in-array.rst b/docs/languages/fr/modules/zend.validator.in-array.rst deleted file mode 100644 index 8a04176d5..000000000 --- a/docs/languages/fr/modules/zend.validator.in-array.rst +++ /dev/null @@ -1,165 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.in_array: - -InArray -======= - -``Zend\Validate\InArray`` vous permet de valider qu'une entrée est bien présente dans un tableau. Ceci fonctionne -aussi avec des tableaux multidimensionnels. - -.. _zend.validator.set.in_array.options: - -Options supportées par Zend\Validate\InArray --------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\InArray``\  : - -- **haystack**\  : spécifie le tableau pour la validation. - -- **recursive**\  : définit si la validation doit être recursive. Cette option vaut ``FALSE`` par défaut. - -- **strict**\  : définit si la validation doit être strict (même type). Cette option vaut ``FALSE`` par - défaut. - -.. _zend.validator.set.in_array.basic: - -Validation tableau simple -------------------------- - -Passez simplement un tableau dans lequel rechercher une valeur: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray(array('key' => 'value', - 'otherkey' => 'othervalue')); - if ($validator->isValid('value')) { - // value trouvée - } else { - // value non trouvée - } - -C'est le comportement exact de la fonction PHP ``in_array()``. - -.. note:: - - Par défaut la validation est non stricte et ne valide pas les multiples dimensions. - -Bien sûr vous pouvez fournir le tableau à valider plus tard en utilisant la méthode ``setHaystack()``. La -méthode ``getHaystack()`` retourne le tableau actuellement fourni. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray(); - $validator->setHaystack(array('key' => 'value', 'otherkey' => 'othervalue')); - - if ($validator->isValid('value')) { - // valeur trouvée - } else { - // valeur non trouvée - } - -.. _zend.validator.set.in_array.strict: - -Validation tableau stricte --------------------------- - -Il est possible d'effectuer une validation stricte des données dans le tableau. Par défaut, il n'y aura aucune -différence entre l'entier **0** et la chaine **"0"**. La validation stricte fera cette différence. - -Pour spécifier une validation stricte à l'instanciation de l'objet, agissez comme suit : - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray( - array( - 'haystack' => array('key' => 'value', 'otherkey' => 'othervalue'), - 'strict' => true - ) - ); - - if ($validator->isValid('value')) { - // valeur trouvée - } else { - // valeur non trouvée - } - -La clé **haystack** contient le tableau dans lequel valider. En mettant la clé **strict** à ``TRUE``, la -validation sera stricte (valeur et type). - -Bien sûr vous pouvez la méthode ``setStrict()`` pour changer ce réglage et la méthode ``getStrict()`` vous -retournera le réglage en cours. - -.. note:: - - Notez que par défaut, **strict** a la valeur ``FALSE``. - -.. _zend.validator.set.in_array.recursive: - -Validation de tableaux récursifs --------------------------------- - -En plus de la validation type *PHP* ``in_array()``, ce validateur peut aussi être utilisé pour valider des -tableaux à plusieurs dimensions. - -Pour cela, utilisez l'option **recursive**. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray( - array( - 'haystack' => array( - 'firstDimension' => array('key' => 'value', - 'otherkey' => 'othervalue'), - 'secondDimension' => array('some' => 'real', - 'different' => 'key')), - 'recursive' => true - ) - ); - - if ($validator->isValid('value')) { - // value trouvée - } else { - // value non trouvée - } - -Votre tableau sera parcouru récursivement à la recherche de votre valeur. De plus vous pouvez utiliser la -méthode ``setRecursive()`` pour paramétrer cette option plus tard et la méthode ``getRecursive()`` pour la -retrouver. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\InArray( - array( - 'firstDimension' => array('key' => 'value', - 'otherkey' => 'othervalue'), - 'secondDimension' => array('some' => 'real', - 'different' => 'key') - ) - ); - $validator->setRecursive(true); - - if ($validator->isValid('value')) { - // valeur trouvée - } else { - // valeur non trouvée - } - -.. note:: - - **Réglage par défaut pour la récursivité** - - Par défaut, la récursivité n'est pas activée. - -.. note:: - - **Options pour la "haystack"** - - Lorsque vous utilisez les clés ``haystack``, ``strict`` ou ``recursive`` à l'intérieur de votre pile, vous - devez alors envelopper la clé ``haystack``. - - diff --git a/docs/languages/fr/modules/zend.validator.ip.rst b/docs/languages/fr/modules/zend.validator.ip.rst deleted file mode 100644 index aa7b18c16..000000000 --- a/docs/languages/fr/modules/zend.validator.ip.rst +++ /dev/null @@ -1,80 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.set.ip: - -Ip -== - -``Zend\Validate\Ip`` permet de déterminer si une adresse IP donnée est valide. Le composant supporte IPv4 et -IPv6. - -.. _zend.validate.set.ip.options: - -Options supportées par Zend\Validate\Ip ---------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\Ip``\  : - -- **allowipv4**\  : définit si la validation autorise les adresses IPv4. Cette option vaut ``TRUE`` par défaut. - -- **allowipv6**\  : définit si la validation autorise les adresses IPv6. Cette option vaut ``TRUE`` par défaut. - -.. _zend.validate.set.ip.basic: - -Utilisation classique ---------------------- - -Voici un exemple banal: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Ip(); - if ($validator->isValid($ip)) { - // ip semble valide - } else { - // ip n'est pas valide - } - -.. note:: - - **adresses IP invalides** - - ``Zend\Validate\Ip`` ne valide que des adresses IP. '``mydomain.com``' ou '``192.168.50.1/index.html``' ne sont - donc pas des adresses IP valides. Ce sont des noms de domaines ou des *URL*\ s mais pas des adresses IP. - -.. note:: - - **Validation IPv6** - - ``Zend\Validate\Ip`` valides les adresses IPv6 au moyen d'expressions régulières. La raison est que les - fonctions fournies par PHP ne suivent pas la *RFC*. Beaucoup d'autres classes disponibles font de même. - -.. _zend.validate.set.ip.singletype: - -Valider IPv4 ou IPV6 seules ---------------------------- - -Il peut arriver de ne vouloir valider qu'un seul des deux formats. Par exemple si le réseau ne supporte pas IPv6, -il serait idiot de demander une telle validation. - -Pour limiter ``Zend\Validate\Ip`` sur un seul des deux protocoles, utilisez les options ``allowipv4`` ou -``allowipv6`` et mettez les à ``FALSE``. Il est possible d'effectuer cela au moyen du constructeur ou avec la -méthode ``setOptions()``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Ip(array('allowipv6' => false); - if ($validator->isValid($ip)) { - // ip semble être une IPv4 valide - } else { - // ip n'est pas une adresse IPv4 - } - -.. note:: - - **Comportement par défaut** - - Le comportement par défaut de ``Zend\Validate\Ip`` est de valider les deux standards. - - diff --git a/docs/languages/fr/modules/zend.validator.isbn.rst b/docs/languages/fr/modules/zend.validator.isbn.rst deleted file mode 100644 index ce88ce1af..000000000 --- a/docs/languages/fr/modules/zend.validator.isbn.rst +++ /dev/null @@ -1,113 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.isbn: - -Isbn -==== - -``Zend\Validate\Isbn`` permet de valider des valeurs *ISBN-10* ou *ISBN-13*. - -.. _zend.validator.set.isbn.options: - -Options supportées par Zend\Validate\Isbn ------------------------------------------ - -Les options suivantes sont supportées par ``Zend\Validate\Isbn``\  : - -- **separator**\  : définit le séparateur autorisé pour la valeur *ISBN*. Par défaut, il s'agit d'une chaîne - vide. - -- **type**\  : définit le type des valeurs *ISBN* autorisées. Par défaut, il s'agit de - ``Zend\Validate\Isbn::AUTO``. Pour plus de détails reportez vous à :ref:`cette section - `. - -.. _zend.validator.set.isbn.basic: - -Utilisation classique ---------------------- - -Voici un exemple banal : - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Isbn(); - if ($validator->isValid($isbn)) { - // isbn valide - } else { - // isbn non valide - } - -Ceci valide tout *ISBN-10* et *ISBN-13* sans séparateur. - -.. _zend.validator.set.isbn.type-explicit: - -Configurer un type de validation ISBN explicite ------------------------------------------------ - -Voici comment effectuer une restriction de type de l'*ISBN*\  : - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Isbn(); - $validator->setType(Zend\Validate\Isbn::ISBN13); - // OU - $validator = new Zend\Validate\Isbn(array( - 'type' => Zend\Validate\Isbn::ISBN13, - )); - - if ($validator->isValid($isbn)) { - // ISBN-13 valide - } else { - // ISBN-13 invalide - } - -Seules les valeurs de *ISBN-13* sont validées ci-dessus. - -Les types valides sont : - -- ``Zend\Validate\Isbn::AUTO`` (défaut) - -- ``Zend\Validate\Isbn::ISBN10`` - -- ``Zend\Validate\Isbn::ISBN13`` - -.. _zend.validator.set.isbn.separator: - -Spécifier une restriction de séparateur ---------------------------------------- - -Voici un exemple de restriction de séparateur : - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Isbn(); - $validator->setSeparator('-'); - // OU - $validator = new Zend\Validate\Isbn(array( - 'separator' => '-', - )); - - if ($validator->isValid($isbn)) { - // ISBN valide avec séparateur - } else { - // ISBN invalide avec séparateur - } - -.. note:: - - **Valeurs sans séparateur** - - La valeur ``FALSE`` est retournée si ``$isbn`` ne contient pas de séparateur **ou** si le séparateur n'est - pas valide. - -Séparateurs valides : - -- "" (vide) (défaut) - -- "-" (tiret) - -- " " (espace) - - diff --git a/docs/languages/fr/modules/zend.validator.less-than.rst b/docs/languages/fr/modules/zend.validator.less-than.rst deleted file mode 100644 index 0b6b5aa58..000000000 --- a/docs/languages/fr/modules/zend.validator.less-than.rst +++ /dev/null @@ -1,42 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.lessthan: - -LessThan -======== - -``Zend\Validate\LessThan`` permet de valider qu'une donnée est bien inférieure à une borne. C'est l'opposé de -``Zend\Validate\GreaterThan``. - -.. note:: - - **Zend\Validate\LessThan ne supporte que les chiffres** - - ``Zend\Validate\LessThan`` ne fonctionnera pas avec les chaînes et les dates. - -.. _zend.validator.set.lessthan.options: - -Options gérées par Zend\Validate\LessThan ------------------------------------------ - -Les options suivantes sont supportées par ``Zend\Validate\LessThan``: - -- **max**: Affecte la borne supérieure. - -.. _zend.validator.set.lessthan.basic: - -Utilisation de base -------------------- - -Voyez l'exemple ci-après. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\LessThan(array('max' => 10)); - $value = 10; - $return = $valid->isValid($value); - // retourne true - -L'exemple ci-dessus retourne ``TRUE`` pour toutes les valeurs égales ou inférieures à 10. - - diff --git a/docs/languages/fr/modules/zend.validator.messages.rst b/docs/languages/fr/modules/zend.validator.messages.rst deleted file mode 100644 index ed79ebff5..000000000 --- a/docs/languages/fr/modules/zend.validator.messages.rst +++ /dev/null @@ -1,118 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.messages: - -Messages de validation -====================== - -Chaque validateur basé sur ``Zend_Validate`` propose un ou plusieurs messages dans le cas d'un échec. Vous pouvez -utiliser ces informations pour créer vos propres messages ou pour traduire les messages présents. - -Ces messages sont représentés par des constantes se trouvant en haut de chaque classe de validateur. Voyons -``Zend\Validate\GreaterThan`` pour un exemple complet: - -.. code-block:: php - :linenos: - - protected $_messageTemplates = array( - self::NOT_GREATER => "'%value%' n'est pas plus grande que '%min%'", - ); - -Comme vous le voyez, la constante ``self::NOT_GREATER`` fait référence à un échec et est utilisée comme clé, -le message lui-même est utilisé comme valeur dans le tableau des messages. - -Vous pouvez récupérer les templates de messages d'un validateur en utilisant la méthode -``getMessageTemplates()``. Elle vous retourne le tableau comme vu ci-dessus qui contient tous les messages que le -validateur pourrait retourner en cas d'échec de validation. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\GreaterThan(); - $messages = $validator->getMessageTemplates(); - -La méthode ``setMessage()`` permet de modifier un message unique correspondant à un cas particulier d'échec de -validation. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\GreaterThan(); - $validator->setMessage('Entrez une valeur plus petite', Zend\Validate\GreaterThan::NOT_GREATER); - -Le deuxième paramètre indique le cas d'échec à surcharger. Lorsque vous omettez ce paramètre, alors le message -précisé sera affecté comme message pour tous les cas d'échec possibles du validateur. - -.. _zend.validator.messages.pretranslated: - -Utiliser les messages de validations pré-traduits -------------------------------------------------- - -Zend Framework est livré avec plus de 45 validateurs différents et plus de 200 messages d'échecs. Cela -peut-être pénible de tous les traduire. Pour votre convenance, Zend Framework est livré avec des messages -d'échec pré-traduits. Vous les trouverez dans ``/resources/languages`` de votre installation de Zend Framework. - -.. note:: - - **Chemin utilisé** - - Les fichiers de ressources sont en dehors du dossier library car les traductions sont sensées être en dehors - de ce chemin. - -Donc pour traduire les messages de validation en français par exemple, tout ce qu'il y a à faire est d'attacher -un objet de traduction à ``Zend_Validate`` en utilisant les fichiers de ressources (pré-traductions). - -.. code-block:: php - :linenos: - - $translator = new Zend\Translator\Translator( - array( - 'adapter' => 'array', - 'content' => '/resources/languages', - 'locale' => $language, - 'scan' => Zend\Translator\Translator::LOCALE_DIRECTORY - ) - ); - Zend\Validate\Abstract::setDefaultTranslator($translator); - -.. note:: - - **Adaptateur de traduction utilisé** - - L'adaptateur array a été utilisé, ceci pour permettre une modification simple des messages pré-traduits. - -.. note:: - - **Langues supportées** - - Cette caractéristique de pré-traduction est jeune, donc le nombre de langues supportées peut ne pas être - complet. De nouvelles langues seront ajoutées dans les sorties futures. - - Vous pouvez aussi partir de ces fichiers pré-traduits pour créer vos propres traductions, par exemple. - -.. _zend.validator.messages.limitation: - -Limiter la taille d'un message de validation --------------------------------------------- - -Il peut être nécessaire parfois de limiter la taille en caractères des messages d'erreur retournés. par exemple -si une vue n'autorise que 100 caractères par ligne. ``Zend_Validate`` propose une telle option. - -La taille actuelle est ``Zend\Validate\Validate::getMessageLength()``. -1 signifie que le message ne sera pas tronqué et -entièrement retourné, c'est le comportement par défaut. - -Pour limiter la taille, utilisez ``Zend\Validate\Validate::setMessageLength()``. Lorsque la taille excède cette valeur, le -message sera alors tronqué et suivi de '**...**'. - -.. code-block:: php - :linenos: - - Zend\Validate\Validate::setMessageLength(100); - -.. note:: - - **Où ce paramètre est-il utilisé ?** - - La taille des messages affecte aussi les messages personnalisés enregistrés, dès que le validateur - considéré étend ``Zend\Validate\Abstract``. - - diff --git a/docs/languages/fr/modules/zend.validator.not-empty.rst b/docs/languages/fr/modules/zend.validator.not-empty.rst deleted file mode 100644 index 8fc0e1c1d..000000000 --- a/docs/languages/fr/modules/zend.validator.not-empty.rst +++ /dev/null @@ -1,108 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.notempty: - -NotEmpty -======== - -Ce validateur permet de déterminer si une valeur est non vide. C'est utile lorsque vous travaillez avec des -formulaires ou des entrées utilisateur, là où vous pouvez l'utiliser pour savoir si des éléments requis ont -été saisis. - -.. _zend.validator.set.notempty.options: - -Options supportées par Zend\Validate\NotEmpty ---------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\NotEmpty``\  : - -- **type**\  : paramètre le type de validation qui sera réalisée. Pour plus de détails, reportez vous à - :ref:`cette section `. - -.. _zend.validator.set.notempty.default: - -Comportement par défaut de Zend\Validate\NotEmpty -------------------------------------------------- - -Par défaut, ce validateur fonctionne différement de la fonction *PHP* ``empty()``. En particulier, ce validateur -va évaluer l'entier **0** et la chaîne '**0**' comme vides. - -.. code-block:: php - :linenos: - - $valid = new Zend\Validate\NotEmpty(); - $value = ''; - $result = $valid->isValid($value); - // retourne false - -.. note:: - - **Le comportement par défaut diffère de PHP** - - Sans configuration ajoutée, ``Zend\Validate\NotEmpty`` diffère de *PHP*. - -.. _zend.validator.set.notempty.types: - -Changer le comportement de Zend\Validate\NotEmpty -------------------------------------------------- - -Certains projets ont des opinions différentes sur ce qui peut être considéré comme 'vide'. Une chaîne seulement -composée d'espaces blancs pourrait être considérée comme vide, ou **0** pourrait être considéré comme -non-vide (surtout dans les séquences logiques booléennes). Pour correspondre aux différents besoins, -``Zend\Validate\NotEmpty`` vous permet de configurer les types que vous considérez comme vides. - -Les types suivants sont gérés : - -- **booléen**\  : Retourne ``FALSE`` lorsque la valeur booléenne est ``FALSE``. - -- **entier**\  : Retourne ``FALSE`` lorsque l'entier **0** est passé. Par défaut cette validation n'est pas - activée et retourne ``TRUE`` pour toute valeur d'entier. - -- **flottant**\  : Retourne ``FALSE`` lorsque le flottant **0.0** est passé. Par défaut cette validation n'est - pas activée et retourne ``TRUE`` pour toute valeur de flottant. - -- **chane**\  : Retourne ``FALSE`` lorsque la chaîne vide **''** est passée. - -- **zero**\  : Retourne ``FALSE`` lorsque le seul caractère zéro (**'0'**) est passé. - -- **tableau_vide**\  : Retourne ``FALSE`` lorsqu'un tableau vide **array()** est passé. - -- **null**\  : Retourne ``FALSE`` lorsqu'une valeur ``NULL`` est passée. - -- **php**\  : Retourne ``FALSE`` lorsque la fonction *PHP* ``empty()`` retournerait ``TRUE``. - -- **espace**\  : Retourne ``FALSE`` lorsqu'une chaîne ne contenant que des caractères espace est passée. - -- **tout**\  : Retourne ``FALSE`` pour tous les types gérés cités ci-dessus. - -Toute autre valeur passée retourne ``TRUE`` par défaut. - -Il existe différentes manières de sélectionner les types ci-dessus. Vous pouvez en spécifier un ou plusieurs, -sous forme de tableau ou de constantes ou encore de chaînes. Voyez les exemples ci-après : - -.. code-block:: php - :linenos: - - // Retourne false pour 0 - $validator = new Zend\Validate\NotEmpty(Zend\Validate\NotEmpty::INTEGER); - - // Retourne false pour 0 ou '0' - $validator = new Zend\Validate\NotEmpty( - Zend\Validate\NotEmpty::INTEGER + Zend\NotEmpty\NotEmpty::ZERO - ); - - // Retourne false pour 0 ou '0' - $validator = new Zend\Validate\NotEmpty(array( - Zend\Validate\NotEmpty::INTEGER, - Zend\Validate\NotEmpty::ZERO - )); - - // Retourne false pour 0 ou '0' - $validator = new Zend\Validate\NotEmpty(array( - 'integer', - 'zero', - )); - -Il est aussi possible de passer un objet ``Zend_Config`` afin de préciser les types à utiliser. Après -instantiation, ``setType()`` peut être utilisée. - - diff --git a/docs/languages/fr/modules/zend.validator.post-code.rst b/docs/languages/fr/modules/zend.validator.post-code.rst deleted file mode 100644 index b357787bb..000000000 --- a/docs/languages/fr/modules/zend.validator.post-code.rst +++ /dev/null @@ -1,103 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.post_code: - -PostCode -======== - -``Zend\Validate\PostCode`` vous permet de déterminer si une valeur donnée est un code postal valide. Les codes -postaux siont spécifiques aux villes et dans quelques cas spéciaux sont nommés des codes *ZIP*. - -``Zend\Validate\PostCode`` reconnaît plus de 160 différents formats de codes postaux. Pour sélectionner le format -correct, il existe deux manières. Vous pouvez soit utiliser une locale complète, soit paramétrer votre propre -format manuellement. - -Utiliser la locale est la méthode la plus commode puisque Zend Framework connaît les formats des codes postaux -associés à chaque locale  cependant, vous devez utiliser une locale complète (c'est-à-dire contenant aussi le -spécificateur de région) dans ce cas. Par exemple, la locale "fr" est une bien une locale mais ne peut pas être -utilisée avec ``Zend\Validate\PostCode`` puisqu'elle ne contient pas la région ; "fr_FR" sera, cependant, une -locale valide puisqu'elle spécifie une région ("FR", pour France). - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('fr_FR'); - -Quand vous ne paramétrez pas de locale vous-même, alors ``Zend\Validate\PostCode`` utilisera la locale de -l'application, ou, s'il n'y en a pas, la locale retournée par ``Zend_Locale``. - -.. code-block:: php - :linenos: - - // locale de l'application définie dans le bootstrap - $locale = new Zend\Locale\Locale('fr_FR'); - Zend\Registry\Registry::set('Zend_Locale', $locale); - $validator = new Zend\Validate\PostCode(); - -Vous pouvez changer la locale plus tard en appelant ``setLocale()``. Et bien sûr vous pouvez récupérer la locale -courante avec ``getLocale()``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('fr_FR'); - $validator->setLocale('en_GB'); - -Les formats de codes postaux sont simplement des chaînes d'expressions régulières. Quand le format de code -postal international, qui est utilisé en paramétrant la locale, ne correspond pas à vos besoins, alors vous -pouvez alors paramétrer manuellement un format en appelant ``setFormat()``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('fr_FR'); - $validator->setFormat('FR-\d{5}'); - -.. note:: - - **Conventions pour les formats personnalisés** - - Lors de l'utilisation de formats personnalisés, vous devez omettre les balises de début (``'/^'``) et de fin - (``'$/'``). Elles sont ajoutés automatiquement. - - Vous devez faire attention au fait que les valeurs de code postal sont toujours validées de manière stricte. - Ce qui veut dire qu'ils doivent être écrits seuls sans caractère additionnel qui ne serait pas couvert par le - format. - -.. _zend.validator.set.post_code.constructor: - -Options du constructeur ------------------------ - -Le plus basiquement possible, vous fournissez soit un objet ``Zend_Locale``, soit une chaîne représentant une -locale complète au constructeur de ``Zend\Validate\PostCode``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode('fr_FR'); - $validator = new Zend\Validate\PostCode($locale); - -De plus, vous pouve zfournir un tableau ou un objet ``Zend_Config`` au constructeur. Quand vous faîtes ceci, vous -devez inclure soit la clé "locale" ou "format" ;celles-ci seront utilisées pour paramétrer les valeurs -appropriées dans l'objet validateur. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\PostCode(array( - 'locale' => 'fr_FR', - 'format' => 'FR-\d+' - )); - -.. _zend.validator.set.post_code.options: - -Options supportées par Zend\Validate\PostCode ---------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\PostCode``\  : - -- **format**\  : spécifie le format de code postal qui sera utilisé pour la validation. - -- **locale**\  : spécifie la locale à partir de laquelle le code postal sera récupéré. - - diff --git a/docs/languages/fr/modules/zend.validator.regex.rst b/docs/languages/fr/modules/zend.validator.regex.rst deleted file mode 100644 index fe6903df2..000000000 --- a/docs/languages/fr/modules/zend.validator.regex.rst +++ /dev/null @@ -1,58 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.regex: - -Regex -===== - -Ce validateur valide si une chaîne correspond à un motif d'expression régulière. - -.. _zend.validator.set.regex.options: - -Options supportées par Zend\Validate\Regex ------------------------------------------- - -Les options suivantes sont supportées par ``Zend\Validate\Regex``\  : - -- **pattern**\  : le motif d'expression régulière. - -.. _zend.validator.set.regex.basic: - -Validation avec Zend\Validate\Regex ------------------------------------ - -La validation au travers d'expressions régulières est pratique, très utilisée et simple dans la mesure où elle -vous évite la plupart du temps d'écrire votre propre validateur. Voyons quelques exemples : - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Regex(array('pattern' => '/^Test/')); - - $validator->isValid("Test"); // retourne true - $validator->isValid("Testing"); // retourne true - $validator->isValid("Pest"); // retourne false - -Comme vous le voyez, le motif doit être passé avec la même forme que pour ``preg_match()``. Pour plus de -détails sur les expressions régulières, voyez `le manuel de PHP sur la syntaxe des motifs d'expressions PCRE`_. - -.. _zend.validator.set.regex.handling: - -Gestion des motifs ------------------- - -Vous pouvez affecter / récupérer le motif après avoir crée le validateur en utilisant les méthodes -``setPattern()`` et ``getPattern()``. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Regex(array('pattern' => '/^Test/')); - $validator->setPattern('ing$/'); - - $validator->isValid("Test"); // retourne false - $validator->isValid("Testing"); // retourne true - $validator->isValid("Pest"); // retourne false - - - -.. _`le manuel de PHP sur la syntaxe des motifs d'expressions PCRE`: http://php.net/manual/en/reference.pcre.pattern.syntax.php diff --git a/docs/languages/fr/modules/zend.validator.rst b/docs/languages/fr/modules/zend.validator.rst deleted file mode 100644 index 3ba24125b..000000000 --- a/docs/languages/fr/modules/zend.validator.rst +++ /dev/null @@ -1,314 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.introduction: - -Introduction -============ - -Le composant ``Zend_Validate`` fournit un ensemble de validateurs usuels. Il fournit également un mécanisme -simple de chaînage permettant d'appliquer de multiples validateurs à une donnée dans un ordre défini par -l'utilisateur. - -.. _zend.validator.introduction.definition: - -Qu'est-ce qu'un validateur ? ----------------------------- - -Un validateur examine ce qui lui est soumis suivant certaines règles et retourne un résultat booléen, si la -donnée est conforme aux exigences. Si ce n'est pas le cas, un validateur peut de manière optionnelle fournir des -informations concernant la (ou les) règle(s) non remplie(s). - -Par exemple, une application Web peut réclamer qu'un identifiant comprennent entre six et douze caractères et ne -contiennent que des caractères alphanumériques. Un validateur peut être utilisé pour s'assurer que les -identifiants remplissent ces règles. Si un identifiant donné ne respecte pas l'une ou plusieurs de ces règles, -il sera utile de savoir laquelle ou lesquelles en particulier. - -.. _zend.validator.introduction.using: - -Utilisation basique des validateurs ------------------------------------ - -Avoir défini la validation de cette manière fournit la fondation de ``Zend\Validate\Interface``, qui définit -deux méthodes, ``isValid()`` et ``getMessages()``. La méthode ``isValid()`` réalise la validation sur la valeur -fournie, en retournant ``TRUE`` si et seulement si la valeur respecte les critères de validation. - -Si ``isValid()`` retourne ``FALSE``, ``getMessages()`` retourne un tableau de messages expliquant la(es) raison(s) -de l'échec de la validation. Les clés du tableau sont des chaînes courtes qui identifient les raisons de -l'échec de la validation, et les valeurs du tableau sont les chaînes de messages humainement lisibles -correspondantes. Les clés et les valeurs sont dépendantes de la classe ; chaque classe de validation définit son -propre jeu de messages d'échec de validation et les clés uniques qui les identifient. Chaque classe possède -aussi une définition de constantes ("*const*") qui rattachent tout identificateur à une cause d'échec de -validation. - -La méthode ``getErrors()`` retourne un tableau d'informations courtes qui identifient la(es) raison(s) de l'échec -de la validation. Ces chaînes sont fournies pour identifier les erreurs. Elles sont destinées à votre code -d'application, et non à être affichées pour l'utilisateur. Ces chaînes sont dépendantes de la classe ; chaque -classe de validation définit ces propres chaînes pour identifier la cause des erreurs. Chaque classe fournit de -plus des constantes (*const*) qui correspondent aux identificateurs d'erreur. - -.. note:: - - La méthode ``getMessages()`` retourne des informations sur l'échec de validation seulement pour l'appel le - plus récent de ``isValid()``. Chaque appel de ``isValid()`` efface les messages et les erreurs déclenchées - par l'appel précédent, car il est probable que chaque appel de ``isValid()`` est réalisé pour des données - d'entrée différentes. - -L'exemple suivant illustre la validation d'une adresse émail : - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - - if ($validator->isValid($email)) { - // l'email est valide - } else { - // l'email est invalide ; affichons pourquoi - foreach ($validator->getMessages() as $messageId => $message) { - echo "Echec de validation '$messageId' : $message\n"; - } - } - - - -.. _zend.validator.introduction.messages: - -Messages personnalisés ----------------------- - -Les classes de validation fournissent une méthode ``setMessage()`` avec laquelle vous pouvez spécifier le format -du message retourné par ``getMessages()`` dans le cas d'un échec de validation. Le premier argument de cette -méthode est une chaîne contenant le message d'erreur. Vous pouvez inclure des balises dans cette chaîne qui -seront substituées avec les données appropriées du validateur. La balise *%value%* est supportée par tous les -validateurs ; elle est substituée par la valeur fournie à ``isValid()``. D'autres balises peuvent être -supportées aux cas par cas par chaque classe de validation. Par exemple, *%max%* est une balise supportée par -``Zend\Validate\LessThan``. La méthode ``getMessageVariables()`` retourne un tableau des balises de variables -supportées par le validateur. - -Le second paramètre optionnel est une chaîne qui identifie le modèle de message d'échec de validation qui doit -être paramètré, ce qui est pratique quand une classe de validation définit plus d'une cause d'échec. Si vous -omettez ce second argument, ``setMessage()`` considère que le message, que vous spécifiez, s'applique au premier -message déclaré dans la classe de validation. La plupart des classes de validation n'ayant qu'un seul message -d'erreur, il n'est pas nécessaire de spécifier distinctement dans ce cas quel message vous affectez. - - - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(8); - - $validator->setMessage( - 'La chaîne \'%value%\' est trop courte ; ' - . 'elle doit être au moins de %min% caractères', - Zend\Validate\StringLength::TOO_SHORT); - - if (!$validator->isValid('word')) { - $messages = $validator->getMessages(); - echo current($messages); - - // affiche "La chaîne 'word' est trop courte ; - // elle doit être au moins de 8 caractères" - } - - - -Vous pouvez régler des messages multiples en utilisant la méthode ``setMessages()``. Son argument dans ce cas est -un tableau de paires clé/message. - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - - $validator->setMessages( array( - Zend\Validate\StringLength::TOO_SHORT => - 'La chaîne \'%value%\' est trop courte', - Zend\Validate\StringLength::TOO_LONG => - 'La chaîne \'%value%\' est trop longue' - )); - - - -Si votre application exige une flexibilité encore plus grande avec laquelle elle rapporte les échecs de -validation, vous pouvez accéder aux propriétés par le même nom que les balises de message supportées par une -classe de validation donnée. La propriété *value* est toujours accessible dans un validateur ; il s'agit de la -valeur fournie comme argument à ``isValid()``. D'autres propriétés peuvent être supportées au cas par cas par -chaque classe de validation. - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - - if (!validator->isValid('word')) { - echo 'Echec du mot : ' - . $validator->value - . ' ; sa longueur n\'est pas compris entre ' - . $validator->min - . ' et ' - . $validator->max - . "\n"; - } - - - -.. _zend.validator.introduction.static: - -Utilisation de la méthode statique is() ---------------------------------------- - -S'il est peu pratique de charger une classe de validation donnée et créer une instance de validateur, vous pouvez -utiliser la méthode statique ``Zend\Validate\Validate::is()`` comme appel alternatif. Le premier argument de cette méthode -est la donnée d'entrée, que vous passeriez à la méthode ``isValid()``. Le deuxième argument est une chaîne, -qui correspond au nom de base de la classe de validation, relativement dans l'espace de noms ``Zend_Validate``. La -méthode ``is()`` charge automatiquement la classe, crée une instance et applique la méthode ``isValid()`` à la -donnée d'entrée. - - .. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($email, 'EmailAddress')) { - // l'email est valide - } - - - -Vous pouvez aussi fournir un tableau de paramètres destinés au constructeur de la classe, s'ils sont nécessaires -pour votre classe de validation. - - .. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($value, - 'Between', - array(array('min' => 1, 'max' => 12)))) { - // $value est compris entre 1 et 12 - } - - - -La méthode ``is()`` retourne une valeur booléenne, la même que la méthode ``isValid()``. Lors de l'utilisation -de la méthode statique ``is()``, les messages d'échec de validation ne sont pas disponibles. - -L'utilisation statique peut être pratique pour invoquer un validateur ad hoc, mais si vous avez besoin d'exécuter -un validateur pour des données multiples, il est plus efficace de suivre le premier exemple ci-dessus, créant une -instance de l'objet de validation et appelant sa méthode ``isValid()``. - -De plus, la classe ``Zend\Filter\Input`` vous permet d'instancier et d'exécuter des filtres multiples et des -classes de validateurs sur demande pour traiter l'ensemble de données saisies. Voir :ref:` `. - -.. _zend.validator.introduction.static.namespaces: - -Espaces de noms -^^^^^^^^^^^^^^^ - -When working with self defined validators you can give a forth parameter to ``Zend\Validate\Validate::is()`` which is the -namespace where your validator can be found. - -.. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($value, - 'MyValidator', - array(array('min' => 1, 'max' => 12)), - array('FirstNamespace', 'SecondNamespace')) { - // Yes, $value is ok - } - -``Zend_Validate`` allows also to set namespaces as default. This means that you can set them once in your bootstrap -and have not to give them again for each call of ``Zend\Validate\Validate::is()``. The following code snippet is identical -to the above one. - -.. code-block:: php - :linenos: - - Zend\Validate\Validate::setDefaultNamespaces(array('FirstNamespace', 'SecondNamespace')); - if (Zend\Validate\Validate::is($value, - 'MyValidator', - array(array('min' => 1, 'max' => 12))) { - // Yes, $value is ok - } - - if (Zend\Validate\Validate::is($value, - 'OtherValidator', - array('min' => 1, 'max' => 12)) { - // Yes, $value is ok - } - -For your convinience there are following methods which allow the handling of namespaces: - -- **Zend\Validator\Validator::getDefaultNamespaces()**: Returns all set default namespaces as array. - -- **Zend\Validator\Validator::setDefaultNamespaces()**: Sets new default namespaces and overrides any previous set. It - accepts eighter a string for a single namespace of an array for multiple namespaces. - -- **Zend\Validator\Validator::addDefaultNamespaces()**: Adds additional namespaces to already set ones. It accepts eighter a - string for a single namespace of an array for multiple namespaces. - -- **Zend\Validator\Validator::hasDefaultNamespaces()**: Returns true when one or more default namespaces are set, and false - when no default namespaces are set. - -.. _zend.validator.introduction.translation: - -Translating messages --------------------- - -Validate classes provide a ``setTranslator()`` method with which you can specify a instance of ``Zend_Translator`` -which will translate the messages in case of a validation failure. The ``getTranslator()`` method returns the set -translator instance. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - $translate = new Zend\Translator\Translator( - array( - 'adapter' => 'array', - 'content' => array( - Zend\Validate\StringLength::TOO_SHORT => 'Translated \'%value%\'' - ), - 'locale' => 'en' - ) - ); - - $validator->setTranslator($translate); - -With the static ``setDefaultTranslator()`` method you can set a instance of ``Zend_Translator`` which will be used -for all validation classes, and can be retrieved with ``getDefaultTranslator()``. This prevents you from setting a -translator manually for all validator classes, and simplifies your code. - -.. code-block:: php - :linenos: - - $translate = new Zend\Translator\Translator( - array( - 'adapter' => 'array', - 'content' => array( - Zend\Validate\StringLength::TOO_SHORT => 'Translated \'%value%\'' - ), - 'locale' => 'en' - ) - ); - Zend\Validate\Validate::setDefaultTranslator($translate); - -.. note:: - - When you have set an application wide locale within your registry, then this locale will be used as default - translator. - -Sometimes it is necessary to disable the translator within a validator. To archive this you can use the -``setDisableTranslator()`` method, which accepts a boolean parameter, and ``isTranslatorDisabled()`` to get the set -value. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 8, 'max' => 12)); - if (!$validator->isTranslatorDisabled()) { - $validator->setDisableTranslator(); - } - -It is also possible to use a translator instead of setting own messages with ``setMessage()``. But doing so, you -should keep in mind, that the translator works also on messages you set your own. - - diff --git a/docs/languages/fr/modules/zend.validator.set.rst b/docs/languages/fr/modules/zend.validator.set.rst deleted file mode 100644 index e2eeae62d..000000000 --- a/docs/languages/fr/modules/zend.validator.set.rst +++ /dev/null @@ -1,46 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set: - -Classes de validation standard -============================== - -Zend Framework est fourni avec un jeu de classes de validation standard, qui sont directement utilisables par votre -application. - -.. include:: zend.i18n.validator.alnum.rst -.. include:: zend.i18n.validator.alpha.rst -.. include:: zend.validator.barcode.rst -.. include:: zend.validator.between.rst -.. include:: zend.validator.callback.rst -.. include:: zend.validator.credit-card.rst -.. _zend.validator.set.ccnum: - -Ccnum ------ - -.. note:: - - Le validateur ``Ccnum`` a été déprécié en faveur du validateur ``CreditCard``. Pour des raisons de - sécurité, vous devriez utiliser CreditCard au lieu de Ccnum. - -.. include:: zend.validator.date.rst -.. include:: zend.validator.db.rst -.. include:: zend.validator.digits.rst -.. include:: zend.validator.email-address.rst -.. include:: zend.i18n.validator.float.rst -.. include:: zend.validator.greater-than.rst -.. include:: zend.validator.hex.rst -.. include:: zend.validator.hostname.rst -.. include:: zend.validator.iban.rst -.. include:: zend.validator.identical.rst -.. include:: zend.validator.in-array.rst -.. include:: zend.i18n.validator.int.rst -.. include:: zend.validator.ip.rst -.. include:: zend.validator.isbn.rst -.. include:: zend.validator.less-than.rst -.. include:: zend.validator.not-empty.rst -.. include:: zend.validator.post-code.rst -.. include:: zend.validator.regex.rst -.. include:: zend.validator.sitemap.rst -.. include:: zend.validator.string-length.rst - diff --git a/docs/languages/fr/modules/zend.validator.sitemap.rst b/docs/languages/fr/modules/zend.validator.sitemap.rst deleted file mode 100644 index 77924d3da..000000000 --- a/docs/languages/fr/modules/zend.validator.sitemap.rst +++ /dev/null @@ -1,93 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.sitemap: - -Validateurs de Sitemap -====================== - -Les validateurs suivant sont conformes au protocole `XML Sitemap`_. - -.. _zend.validator.sitemap.changefreq: - -Sitemap_Changefreq ------------------- - -Valide si oui ou non une chaîne utilisable en tant qu'élément "changefreq" dans un document *XML* Sitemap. Les -valeurs valides sont : "always", "hourly", "daily", "weekly", "monthly", "yearly", or "never". - -Retourne ``TRUE`` si et seulement si la valeur est une chaîne et qu'elle vaut une dès fréquences ci-dessus. - -.. _zend.validator.sitemap.lastmod: - -Sitemap_Lastmod ---------------- - -Valide si oui ou non une chaîne utilisable en tant qu'élément "lastmod" dans un document *XML* Sitemap. -L'élément "lasmod" doit contenir une date sous la forme *W3C*, optionnellement en omettant les informations -concernant l'heure. - -Retourne ``TRUE`` si et seulement si la valeur est une chaîne et qu'elle est valide suivant le protocole. - -.. _zend.validator.sitemap.lastmod.example: - -.. rubric:: Validateur de "lastmod" Sitemap - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Sitemap\Lastmod(); - $validator->isValid('1999-11-11T22:23:52-02:00'); // true - $validator->isValid('2008-05-12T00:42:52+02:00'); // true - $validator->isValid('1999-11-11'); // true - $validator->isValid('2008-05-12'); // true - $validator->isValid('1999-11-11t22:23:52-02:00'); // false - $validator->isValid('2008-05-12T00:42:60+02:00'); // false - $validator->isValid('1999-13-11'); // false - $validator->isValid('2008-05-32'); // false - $validator->isValid('yesterday'); // false - -.. _zend.validator.sitemap.loc: - -Sitemap_Loc ------------ - -Valide si oui ou non une chaîne utilisable en tant qu'élément "loc" dans un document *XML* Sitemap. Ceci utilise -en interne la méthode ``Zend\Form\Form::check()``. Vous pouvez en lire davantage avec la :ref:`validation d'URI -`. - -.. _zend.validator.sitemap.priority: - -Sitemap_Priority ----------------- - -Valide si oui ou non une valeur est utilisable en tant qu'élément "priority" dans un document *XML* Sitemap. La -valeur doit être un nombre compris entre 0.0 et 1.0. Ce validateur accepte à la fois des valeurs numériques ou -textuelles. - -.. _zend.validator.sitemap.priority.example: - -.. rubric:: Validateur de "priority" Sitemap - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\Sitemap\Priority(); - $validator->isValid('0.1'); // true - $validator->isValid('0.789'); // true - $validator->isValid(0.8); // true - $validator->isValid(1.0); // true - $validator->isValid('1.1'); // false - $validator->isValid('-0.4'); // false - $validator->isValid(1.00001); // false - $validator->isValid(0xFF); // false - $validator->isValid('foo'); // false - -.. _zend.validator.set.sitemap.options: - -Options supportées par Zend\Validate\Sitemap\* ----------------------------------------------- - -Il n'y a pas d'options supportées par ce validateur. - - - -.. _`XML Sitemap`: http://www.sitemaps.org/protocol.php diff --git a/docs/languages/fr/modules/zend.validator.string-length.rst b/docs/languages/fr/modules/zend.validator.string-length.rst deleted file mode 100644 index dd9fa911b..000000000 --- a/docs/languages/fr/modules/zend.validator.string-length.rst +++ /dev/null @@ -1,148 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.set.stringlength: - -StringLength -============ - -Ce validateur vérifie la longueur d'une chaine de caractères. - -.. note:: - - **Zend\Validate\StringLength ne supporte que les chaînes** - - Zend\Validate\StringLength ne fonctionnera pas avec les entiers, flottants, les dates ou encore les objets. - -.. _zend.validator.set.stringlength.options: - -Options gérées par Zend\Validate\StringLength ---------------------------------------------- - -Les options suivantes sont reconnues par ``Zend\Validate\StringLength``: - -- **encoding**: Définit l'encodage ``ICONV`` à utiliser avec la chaîne. - -- **min**: Définit le nombre de caractères minimum requis. - -- **max**: Définit le nombre de caractères maximum requis. - -.. _zend.validator.set.stringlength.basic: - -Comportement par défaut de Zend\Validate\StringLength ------------------------------------------------------ - -Par défaut, ce validateur vérifie qu'une valeur de chaîne est bien entre ``min`` et ``max`` caractères. Pour -``min``, la valeur par défaut est **0** et pour ``max`` c'est **NULL** ce qui signifie illimité. - -Ainsi par défaut, sans aucune option, ce validateur vérifie que la donnée traitée est bien une chaîne. - -.. _zend.validator.set.stringlength.maximum: - -Limiter sur la borne supérieure -------------------------------- - -La borne supérieure se règle au moyen de l'option ``max``. Ce doit être un entier. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('max' => 6)); - - $validator->isValid("Test"); // retourne true - $validator->isValid("Testing"); // retourne false - -Il est possible de préciser cette option plus tard, au moyen de la méthode ``setMax()``. ``getMax()`` existe -aussi. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(); - $validator->setMax(6); - - $validator->isValid("Test"); // retourne true - $validator->isValid("Testing"); // retourne false - -.. _zend.validator.set.stringlength.minimum: - -Limiter sur la borne inférieure -------------------------------- - -La borne inférieure se règle au moyen de l'option ``min``. Ce doit être un entier. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 5)); - - $validator->isValid("Test"); // retourne false - $validator->isValid("Testing"); // retourne true - -Il est possible de préciser cette option plus tard, au moyen de la méthode ``setMin()``. ``getMin()`` existe -aussi. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(); - $validator->setMin(5); - - $validator->isValid("Test"); // retourne false - $validator->isValid("Testing"); // retourne true - -.. _zend.validator.set.stringlength.both: - -Limiter via les deux bornes ---------------------------- - -Quelques fois, il est nécessaire de s'assurer que la chaine comprenne bien un nombre de caractères entre deux -bornes min et max. Par exemple depuis un champ de formulaire représentant un nom, vous voudriez que l'utilisateur -ne puisse saisir plus de 30 caractères mais au moins 3. Voyez l'exemple qui suit: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(array('min' => 3, 'max' => 30)); - - $validator->isValid("."); // retourne false - $validator->isValid("Test"); // retourne true - $validator->isValid("Testing"); // retourne true - -.. note:: - - **Comportement illogique, borne inférieure supérieure à la borne supérieure** - - Si vous tentez de préciser un min supérieur au max, ou inversement, une exception sera levée. - -.. _zend.validator.set.stringlength.encoding: - -Encodage des valeurs --------------------- - -Les chaines se représentent toujours en considérant un encodage. Même si vous ne le précisez pas explicitement, -*PHP* en utilise un. Si votre application utilise un encodage différent de celui de *PHP*, vous devrez alors le -préciser. - -Vous pouvez passer votre propre encodage à l'initialisation grâce à l'option ``encoding``, ou en utilisant la -méthode ``setEncoding()``. Nous supposons que votre installation utilise *ISO* ainsi que votre application. Dans -ce cas, vous verrez le comportement suivant: - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength( - array('min' => 6) - ); - $validator->isValid("Ärger"); // retourne false - - $validator->setEncoding("UTF-8"); - $validator->isValid("Ärger"); // retourne true - - $validator2 = new Zend\Validate\StringLength( - array('min' => 6, 'encoding' => 'UTF-8') - ); - $validator2->isValid("Ärger"); // retourne true - -Si votre installation et votre application utilisent des encodages différents, vous deviez toujours préciser -l'encodage vous-même. - - diff --git a/docs/languages/fr/modules/zend.validator.validator-chains.rst b/docs/languages/fr/modules/zend.validator.validator-chains.rst deleted file mode 100644 index cc85803ef..000000000 --- a/docs/languages/fr/modules/zend.validator.validator-chains.rst +++ /dev/null @@ -1,58 +0,0 @@ -.. EN-Revision: none -.. _zend.validate.validator_chains: - -Chaînes de validation -===================== - -Souvent, de multiples validations doivent être appliquées à une valeur dans un ordre particulier. Le code -suivant décrit une méthode permettant de solutionner l'exemple de :ref:`l'introduction -`, dans lequel un identifiant doit contenir précisément entre 6 et 12 caractères -alphanumériques. - - .. code-block:: php - :linenos: - - // Creation d'une chaîne de validateurs et ajout de validateurs - $validateurChaine = new Zend\Validate\Validate(); - $validateurChaine->addValidator( - new Zend\Validate\StringLength(array('min' => 6, - 'max' => 12))) - ->addValidator(new Zend\Validate\Alnum()); - - // Validation de l'identifiant - if ($validateurChaine->isValid($identifiant)) { - // l'identifiant est testé avec succès - } else { - // l'identifiant échoue aux tests, afficher pourquoi - foreach ($validateurChaine->getMessages() as $message) { - echo "$message\n"; - } - } - -Les validateurs sont exécutés dans leur ordre d'ajout à ``Zend_Validate``. Dans l'exemple ci-dessus, -l'identifiant est d'abord testé pour vérifier que sa longueur est bien comprise entre 6 et 12 caractères, puis -ensuite testé pour vérifier qu'il ne contient bien que des caractères alphanumériques. Le second test est -exécuté quelque soit le résultat du précédent. Ainsi, dans le cas où les deux tests échouent, -``getMessages()`` retournera un message d'échec pour chacun des validateurs. - -Dans certains cas, il peut être utile d'interrompre le processus si l'un des tests échoue. ``Zend_Validate`` -permet ce cas de figure via l'usage du deuxième paramètre de la méthode ``addValidator()``. En positionnant -``$breakChainOnFailure`` à ``TRUE``, le validateur ajouté interrompra la procédure de test s'il échoue, ce qui -permet d'éviter de lancer tout autre test qui serait inutile ou inapproprié dans ce cas de figure. Si l'exemple -précédent était écrit comme suit, la validation alphanumérique ne serait pas lancé si la vérification de la -longueur de la valeur échouait : - - .. code-block:: php - :linenos: - - $validateurChaine->addValidator( - new Zend\Validate\StringLength(array('min' => 6, - 'max' => 12)), - true) - ->addValidator(new Zend\Validate\Alnum()); - - - -Tout objet qui implémente ``Zend\Validate\Interface`` peut être utilisé dans une chaîne de validation. - - diff --git a/docs/languages/fr/modules/zend.validator.writing-validators.rst b/docs/languages/fr/modules/zend.validator.writing-validators.rst deleted file mode 100644 index 5bad8f0bc..000000000 --- a/docs/languages/fr/modules/zend.validator.writing-validators.rst +++ /dev/null @@ -1,227 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.writing_validators: - -Écrire des validateurs -====================== - -``Zend_Validate`` fournit un ensemble de validateurs habituellement nécessaires, mais inévitablement, les -développeurs souhaiteront écrire des validateurs sur mesure pour leurs besoins particuliers. La méthode -d'écriture d'un validateur personnalisé est décrit dans cette section. - -``Zend\Validate\Interface`` définit trois méthodes, ``isValid()``, ``getMessages()``, et ``getErrors()``, qui -peuvent être implémentées par des classes d'utilisateur afin de créer les objets de validation sur mesure. Un -objet qui implémente l'interface ``Zend\Validate\Interface`` peut être ajouté à une chaîne de validateur avec -``Zend\Validate\Validate::addValidator()``. De tels objets peuvent également être employés avec :ref:`Zend\Filter\Input -`. - -Comme vous avez déjà pu déduire de la description ci-dessus de ``Zend\Validate\Interface``, les classes de -validation fournie avec Zend Framework retourne une valeur booléenne pour savoir si une valeur est validée ou -non. Elles fournissent également des informations sur la raison pour laquelle la validation a échoué sur une -valeur. La mise à disposition de ces raisons d'échec de validation peut être utilisée par une application dans -différents buts, tels que fournir des statistiques pour l'analyse de la facilité d'utilisation. - -La fonctionnalité de base de message d'échec de validation est implémentée dans ``Zend\Validate\Abstract``. -Pour inclure cette fonctionnalité en créant une classe de validation, étendez simplement -``Zend\Validate\Abstract``. Dans la classe étendue vous implémenteriez la logique de la méthode ``isValid()`` et -définiriez les variables de message et les modèles de message qui correspondent aux types d'échecs de validation -qui peuvent se produire. Si une valeur ne passe pas vos essais de validation, alors ``isValid()`` devrait renvoyer -``FALSE``. Si la valeur passe vos essais de validation, alors ``isValid()`` devrait renvoyer ``TRUE``. - -En général, la méthode ``isValid()`` ne devrait lever aucune exception, excepté où il est impossible de -déterminer si la valeur d'entrée est valide. Quelques exemples de cas raisonnables pour lever une exception -pourraient être si un fichier ne peut pas être ouvert, un serveur de *LDAP* ne pourraient pas être contacté, ou -une connexion de base de données est indisponible, où quand une telle chose peut être exigée pour que le -succès ou l'échec de validation soit déterminé. - -.. _zend.validator.writing_validators.example.simple: - -.. rubric:: Création d'une simple classe de validation - -L'exemple suivant démontre comment un validateur personnalisé très simple pourrait être écrit. Dans ce cas-ci -les règles de validation sont simplement que la valeur d'entrée doit être une valeur en virgule flottante. - - .. code-block:: php - :linenos: - - class MonValidateur_Float extends Zend\Validate\Abstract - { - const FLOAT = 'float'; - - protected $_messageTemplates = array( - self::FLOAT => "'%value%' n'est pas une valeur en virgule flottante" - ); - - public function isValid($value) - { - $this->_setValue($value); - - if (!is_float($value)) { - $this->_error(self::FLOAT); - return false; - } - - return true; - } - } - -La classe définit un modèle pour son message unique d'échec de validation, qui inclut le paramètre magique -intégré, *%value%*. L'appel à ``_setValue()`` prépare l'objet pour insérer automatiquement la valeur examinée -dans le message d'échec, si la validation de la valeur échoue. L'appel à ``_error()`` trace la raison d'échec -de validation. Puisque cette classe définit seulement un message d'échec, il n'est pas nécessaire de fournir à -``_error()`` le nom du modèle de message d'échec. - -.. _zend.validator.writing_validators.example.conditions.dependent: - -.. rubric:: Écriture d'une classe de validation ayant des conditions de dépendances - -L'exemple suivant démontre un ensemble plus complexe de règles de validation, où on l'exige que la valeur -d'entrée doit être numérique et dans la plage des valeurs limites minimum et maximum. Une valeur d'entrée -ferait échouer la validation pour exactement une des raisons suivantes : - - - La valeur d'entrée n'est pas numérique. - - - La valeur d'entrée est inférieure que la valeur permise minimum. - - - La valeur d'entrée est supérieure que la valeur permise maximum. - - - -Ces raisons d'échec de validation sont alors traduites dans les définitions de la classe : - - .. code-block:: php - :linenos: - - class MonValidateur_NumericBetween extends Zend\Validate\Abstract - { - const MSG_NUMERIC = 'msgNumeric'; - const MSG_MINIMUM = 'msgMinimum'; - const MSG_MAXIMUM = 'msgMaximum'; - - public $minimum = 0; - public $maximum = 100; - - protected $_messageVariables = array( - 'min' => 'minimum', - 'max' => 'maximum' - ); - - protected $_messageTemplates = array( - self::MSG_NUMERIC => "'%value%' n'est pas numérique", - self::MSG_MINIMUM => "'%value%' doit être supérieure à '%min%'", - self::MSG_MAXIMUM => "'%value%' doit être inférieure à '%max%'" - ); - - public function isValid($value) - { - $this->_setValue($value); - - if (!is_numeric($value)) { - $this->_error(self::MSG_NUMERIC); - return false; - } - - if ($value < $this->minimum) { - $this->_error(self::MSG_MINIMUM); - return false; - } - - if ($value > $this->maximum) { - $this->_error(self::MSG_MAXIMUM); - return false; - } - - return true; - } - } - -Les propriétés publiques ``$minimum`` et ``$maximum`` ont été établies pour fournir les frontières minimum et -maximum d'une valeur pour qu'elle soit validée avec succès. La classe définit également deux variables de -message qui correspondent aux propriétés publiques et permettent que *min* et *max* soient employés dans des -modèles de message en tant que paramètres magiques, comme avec *value*. - -Noter que si n'importe quel élément de la validation vérifié dans ``isValid()`` échoue, un message approprié -d'échec est préparé, et la méthode renvoie immédiatement ``FALSE``. Ces règles de validation sont donc -séquentiellement dépendantes. C'est-à-dire, que si un essai échoue, il n'y a aucun besoin d'examiner les -règles suivantes de validation. Ce besoin peut exister, cependant. L'exemple suivant illustre comment écrire une -classe ayant des règles indépendantes de validation, où l'objet de validation peut renvoyer des raisons -multiples pour lesquelles une tentative particulière de validation a échoué. - -.. _zend.validator.writing_validators.example.conditions.independent: - -.. rubric:: Validation avec des conditions indépendantes, avec raisons multiples d'échec - -Considérons l'écriture d'une classe de validation pour le contrôle de résistance d'un mot de passe - quand un -utilisateur est requis afin de choisir un mot de passe qui respecte certains critères pour aider à la -sécurisation des comptes d'utilisateur. Supposons que les critères de sécurité de mot de passe imposent que le -mot de passe : - - - est au moins une longueur de 8 caractères, - - - contient au moins une lettre majuscule, - - - contient au moins une lettre minuscule, - - - et contient au moins un caractère de chiffre. - - - -La classe suivante implémente ces critères de validation : - - .. code-block:: php - :linenos: - - class MonValidateur_PasswordStrength extends Zend\Validate\Abstract - { - const LENGTH = 'length'; - const UPPER = 'upper'; - const LOWER = 'lower'; - const DIGIT = 'digit'; - - protected $_messageTemplates = array( - self::LENGTH => - "'%value%' doit avoir une longueur d'au moins 8 caractères", - self::UPPER => - "'%value%' doit contenir au moins une lettre majuscule", - self::LOWER => - "'%value%' doit contenir au moins une lettre minuscule", - self::DIGIT => - "'%value%' doit contenir au moins un chiffre" - ); - - public function isValid($value) - { - $this->_setValue($value); - - $isValid = true; - - if (strlen($value) < 8) { - $this->_error(self::LENGTH); - $isValid = false; - } - - if (!preg_match('/[A-Z]/', $value)) { - $this->_error(self::UPPER); - $isValid = false; - } - - if (!preg_match('/[a-z]/', $value)) { - $this->_error(self::LOWER); - $isValid = false; - } - - if (!preg_match('/\d/', $value)) { - $this->_error(self::DIGIT); - $isValid = false; - } - - return $isValid; - } - } - -Noter que les quatre critères d'essais dans ``isValid()`` ne renvoient pas immédiatement ``FALSE``. Ceci permet -à la classe de validation de fournir toutes les raisons pour lesquelles le mot de passe d'entrée n'a pas réussi -à remplir les conditions de validation. Si, par exemple, un utilisateur entre la chaîne "*#$%*" comme mot de -passe, ``isValid()`` entraînera que les quatre messages d'échec de validation seront retournés lors de l'appel -suivant à ``getMessages()``. - - diff --git a/docs/languages/fr/modules/zend.version.rst b/docs/languages/fr/modules/zend.version.rst deleted file mode 100644 index 4902a85ec..000000000 --- a/docs/languages/fr/modules/zend.version.rst +++ /dev/null @@ -1,41 +0,0 @@ -.. EN-Revision: none -.. _zend.version.reading: - -Lire la version de Zend Framework -================================= - -``Zend_Version`` fournit la constante de classe ``Zend\Version\Version::VERSION`` qui contient une chaîne identifiant la -version courante de Zend Framework. ``Zend\Version\Version::VERSION`` contient "1.7.2", par exemple. - -La méthode statique ``Zend\Version\Version::compareVersion($version)`` est basée sur la fonction *PHP* -`version_compare()`_. La méthode retourne -1 si la ``$version`` fournie est plus ancienne que la version courante -de Zend Framework, 0 si c'est la même, et +1 si la ``$version`` fournie est plus récente que la version courante -de Zend Framework. - -.. _zend.version.reading.example: - -.. rubric:: Exemple avec la méthode compareVersion() - -.. code-block:: php - :linenos: - - // retourne -1, 0 or 1 - $cmp = Zend\Version\Version::compareVersion('2.0.0'); - -La méthode statique ``Zend\Version\Version::getLatest()`` permet d'obtenir le numéro de version de la dernière release -stable disponible au téléchargement sur le site `Zend Framework`_. - -.. _zend.version.latest.example: - -.. rubric:: Example de la méthode getLatest() - -.. code-block:: php - :linenos: - - // retourne 1.11.0 (ou une version ultérieure) - echo Zend\Version\Version::getLatest(); - - - -.. _`version_compare()`: http://www.php.net/manual/fr/ref.version_compare.php -.. _`Zend Framework`: http://framework.zend.com/download/latest diff --git a/docs/languages/fr/modules/zend.view.helpers.action.rst b/docs/languages/fr/modules/zend.view.helpers.action.rst deleted file mode 100644 index f31e60e53..000000000 --- a/docs/languages/fr/modules/zend.view.helpers.action.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.action: - -L'aide de vue Action -==================== - -L'aide de vue *Action* permet à des scripts de vue de distribuer une action donnée d'un contrôleur ; le -résultat de l'objet de réponse suivant la distribution est alors retourné. Ceux-ci peuvent être employés quand -une action particulière peut produire du contenu réutilisable ou du contenu de type "gadget". - -Les actions qui ont comme conséquence un ``_forward()`` ou une redirection sont considérées invalide, et -retourneront une chaîne vide. - -L'API pour l'aide de vue *Action* respecte le même schéma que la plupart les composants *MVC* qui appellent des -actions de contrôleur : *action($action, $controller, $module = null, array $params = array())*. ``$action`` et -``$controller`` sont exigés ; si aucun module n'est spécifié, le module par défaut est implicite. - -.. _zend.view.helpers.initial.action.usage: - -.. rubric:: Utilisation de base de l'aide de vue Action - -Par exemple, vous pouvez avoir un *CommentController* avec une méthode ``listAction()`` que vous souhaitez appeler -afin de récupérer une liste de commentaires pour la requête courante : - -.. code-block:: php - :linenos: - - - - diff --git a/docs/languages/fr/modules/zend.view.helpers.base-url.rst b/docs/languages/fr/modules/zend.view.helpers.base-url.rst deleted file mode 100644 index 01ce8b438..000000000 --- a/docs/languages/fr/modules/zend.view.helpers.base-url.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.baseurl: - -Aide BaseUrl -============ - -La plupart des *URL*\ s générées par le framework possèdent l'*URL* de base préfixée automatiquement. Les -développeurs ont besoin de la rajouter à la main à leurs propres *URL*\ s afin de garder une correspondance -chemins - ressources correcte. - -L'utilisation de l'aide de vue BaseUrl est très simple: - -.. code-block:: php - :linenos: - - /* - * Imaginons une URL de base dans page/application de "/mypage". - */ - - /* - * affiche: - * - */ - - - /* - * affiche: - * - */ - - -.. note:: - - Pour plus de simplicité, le fichier *PHP* (par exemple "``index.php``") est enlevé de l'*URL* de base gérée - par ``Zend_Controller``. Cependant, si ceci vous gène, utilisez ``$this->getHelper('BaseUrl')->setBaseUrl()`` - pour affecter votre propre BaseUrl. - - diff --git a/docs/languages/fr/modules/zend.view.helpers.cycle.rst b/docs/languages/fr/modules/zend.view.helpers.cycle.rst deleted file mode 100644 index 7968aa49b..000000000 --- a/docs/languages/fr/modules/zend.view.helpers.cycle.rst +++ /dev/null @@ -1,63 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.cycle: - -Aide Cycle -========== - -L'aide *Cycle* est utilisée pour alterner des valeurs. - -.. _zend.view.helpers.initial.cycle.basicusage: - -.. rubric:: Aide Cycle : utilisation de base - -Pour ajouter des éléments dans le cycle, spécifiez le simplement dans le constructeur ou utilisez ``assign(array -$data)`` - -.. code-block:: php - :linenos: - - books as $book):?> - next()?>"> - escape($book['author']) ?> - - - - // Mouvement dans le sens inverse - $this->cycle()->assign(array("#F0F0F0","#FFFFFF")); - $this->cycle()->prev(); - ?> - -La sortie: - -.. code-block:: php - :linenos: - - - First - - - Second - - -.. _zend.view.helpers.initial.cycle.advanceusage: - -.. rubric:: Travailler avec 2 cycles ou plus - -Pour utiliser 2 cycles, il faut renseigner leurs noms. Ca se passe au niveau du second paramètre de la méthode -cycle. *$this->cycle(array("#F0F0F0","#FFFFFF"),'cycle2')*. setName($name) peut aussi être utilisée. - -.. code-block:: php - :linenos: - - books as $book):?> - next()?>"> - cycle(array(1,2,3),'number')->next()?> - escape($book['author'])?> - - - - diff --git a/docs/languages/fr/modules/zend.view.helpers.doctype.rst b/docs/languages/fr/modules/zend.view.helpers.doctype.rst deleted file mode 100644 index 87aed4043..000000000 --- a/docs/languages/fr/modules/zend.view.helpers.doctype.rst +++ /dev/null @@ -1,87 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.doctype: - -L'aide de vue Doctype -===================== - -Les documents HTML et *XHTML* valides doivent inclure une déclaration ``DOCTYPE``. Sans compter qu'ils sont -difficiles à garder en mémoire, ceux-ci peuvent aussi affecter la façon dont certains éléments du document -peuvent être rendus (par exemple, les échappements CDATA dans * - - - -.. note:: - - **Variante InlineScript** - - La plupart des navigateur bloquent l'affichage tant que tous les scritps et les feuilles de style référencés - dans la section **** ne sont pas chargés. Ces règles permettent un meilleur feeling au niveau du rendu - de la page et permettent à l'utilisateur de voir le contenu de la page plus tôt. - - Pour cela, vous pouvez par exemple écrire vos tags ** - - -.. _zend.paginator.usage.rendering.properties: - -Список свойств -^^^^^^^^^^^^^^ - -Следующие опции доступны внутри скрипта вида для постраничной -навигации: - -.. _zend.paginator.usage.rendering.properties.table: - -.. table:: Свойства, доступные в скрипте вида - - +----------------+-------+----------------------------------------------------------------+ - |Свойство |Тип |Описание | - +================+=======+================================================================+ - |first |integer|Номер первой страницы (т.е. 1) | - +----------------+-------+----------------------------------------------------------------+ - |firstItemNumber |integer|Действительный номер первого элемента на текущей странице | - +----------------+-------+----------------------------------------------------------------+ - |firstPageInRange|integer|Первая страница в ряде, возвращенном текущим стилем прокрутки | - +----------------+-------+----------------------------------------------------------------+ - |current |integer|Текущий номер страницы | - +----------------+-------+----------------------------------------------------------------+ - |currentItemCount|integer|Количество элементов на текущей странице | - +----------------+-------+----------------------------------------------------------------+ - |itemCountPerPage|integer|Максимальное количество отображаемых на странице элементов | - +----------------+-------+----------------------------------------------------------------+ - |last |integer|Номер последней страницы | - +----------------+-------+----------------------------------------------------------------+ - |lastItemNumber |integer|Действительный номер последнего элемента на текущей странице | - +----------------+-------+----------------------------------------------------------------+ - |lastPageInRange |integer|Последняя страница в ряде, возвращенном текущим стилем прокрутки| - +----------------+-------+----------------------------------------------------------------+ - |next |integer|Номер следующей страницы | - +----------------+-------+----------------------------------------------------------------+ - |pageCount |integer|Общее количество страниц | - +----------------+-------+----------------------------------------------------------------+ - |pagesInRange |array |Массив страниц, возвращенный текущим стилем прокрутки | - +----------------+-------+----------------------------------------------------------------+ - |previous |integer|Номер предыдущей страницы | - +----------------+-------+----------------------------------------------------------------+ - |totalItemCount |integer|Общее количество элементов | - +----------------+-------+----------------------------------------------------------------+ - - - -.. _`IteratorAggregate`: http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html diff --git a/docs/languages/ru/modules/zend.permissions.acl.advanced.rst b/docs/languages/ru/modules/zend.permissions.acl.advanced.rst deleted file mode 100644 index 5282b5bdc..000000000 --- a/docs/languages/ru/modules/zend.permissions.acl.advanced.rst +++ /dev/null @@ -1,99 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.advanced: - -Расширенное использование -========================= - -.. _zend.permissions.acl.advanced.storing: - -Постоянное хранение данных ACL ------------------------------- - -``Zend\Permissions\Acl`` спроектирован таким образом, что не требует для -хранения данных *ACL* использования строго определенных -технологий хранения - таких, как база данных или сервер кеша. -Его реализация на чистом *PHP* позволяет создавать -административные инструменты под управлением ``Zend\Permissions\Acl`` с -относительной простотой и гибкостью. Многие ситуации требуют -некоторой интерактивной поддержки от *ACL*, и ``Zend\Permissions\Acl`` -предоставляет методы для настройки, произведения запросов, -контроля доступа приложением. - -Тем не менее, хранение данных *ACL* остается задачей -разработчика, т.к. случаи использования могут сильно -варьироваться в различных ситуациях. Поскольку ``Zend\Permissions\Acl`` -доступен для сериализации, то можно сериализовать объекты *ACL* -через PHP-функцию `serialize()`_, и результаты можно хранить там, где -пожелает разработчик - например, в файле, базе данных или с -помощью механизма кэширования. - -.. _zend.permissions.acl.advanced.assertions: - -Написание условных правил ACL с утверждениями ---------------------------------------------- - -Иногда правило разрешения или запрета доступа роли к ресурсу -должно быть не безусловным, а зависеть от различных критериев. -Например, определенный доступ должен быть разрешен, но только -с 8:00 до 17:00. Другой пример - доступ должен быть запрещен, если -запрос поступил с IP-адреса, находящегося в "черном списке". -``Zend\Permissions\Acl`` имеет встроеную поддержку для применения правил, -основанных на любых нужных разработчику условиях. - -``Zend\Permissions\Acl`` предоставляет поддержку условных правил с помощью -интерфейса ``Zend\Permissions\Acl\Assert\AssertInterface``. Чтобы использовать интерфейс -утверждений, разработчик должен написать класс, который -реализует метод *assert()* интерфейса: - -.. code-block:: php - :linenos: - - class CleanIPAssertion implements Zend\Permissions\Acl\Assert\AssertInterface - { - public function assert(Zend\Permissions\Acl $acl, - Zend\Permissions\Acl\Role\RoleInterface $role = null, - Zend\Permissions\Acl\Resource\ResourceInterface $resource = null, - $privilege = null) - { - return $this->_isCleanIP($_SERVER['REMOTE_ADDR']); - } - - protected function _isCleanIP($ip) - { - // ... - } - } - -После объявления класса утверждения разработчик должен -передавать экземпляр этого класса при определении условных -правил. Правило, которое создается с утверждением, применяется -только тогда, когда метод утверждения возвращает true. - -.. code-block:: php - :linenos: - - $acl = new Zend\Permissions\Acl\Acl(); - $acl->allow(null, null, null, new CleanIPAssertion()); - -Код выше создает условное правило, разрешающее всем доступ ко -всем привилегиям всех ресурсов, за исключением случаев, когда -IP-адрес запрашивающего занесен в "черный список". Если запрос -приходит с IP-адреса, который не определяется как "белый", то -правило не применяется. Поскольку правило применяется ко всем -ролям, всем ресурсам и всем привилегиям, то "черный" IP приведет -к запрещению доступа. Тем не менее, это особый случай, и следует -понимать, что во всех других случаях (например, когда для -правила были указаны роль, ресурс, или привилегия), -невыполнение утверждения приводит к тому, что правило не -применяется, и для определения того, реазрешить ли доступ или -запретить, могут использоваться другие правила. - -Методу *assert()* объекта утверждения передаются ACL, роль, ресурс и -привилегия, к которым применяется запрос на авторизацию -(например, *isAllowed()*). Это нужно для предоставления контекста -классу утверждения и определения его условий там, где это -нужно. - - - -.. _`serialize()`: http://php.net/serialize diff --git a/docs/languages/ru/modules/zend.permissions.acl.intro.rst b/docs/languages/ru/modules/zend.permissions.acl.intro.rst deleted file mode 100644 index b2beb9c8e..000000000 --- a/docs/languages/ru/modules/zend.permissions.acl.intro.rst +++ /dev/null @@ -1,342 +0,0 @@ -.. EN-Revision: none -.. _zend.acl.introduction: - -Введение -======== - -``Zend\Permissions\Acl`` предоставляет легковесную и гибкую реализацию списка -прав доступа (*ACL*) и управления привилегиями. Приложение может -использовать такие списки для контроля доступа одних объектов -к другим - защищенным. - -В рамках данной документации, - - - **Ресурс**- объект, доступ к которому контролируется. - - - **Роль**- объект, который может запрашивать доступ к ресурсу. - -Говоря проще, **роли запрашивают доступ к ресурсам**. Например, -если парковщик запрашивает доступ к автомобилю, то парковщик - -это роль, а автомобиль - ресурс, поскольку доступ к автомобилю -не может предоставляться всем без исключения. - -Благодаря спецификации и использованию списка прав доступа -(ACL) приложение может контролировать предоставление ролям -доступа к ресурсам. - -.. _zend.acl.introduction.resources: - -Ресурсы -------- - -Создать ресурс в ``Zend\Permissions\Acl`` очень просто. ``Zend\Permissions\Acl`` предоставляет -интерфейс ресурса ``Zend\Permissions\Acl\Resource\ResourceInterface`` для облегчения процесса -создания ресурса. Этот интерфейс содержит только один метод, -*getResourceId()*. Классу достаточно реализовывать этот интерфейс для -того, чтобы ``Zend\Permissions\Acl`` рассматривал объект этого класса как -ресурс. Кроме того, ``Zend\Permissions\Acl`` предоставляет *Zend\Permissions\Acl\Resource* в качестве -базового класса, который разработчики могут расширять по -желанию. - -``Zend\Permissions\Acl`` предоставляет древовидную структуру, в которую могут -добавляться различные ресурсы. В этой структуре они могут быть -организованы от общих (корень дерева) к специфическим (листья -дерева). При запросах к определенным ресурсам в иерархии будет -выполнен автоматический поиск правил, относящихся к -ресурсам-предкам, учитывающий простое наследование правил. -Например, если некое общее правило должно действовать в каждом -здании города, то проще прикрепить его к городу, чем крепить к -каждому зданию в городе. Однако, для некоторых зданий могут -потребоваться исключения из этого правила, в ``Zend\Permissions\Acl`` это -достигается путем закрепления исключений за каждым зданием, -требующим исключений из правила. Ресурс может наследовать -только от одного родительского ресурса, однако сам -родительский ресурс может, в свою очередь, наследовать от -другого родительского ресурса и т.д. - -``Zend\Permissions\Acl`` также поддерживает права доступа к ресурсам (например, -"создание", "чтение", "обновление", "удаление"), разработчик может -присваивать правила, которые будут влиять на все или -определенные права доступа к ресурсу. - -.. _zend.acl.introduction.roles: - -Роли ----- - -Как и в случае с ресурсами, создавать роль тоже очень просто. -Все роли должны реализовывать интерфейс ``Zend\Acl\Role\Interface``. Этот -интерфейс содержит единственный метод *getRoleId()*. Кроме того, -``Zend\Permissions\Acl`` предоставляет ``Zend\Permissions\Acl\GenericRole`` в качестве базового класса, -который разработчики могут расширять по желанию. - -В ``Zend\Permissions\Acl`` роль может наследовать от одной или от нескольких -ролей. Это реализовано для поддержки наследования правил -между ролями. Например, пользовательская роль, такая как -"Салли", может принадлежать одной или нескольким родительским -ролям, таким как "редактор" и "администратор". Разработчик может -привязывать правила к "редактору" и "администратору" раздельно, -и "Салли" будет наследовать правила обоих ролей. Нет -необходимости привязывать правила непосредственно к "Салли". - -Хотя множественное наследование ролей - очень полезная -возможность, она также усложняет разработку. Следующий пример -демонстрирует неопределенное условие и показывает, как ``Zend\Permissions\Acl`` -решает эту проблему. - -.. _zend.acl.introduction.roles.example.multiple_inheritance: - -.. rubric:: Множественное наследование ролей - -Следующий код определяет три базовые роли: "*guest*", "*member*" и "*admin*", -от которых будут наследовать другие роли. Далее создается -"*someUser*", он наследует от этих только что созданных трех ролей. -Порядок, в котором эти роли появляются в массиве ``$parents``, важен. -При необходимости ``Zend\Permissions\Acl`` ищет правила доступа не только для -запрашиваемых ролей (в нашем случае, "*someUser*"), но и для ролей, от -которых запрашиваемая роль унаследована (в нашем примере, -"*guest*", "*member*" и "*admin*"): - -.. code-block:: php - :linenos: - - use Zend\Permissions\Acl\Acl; - use Zend\Permissions\Acl\Role\GenericRole as Role; - use Zend\Permissions\Acl\Resource\GenericResource as Resource; - - $acl = new Acl(); - - $acl->addRole(new Role('guest')) - ->addRole(new Role('member')) - ->addRole(new Role('admin')); - - $parents = array('guest', 'member', 'admin'); - $acl->addRole(new Role('someUser'), $parents); - - $acl->add(new Resource('someResource')); - - $acl->deny('guest', 'someResource'); - $acl->allow('member', 'someResource'); - - echo $acl->isAllowed('someUser', 'someResource') ? 'разрешен' : 'запрещен'; - -Поскольку нет правил, определенных специально для роли "*someUser*" -и ресурса "*someResource*", то ``Zend\Permissions\Acl`` должен производить поиск правил, -которые могут быть определены для ролей, от которых "*someUser*" -наследуется. Сперва проверяется роль "*admin*", и обнаруживается, -что для нее не определены правила доступа. Затем проверяется -роль "*member*", и ``Zend\Permissions\Acl`` обнаруживает, что есть правило -разрешающее доступ для "*member*" к "*someResource*". - -Если бы ``Zend\Permissions\Acl`` продолжил поиск правил, определенных для -родительских ролей, то обнаружил бы, что для "*guest*" запрещен -доступ к "*someResource*". Это пример показывает противоречие, так как -теперь для "*someUser*" доступ к "*someResource*" разрешен и запрещен -одновременно. Конфликт произошел по причине наследования от -нескольких ролей. - -``Zend\Permissions\Acl`` решает эту неоднозначность, завершая запрос, как только -находит первое правило, которое может быть применено к -запросу. В этом случае, если роль "*member*" проверяется раньше, чем -роль "*guest*", то данный пример выведет "*разрешен*". - -.. note:: - - При определении нескольких родительских ролей, не забывайте, - что последний указанный родитель будет первым в списке - поиска правил для запроса авторизации. - -.. _zend.acl.introduction.creating: - -Создание списка контроля доступа (ACL) --------------------------------------- - -Список контроля доступа (*ACL*) может представлять собой любое -множество физических или виртуальных объектов. В целях -демонстрации, мы создадим базовый функционал *ACL* для системы -управления содержимым (*CMS*), который будет поддерживать -нескольких уровней групп к множеству областей. Чтобы создать -новый объект *ACL*, производим инстанцирование без параметров: - -.. code-block:: php - :linenos: - - use Zend\Permissions\Acl\Acl; - $acl = new Acl(); - -.. note:: - - До тех пор, пока разработчик не определит какое-либо правило, - разрешающее доступ, ``Zend\Permissions\Acl`` отказывает всем ролям в доступе - ко всем привилегиям на все ресурсы. - -.. _zend.acl.introduction.role_registry: - -Регистрация ролей ------------------ - -*CMS* почти всегда нуждаются в иерархии доступа для определения -авторских возможностей своих пользователей. Это может быть -группа "Гость", предоставляющая ограниченный доступ для -демонстрации, группа "Сотрудник" - группа большинства -пользователей *CMS*, которые производят каждодневные операции, -группа "Редактор" - для тех кто публикует и редактирует, -архивирует и удаляет контент, и, наконец, группа -"Администратор", участники которой могут выполнять все -операции, которые доступны участникам других групп, а также -управлять закрытой информацией, пользователями, -конфигурацией адинистративной части, делать резервное -копирование данных и их экспорт. Этот набор прав доступа может -быть представлен в реестре ролей, позволяя каждой группе -наследовать привилегии родительской группы, при этом имея -индивидуальные права доступа. Права доступа могут быть -изображены в следующем виде: - -.. _zend.acl.introduction.role_registry.table.example_cms_access_controls: - -.. table:: Контроль за доступом для демонстрационной CMS - - +-----------------------------+-------------------------------------------------------------------------------+------------------------+ - |Название |Индивидуальные права |Права, унаследованные от| - +=============================+===============================================================================+========================+ - |Гость (guest) |Просмотр (view) |Не определено | - +-----------------------------+-------------------------------------------------------------------------------+------------------------+ - |Сотрудник (staff) |Редактирование (edit), предложение на публикацию (submit), исправление (revise)|Гость | - +-----------------------------+-------------------------------------------------------------------------------+------------------------+ - |Редактор (editor) |Публикация (publish), архивирование (archive), удаление (delete) |Сотрудник | - +-----------------------------+-------------------------------------------------------------------------------+------------------------+ - |Администратор (administrator)|(Обладает всеми правами) |Не определено | - +-----------------------------+-------------------------------------------------------------------------------+------------------------+ - -Для этого примера мы используем ``Zend\Permissions\Acl\GenericRole``, но можно было бы -использовать любой другой класс, реализующий интерфейс -``Zend\Acl\Role\Interface``. Эти группы могут быть добавлены в реестр ролей -следующим образом: - -.. code-block:: php - :linenos: - - use Zend\Permissions\Acl\Acl; - use Zend\Permissions\Acl\Role\GenericRole as Role; - - $acl = new Acl(); - - // Добавление групп в реестр ролей с использованием Zend\Permissions\Acl\Role - // Гость не наследует управление доступом - $roleGuest = new Role('guest'); - $acl->addRole($roleGuest); - - // Сотрудник наследует от гостя - $acl->addRole(new Role('staff'), $roleGuest); - - /* - Делает то же самое, что и - $acl->addRole(new Role('staff'), 'guest'); - */ - - // Редактор наследует от сотрудника - $acl->addRole(new Role('editor'), 'staff'); - - // Администатор не наследует управление доступом - $acl->addRole(new Role('administrator')); - -.. _zend.acl.introduction.defining: - -Определение контроля доступа ----------------------------- - -Теперь, когда *ACL* содержит все необходимые роли, можно -определить правила, по которым роли будут иметь доступ к -ресурсам. Вы, должно быть, заметили, что мы не определили ни -одного отдельного ресурса для этого примера, это упрощает -демонстрацию того, что правила применяются ко всем ресурсам. -``Zend\Permissions\Acl`` предоставляет реализацию, посредством которой правила -должны передаваться от общих к специфическим, минимизируя -таким образом количество необходимых правил, так как ресурсы и -роли наследуют правила, которые определены для их предков. - -В результате мы можем определить умеренно сложный набор -правил минимальным кодом. Чтобы определить базовые права -доступа, описанные выше: - -.. code-block:: php - :linenos: - addRole($roleGuest); - $acl->addRole(new Role('staff'), $roleGuest); - $acl->addRole(new Role('editor'), 'staff'); - $acl->addRole(new Role('administrator')); - - // Гость может только просматривать контент - $acl->allow($roleGuest, null, 'view'); - - /* другим способом, предыдущий блок кода может быть записан в таком виде: - $acl->allow('guest', null, 'view'); - //*/ - - // Сотрудник наследует привилегии просмотра у Гостя, но также нуждается в дополнительных привилегиях - $acl->allow('staff', null, array('edit', 'submit', 'revise')); - - // Редактор наследует привилегии просмотра, редактирования, отправки и исправлений у Посетителя - // но также нуждается в дополнительных привилегиях - $acl->allow('editor', null, array('publish', 'archive', 'delete')); - - // Администратор не наследует ничего, но обладает всеми привилегиями - $acl->allow('administrator'); -Значение ``NULL`` в вызовах *allow()* в этом примере используется для -указания того, что правила, предоставляющие доступ, -действительны для всех ресурсов. - -.. _zend.acl.introduction.querying: - -Запросы к ACL -------------- - -Теперь у нас есть гибкий *ACL*, который может использоваться для -определения того, достаточно ли прав имеет запрашивающий, -чтобы производить действия в веб-приложении. Используя метод -*isAllowed()*, производить запросы довольно просто: - -.. code-block:: php - :linenos: - - echo $acl->isAllowed('guest', null, 'view') ? - "разрешен" : "запрещен"; - // разрешен - - echo $acl->isAllowed('staff', null, 'publish') ? - "разрешен" : "запрещен"; - // запрещен - - echo $acl->isAllowed('staff', null, 'revise') ? - "разрешен" : "запрещен"; - // разрешен - - echo $acl->isAllowed('editor', null, 'view') ? - "разрешен" : "запрещен"; - // разрешен потому, что редактор наследует от гостя - - echo $acl->isAllowed('editor', null, 'update') ? - "разрешен" : "запрещен"; - // запрещен потому, что нет правила, разрешающего обновление (update) - - echo $acl->isAllowed('administrator', null, 'view') ? - "разрешен" : "запрещен"; - // разрешен потому, что администратор обладает всеми привилегиями - - echo $acl->isAllowed('administrator') ? - "разрешен" : "запрещен"; - // разрешен потому, что администратор обладает всеми привилегиями - - echo $acl->isAllowed('administrator', null, 'update') ? - "разрешен" : "запрещен"; - // разрешен потому, что администратор обладает всеми привилегиями - - diff --git a/docs/languages/ru/modules/zend.permissions.acl.refining.rst b/docs/languages/ru/modules/zend.permissions.acl.refining.rst deleted file mode 100644 index e84d21fae..000000000 --- a/docs/languages/ru/modules/zend.permissions.acl.refining.rst +++ /dev/null @@ -1,178 +0,0 @@ -.. EN-Revision: none -.. _zend.permissions.acl.refining: - -Настройка управления доступом -============================= - -.. _zend.permissions.acl.refining.precise: - -Точное управление доступом --------------------------- - -Базовый *ACL*, как было описано в :ref:`предыдущем разделе -`, демонстрирует, как различные привилегии могут -быть разрешены в *ACL* (ко всем ресурсам). Но на практике средства -управления доступом имеют тенденцию к тому, чтобы иметь -исключения из правил и различную степень сложности. ``Zend\Permissions\Acl`` -позволяет производить детализацию просто и гибко. - -Для *CMS* из нашего примера было установлено, что хотя группа -'сотрудник' подходит большинству пользователей, возникла -необходимость в новой группе 'маркетинг', которая имела бы -доступ к подписке и последним новостям в CMS. Группа в некоторой -степени самодостаточна и будет иметь возможность публиковать -и удалять как подписки, так и последние новости. - -Кроме этого, необходимо, чтобы группе 'сотрудник' было -разрешено просматривать новости, но запрещено редактировать -их. И наконец, должно быть запрещено всем (в том числе и -администраторам) помещать в архив любые 'объявления', если с -момента добавления прошло только 1-2 дня. - -В первую очередь мы модифицируем реестр ролей для отражения -этих изменений. Мы определили, что группа 'маркетинг' имеет те -же базовые права, что и 'сотрудник', поэтому мы определим -'маркетинг' таким образом, чтобы она наследовала права группы -'сотрудник': - -.. code-block:: php - :linenos: - - // Новая группа 'маркетинг' наследует права от группы 'сотрудник' - $acl->addRole(new Zend\Permissions\Acl\Role\GenericRole('marketing'), 'staff'); - -Далее обратите внимание, что указанные выше права доступа -имеют отношение к особым ресурсам (например, "подписка", -"последние новости"). Теперь добавим эти ресурсы: - -.. code-block:: php - :linenos: - - // Создаем ресурсы для этих ролей - - // подписка - $acl->add(new Zend\Permissions\Acl\Resource\GenericResource('newsletter')); - - // новости - $acl->add(new Zend\Permissions\Acl\Resource\GenericResource('news')); - - // последние новости - $acl->add(new Zend\Permissions\Acl\Resource\GenericResource('latest'), 'news'); - - // объявления - $acl->add(new Zend\Permissions\Acl\Resource\GenericResource('announcement'), 'news'); - -Затем определяются более точные правила для целевых областей -*ACL*. - -.. code-block:: php - :linenos: - - // Маркетинг должен иметь возможность публиковать и удалять подписку - // и последние новости - $acl->allow('marketing', - array('newsletter', 'latest'), - array('publish', 'archive')); - - // Пользователю (и маркетингу через наследование), запрещено редактировать - // последние новости - $acl->deny('staff', 'latest', 'revise'); - - // Всем, включая администраторов, не разрешается удалять объявления - $acl->deny(null, 'announcement', 'archive'); - -Теперь мы можем производить запросы к *ACL* с учетом последних -изменений: - -.. code-block:: php - :linenos: - - echo $acl->isAllowed('staff', 'newsletter', 'publish') ? - "разрешен" : "запрещен"; - // запрещен - - echo $acl->isAllowed('marketing', 'newsletter', 'publish') ? - "разрешен" : "запрещен"; - // разрешен - - echo $acl->isAllowed('staff', 'latest', 'publish') ? - "разрешен" : "запрещен"; - // запрещен - - echo $acl->isAllowed('marketing', 'latest', 'publish') ? - "разрешен" : "запрещен"; - // разрешен - - echo $acl->isAllowed('marketing', 'latest', 'archive') ? - "разрешен" : "запрещен"; - // разрешен - - echo $acl->isAllowed('marketing', 'latest', 'revise') ? - "разрешен" : "запрещен"; - // запрещен - - echo $acl->isAllowed('editor', 'announcement', 'archive') ? - "разрешен" : "запрещен"; - // запрещен - - echo $acl->isAllowed('administrator', 'announcement', 'archive') ? - "разрешен" : "запрещен"; - // запрещен - -.. _zend.permissions.acl.refining.removing: - -Удаление правил доступа ------------------------ - -Для того, чтобы удалить одно или несколько правил из *ACL*, -используйте методы *removeAllow()* или *removeDeny()*. Как и в случае с *allow()* -и *deny()*, вы можете передавать ``NULL`` в качестве параметра, чтобы -применить метод ко всем ролям, ресурсам, и/или привилегиям: - -.. code-block:: php - :linenos: - - // Убираем запрет на редактирование последних новостей для 'пользователя' - // (и маркетинга через наследование) - $acl->removeDeny('staff', 'latest', 'revise'); - - echo $acl->isAllowed('marketing', 'latest', 'revise') ? - "разрешен" : "запрещен"; - // разрешен - - // Убираем разрешение на публикацию и удаление подписки для маркетинга - $acl->removeAllow('marketing', - 'newsletter', - array('publish', 'archive')); - - echo $acl->isAllowed('marketing', 'newsletter', 'publish') ? - "разрешен" : "запрещен"; - // запрещен - - echo $acl->isAllowed('marketing', 'newsletter', 'archive') ? - "разрешен" : "запрещен"; - // запрещен - -Привилегии могут модифицироваться в порядке возрастания, как -показано выше, но параметр ``NULL`` для привилегий переопределяет -такой порядок изменений: - -.. code-block:: php - :linenos: - - // Разрешить маркетингу все действия над последними новостями - $acl->allow('marketing', 'latest'); - - echo $acl->isAllowed('marketing', 'latest', 'publish') ? - "разрешен" : "запрещен"; - // разрешен - - echo $acl->isAllowed('marketing', 'latest', 'archive') ? - "разрешен" : "запрещен"; - // разрешен - - echo $acl->isAllowed('marketing', 'latest', 'anything') ? - "разрешен" : "запрещен"; - // разрешен - - diff --git a/docs/languages/ru/modules/zend.server.reflection.rst b/docs/languages/ru/modules/zend.server.reflection.rst deleted file mode 100644 index 5598468ee..000000000 --- a/docs/languages/ru/modules/zend.server.reflection.rst +++ /dev/null @@ -1,65 +0,0 @@ -.. EN-Revision: none -.. _zend.server.reflection: - -Zend\Server\Reflection -====================== - -.. _zend.server.reflection.introduction: - -Введение --------- - -*Zend\Server\Reflection* предоставляет стандарный механизм для -выполнения интроспекции функций и классов для использования с -серверными классами. Он основан на Reflection API в PHP 5 и расширяет -его для предоставления методов получения типов и описаний -параметров и возвращаемых значений, полного списка прототипов -функций и методов (т.е. комбинации всех возможных валидных -вызовов), описаний функций/методов. - -Обычно этот функционал будет использоваться только -разработчиками серверных классов для данного фреймворка. - -.. _zend.server.reflection.usage: - -Использование -------------- - -Основное использование простое: - -.. code-block:: php - :linenos: - - getPrototypes(); - - // Обход полученных прототипов - foreach ($prototypes as $prototype) { - - // Получение типа возращаемого прототипом значения - echo "Return type: ", $prototype->getReturnType(), "\n"; - - // Получение параметров прототипа - $parameters = $prototype->getParameters(); - - echo "Parameters: \n"; - foreach ($parameters as $parameter) { - // Получение типа параметра - echo " ", $parameter->getType(), "\n"; - } - } - - // Получение пространства имен для класса, функции или метода - // Пространства имен могут быть установлены во время инстанцирования (второй аргумент), - // или с помощью метода setNamespace() - $reflection->getNamespace(); - -*reflectFunction()* возвращает объект *Zend\Server\Reflection\Function*, *reflectClass* -возвращает объект *Zend\Server\Reflection\Class*. Обратитесь к документации -API чтобы узнать, какие методы доступны в этих объектах. - - diff --git a/docs/languages/ru/modules/zend.server.rst b/docs/languages/ru/modules/zend.server.rst deleted file mode 100644 index 9e0e7a047..000000000 --- a/docs/languages/ru/modules/zend.server.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. EN-Revision: none -.. _zend.server.introduction: - -Введение -======== - -Семейство классов *Zend_Server* предоставляет набор функциональных -возможностей для различных серверных классов, в которые -входят *Zend\XmlRpc\Server*, *Zend\Rest\Server*, *Zend\Json\Server* и *Zend\Soap\Wsdl*. -*Zend\Server\Interface* предоставляет интерфейс, который имитирует класс -*SoapServer* из PHP 5; все серверные классы должны реализовывать этот -интерфейс для того, чтобы предоставлять стандартный серверный -API. - -*Zend\Server\Reflection* предоставляет стандарный механизм для -выполнения интроспекции функций и классов, используемых как -обратные вызовы (callbacks) с серверными классами, и предоставляет -данные, пригодные для использования с методами *getFunctions()* и -*loadFunctions()* интерфейса *Zend\Server\Interface*. - - diff --git a/docs/languages/ru/modules/zend.uri.rst b/docs/languages/ru/modules/zend.uri.rst deleted file mode 100644 index 453394f4e..000000000 --- a/docs/languages/ru/modules/zend.uri.rst +++ /dev/null @@ -1,220 +0,0 @@ -.. EN-Revision: none -.. _zend.uri.chapter: - -Zend_Uri -======== - -.. _zend.uri.overview: - -Обзор ------ - -``Zend_Uri`` является компонентой, которая призвана облегчить -работу с URI (`Uniform Resource Identifiers`_) и их валидацию. ``Zend_Uri`` был создан -для обслуживания других компонент, таких, как ``Zend\Http\Client``, но -полезен и как отдельная утилита. - -URI всегда начинаются со схемы, после которой следует двоеточие. -Структура для разных схем может сильно отличаться. Класс -``Zend_Uri`` предоставляет фабрику (паттерн factory), которая -возвращает его подклассы, специализирующиеся в различных -схемах. Подклассы называются ``Zend\Uri\``, где **- схема в -нижнем регистре, с прописной первой буквой. Исключением из -этого правила является HTTPS, который обрабатывается подклассом -``Zend\Uri\Http``. - -.. _zend.uri.creation: - -Создание нового URI -------------------- - -``Zend_Uri`` будет строить с нуля новый URI, если *Zend\Uri\Uri::factory()* была -передана только схема. - -.. _zend.uri.creation.example-1: - -.. rubric:: Создание нового URI с Zend\Uri\Uri::factory() - -.. code-block:: php - :linenos: - - // Для того, чтобы создать с нуля новый URI, передайте только схему. - $uri = Zend\Uri\Uri::factory('http'); - - // $uri является экземпляром Zend\Uri\Http - -Для того, чтобы создать с нуля новый URI, передайте *Zend\Uri\Uri::factory()* -только схему. [#]_. При передаче не поддерживаемой схемы -генерируется исключение ``Zend\Uri\Exception``. - -Если переданные схема или URI поддерживаются, то *Zend\Uri\Uri::factory()* -вернет свой подкласс, который специализируется на данной -схеме. - -.. _zend.uri.manipulation: - -Работа с существующим URI -------------------------- - -Для того, чтобы работать с существующим URI, передайте его весь -целиком *Zend\Uri\Uri::factory()*. - -.. _zend.uri.manipulation.example-1: - -.. rubric:: Работа с существующим URI через Zend\Uri\Uri::factory() - -.. code-block:: php - :linenos: - - // Чтобы работать с существующим URI, передайте его как параметр - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - // $uri является экземпляром Zend\Uri\Http - -URI будет распарсен и проверен на валидность. Если он оказался -невалидным, то сразу же будет сгенерировано исключение -``Zend\Uri\Exception``. Иначе *Zend\Uri\Uri::factory()* вернет свой подкласс, который -специализируется на данной схеме. - -.. _zend.uri.validation: - -Проверка URI ------------- - -Функция *Zend\Uri\Uri::check()* может использоваться в том случае, когда -нужна только проверка существующего URI. - -.. _zend.uri.validation.example-1: - -.. rubric:: Проверка URI с помощью Zend\Uri\Uri::check() - -.. code-block:: php - :linenos: - - // Проверка, является ли данный URI синтаксически корректным - $valid = Zend\Uri\Uri::check('http://uri.in.question'); - - // $valid равен TRUE при валидном URI, иначе FALSE - -*Zend\Uri\Uri::check()* возвращает булево значение, использование этой -функции более удобно, чем вызов *Zend\Uri\Uri::factory()* и отлов исключения. - -.. _zend.uri.validation.allowunwise: - -Разрешение использования "неумных" символов в URI -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -По умолчанию ``Zend_Uri`` не будет принимать следующие символы, -которые в спецификации определены как "неумные" (unwise) и -невалидные: *"{", "}", "|", "\", "^", "`"*. Тем не менее, многие реализации -принимают эти символы как валидные. - -Можно заставить ``Zend_Uri`` принимать эти символы путем установки -'allow_unwise' в TRUE, используя метод *Zend\Uri\Uri::setConfig()*: - -.. _zend.uri.validation.allowunwise.example-1: - -.. rubric:: Разрешение использования спецсимволов в URI - -.. code-block:: php - :linenos: - - // Содержит символ '|' - // Обычно такой вызов будет возвращать 'false': - $valid = Zend\Uri\Uri::check('http://example.com/?q=this|that'); - - // Тем не менее, вы можете разрешить "неумные" символы - Zend\Uri\Uri::setConfig(array('allow_unwise' => true)); - // будет возвращать 'true' - $valid = Zend\Uri\Uri::check('http://example.com/?q=this|that'); - - // Установка 'allow_unwise' обратно в FALSE - Zend\Uri\Uri::setConfig(array('allow_unwise' => false)); - -.. note:: - - *Zend\Uri\Uri::setConfig()* глобально устанавливает опции конфигурации. - Рекомендуется сбрасывать опцию 'allow_unwise' в 'false', как показано в - примере выше, если только вы не хотите разрешить - использование "неумных" символов на все время во всем - приложении. - -.. _zend.uri.instance-methods: - -Общие методы экземпляров ------------------------- - -Каждый экземпляр подкласса ``Zend_Uri`` (например, ``Zend\Uri\Http``) имеет -несколько методов, полезных для работы с любыми видами URI. - -.. _zend.uri.instance-methods.getscheme: - -Получение схемы URI -^^^^^^^^^^^^^^^^^^^ - -Схема URI – часть URI, завершающаяся двоеточием. Например, схемой -в *http://www.zend.com* является *http*. - -.. _zend.uri.instance-methods.getscheme.example-1: - -.. rubric:: Получение схемы из объекта Zend\Uri\* - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - $scheme = $uri->getScheme(); // "http" - -Метод экземпляра *getScheme()* возвращает схему из URI. - -.. _zend.uri.instance-methods.geturi: - -Получение всего URI -^^^^^^^^^^^^^^^^^^^ - -.. _zend.uri.instance-methods.geturi.example-1: - -.. rubric:: Получение всего URI из объекта Zend\Uri\* - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - echo $uri->getUri(); // "http://www.zend.com" - -Метод *getUri()* возвращает строковое представление всего URI. - -.. _zend.uri.instance-methods.valid: - -Проверка URI на валидность -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -*Zend\Uri\Uri::factory()* всегда производит синтаксическую проверку -переданных ему URI и не будет создавать новый экземпляр -подкласса ``Zend_Uri``, если данный URI не прошел проверку. Тем не -менее, после того, как был инстанцирован подкласс ``Zend_Uri`` для -нового URI или на основе уже существующего, в результате -манипуляций с ним этот URI может стать невалидным. - -.. _zend.uri.instance-methods.valid.example-1: - -.. rubric:: Проверка объекта Zend\Uri\* - -.. code-block:: php - :linenos: - - $uri = Zend\Uri\Uri::factory('http://www.zend.com'); - - $isValid = $uri->valid(); // TRUE - -Метод *valid()* дает возможность проверить, является ли URI -по-прежнему валидным. - - - -.. _`Uniform Resource Identifiers`: http://www.w3.org/Addressing/ - -.. [#] На момент написания этой документации Zend_Uri поддерживает - только схемы HTTP и HTTPS. \ No newline at end of file diff --git a/docs/languages/ru/modules/zend.validator.rst b/docs/languages/ru/modules/zend.validator.rst deleted file mode 100644 index 093bf0fab..000000000 --- a/docs/languages/ru/modules/zend.validator.rst +++ /dev/null @@ -1,288 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.introduction: - -Введение -======== - -Компонента ``Zend_Validate`` предоставляет набор наиболее часто -используемых валидаторов. Она также предоставляет простой -механизм формирования цепочки валидаторов, посредством -которого к одним и тем же данным может быть применено -несколько валидаторов в порядке, заданном пользователем. - -.. _zend.validator.introduction.definition: - -Что такое валидатор? --------------------- - -Валидатор проверяет входные данные на предмет соответствия -требованиям и возвращает результат булевого типа. Если -входные данные не соответствуют требованиям, то валидатор -может предоставить информацию о том, какому требованию -(требованиям) не соответствуют входные данные. - -Например, веб-приложение может требовать, чтобы имя -пользователя было длиной от 6 до 12 символов и содержало только -алфавитно-цифровые символы. Для того, чтобы проверить, -соответствует ли имя пользователя этим требованиям, можно -использовать валидатор. Если выбранное имя пользователя не -соответствует одному из требований (или обоим требованиям), то -будет также полезно знать, каким именно требованиям не -соответствует имя пользователя. - -.. _zend.validator.introduction.using: - -Базовое использование валидаторов ---------------------------------- - -Такое определение валидации дает основу для ``Zend\Validate\Interface``, -который определяет два метода -*isValid()* и *getMessages()*. Метод *isValid()* -выполняет валидацию переданного значения, возвращая ``TRUE`` -тогда и только тогда, когда значение прошло проверку по -критериям валидации. - -Если *isValid()* возвращает ``FALSE``, то *getMessages()* возвращает массив -сообщений, поясняющих, по каким причинам валидация не была -пройдена. Ключи массива являются короткими строками, -идентифицирующими причины, по которым не была пройдена -валидация. Значения массива являются строками сообщений, -понятных человеку. Ключи и значения зависят от класса -валидатора - каждый класс валидатора определяет собственный -набор сообщений об ошибке и уникальных -ключей-идентификаторов. Каждый класс также определяет -константы, соответствующие идентификаторам причин, по которым -валидация не была пройдена. - -.. note:: - - Метод *getMessages()* возвращает сообщения ошибок валидации только - для последнего вызова *isValid()*. Любой вызов метода *isValid()* - стирает все сообщения и ошибки с его прошлого вызова, т.к. - вероятно, что отдельные вызовы *isValid()* производятся для - различных входных значений. - -Следующий пример демонстрирует проверку адреса e-mail: - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\EmailAddress(); - - if ($validator->isValid($email)) { - // email прошел валидацию - } else { - // email не прошел валидацию; вывод причин этого - foreach ($validator->getMessages() as $messageId => $message) { - echo "Validation failure '$messageId': $message\n"; - } - } - - - -.. _zend.validator.introduction.messages: - -Установка собственных сообщений от ошибках ------------------------------------------- - -Классы валидации предоставляют метод *setMessage()*, с помощью -которого вы можете устанавливать формат сообщения, -возвращаемого методом *getMessages()* в случае, если валидация не -была пройдена. Первый аргумент этого метода является строкой, -содержащей текст сообщения об ошибке. Вы можете включать в нее -маркеры, которые будут замещаться данными, относящимися к -валидатору. Маркер *%value%* поддерживается всеми валидаторами, он -заменяется значением, который вы передали методу *isValid()*. -Другие маркеры могут поддерживаться не во всех валидаторах. -Например, *%max%* является маркером, поддерживаемым валидатором -``Zend\Validate\LessThan``. Метод *getMessageVariables()* возвращает массив маркеров, -поддерживаемых валидатором. - -Второй необязательный аргумент является строкой, которую -нужно установить в качестве идентификатора шаблона сообщения, -это может быть полезным в том случае, когда класс валидации -предусматривает несколько причин, по которым валидация может -быть не пройдена. Если вы опустите второй аргумент, то *setMessage()* -предполагает, что переданное вами сообщение должно -использоваться в качестве первого шаблона сообщения, -объявленного в классе валидации. Многие классы валидации -имеют только один шаблон сообщения об ошибке, поэтому в -большинстве случаев нет необходимости указывать, какой именно -шаблон требуется изменить. - - - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(8); - - $validator->setMessage( - 'Строка \'%value%\' слишком короткая. Она должна быть длиной как минимум ' . - '%min% символов', - Zend\Validate\StringLength::TOO_SHORT); - - if (!$validator->isValid('слово')) { - $messages = $validator->getMessages(); - echo current($messages); - - // "Строка 'слово' слишком короткая. Она должна быть длиной как минимум - // 8 символов" - } - - - -Вы можете устанавливать несколько сообщений сразу, используя -метод *setMessages()*. Его аргумент является массивом, содержащим -пары ключ/значение. - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(8, 12); - - $validator->setMessages( array( - Zend\Validate\StringLength::TOO_SHORT => - 'Строка \'%value%\' слишком короткая', - Zend\Validate\StringLength::TOO_LONG => - 'Строка \'%value%\' слишком длинная' - )); - - - -Если ваше приложение требует большей гибкости, ... то вы можете -использовать доступ к свойствам под теми же именами, что и -метки сообщения, поддерживаемые данным классом валидации. -Свойство *value* всегда доступно в валидаторах, это значение, -которое вы передали в качестве аргумента метода *isValid()*. Другие -свойства могут поддерживаться не всеми классами валидации. - - .. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(8, 12); - - if (!validator->isValid('слово')) { - echo 'Слово не прошедшее проверку: ' - . $validator->value - . '; его длина не находится в диапазоне между ' - . $validator->min - . ' и ' - . $validator->max - . " символами\n"; - } - - - -.. _zend.validator.introduction.static: - -Использование статического метода is() --------------------------------------- - -Если неудобно каждый раз загружать требуемый класс валидации -и создавать его экземпляр, то можно использовать статический -метод *Zend\Validate\Validate::is()* в качестве альтернативного способа вызова. -Первый аргумент этого метода является входным значением, -которое вы передавали бы методу *isValid()*. Второй аргумент -является строкой, которая соответствует базовому имени класса -валидации относительно пространства имен *Zend_Validate*. Метод *is()* -автоматически загружает класс, создает его экземпляр и -применяет метод *isValid()* к входным данным. - - .. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($email, 'EmailAddress')) { - // Да, похоже, email валиден - } - - - -Вы можете также передавать массив аргументов конструктора, -если они нужны для данного класса валидации. - - .. code-block:: php - :linenos: - - if (Zend\Validate\Validate::is($value, 'Between', array(1, 12))) { - // Да, $value имеет значение в диапазоне между 1 и 12 - } - - - -Метод *is()* возвращает значение булевого типа, как и метод -*isValid()*. При использовании статического метода *is()* сообщения -ошибки валидации не доступны. - -Вариант со статическим методом может быть удобным при -единичном вызове валидатора, но если вам нужно применить -валидацию к нескольким входным значениям, то более -эффективным будет использование варианта с инстанцированием. - -Кроме того, класс ``Zend\Filter\Input`` позволяет инстанцировать и -запускать более одного класса фильтра и валидации для -обработки набора входных данных. Читайте :ref:` `. - -.. _zend.validator.introduction.translation: - -Перевод сообщений ------------------ - -Классы валидации предоставляют метод *setTranslator()*, с помощью -которого вы можете устанавливать экземпляр класса ``Zend_Translator``, -который будет переводить сообщения в случае ошибки валидации. -Метод *getTranslator()* возвращает установленный экземпляр -переводчика. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(8, 12); - $translate = new Zend\Translator\Translator( - 'array', - array(Zend\Validate\StringLength::TOO_SHORT => 'Translated \'%value%\''), - 'en' - ); - - $validator->setTranslator($translate); - -С помощью статического метода *setDefaultTranslator()* вы можете -установить экземпляр ``Zend_Translator``, который будет использоваться -во всех классах валидации, и извлекать его с помощью -*getDefaultTranslator()*. Это избавляет от установки вручную переводчика -для всех классов валидации и упрощает ваш код. - -.. code-block:: php - :linenos: - - $translate = new Zend\Translator\Translator( - 'array', - array(Zend\Validate\StringLength::TOO_SHORT => 'Translated \'%value%\''), - 'en' - ); - Zend\Validate\Validate::setDefaultTranslator($translate); - -.. note:: - - Если вы установили глобальную для всего приложения локаль - через ``Zend_Registry``, то эта локаль будет использоваться по - умолчанию в переводчике. - -Иногда бывает необходимым отключить переводчика в валидаторе. -Для этого используйте метод *setDisableTranslator()*, который принимает -булево значение. Для получения установленного значения -используйте *isTranslatorDisabled*. - -.. code-block:: php - :linenos: - - $validator = new Zend\Validate\StringLength(8, 12); - if (!$validator->isTranslatorDisabled()) { - $validator->setDisableTranslator(); - } - -Вы можете также использовать переводчика вместо установки -собственных сообщений через метод *setMessage()*. Но при этом имейте -в виду, что переводчик обрабатывает и сообщения, которые вы -установили самостоятельно. - - diff --git a/docs/languages/ru/modules/zend.validator.validator-chains.rst b/docs/languages/ru/modules/zend.validator.validator-chains.rst deleted file mode 100644 index daf6c5ded..000000000 --- a/docs/languages/ru/modules/zend.validator.validator-chains.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.validator_chains: - -Цепочки валидаторов -=================== - -Часто к одному и тому же значению должно быть применено -несколько валидаций в определенном порядке. Следующий код -демонстрирует способ решения примера из :ref:`введения -`, где имя пользователя должно быть длиной от 6 -до 12 символов и состоять только из алфавитно-цифровых -символов: - - .. code-block:: php - :linenos: - - // Создает цепочку валидаторов и добавляет валидаторы в нее - $validatorChain = new Zend\Validate\Validate(); - $validatorChain->addValidator(new Zend\Validate\StringLength(6, 12)) - ->addValidator(new Zend\Validate\Alnum()); - - // Валидация имени пользователя - if ($validatorChain->isValid($username)) { - // имя пользователя прошло валидацию - } else { - // имя пользователя не прошло валидацию; вывод причин этого - foreach ($validatorChain->getMessages() as $message) { - echo "$message\n"; - } - } - -Валидаторы применяются в том же порядке, в котором они были -добавлены в ``Zend_Validate``. В примере выше сначала проверяется, -находится ли длина имени пользователя в пределах 6-12 символов, -затем проверяется, содержит ли имя пользователя только -алфавитно-цифровые символы. Вторая проверка проводится -независимо от того, была ли успешно пройдена первая проверка. -Это означает, что если обе валидации не были пройдены, то -*getMessages()* вернет сообщения об ошибках валидации от обоих -валидаторов. - -В некоторых случаях имеет смысл прерывать валидацию, если -данные не прошли проверку каким-либо валидатором в цепочке. -``Zend_Validate`` обеспечивает эту возможность с помощью второго -параметра метода *addValidator()*. При установке ``$breakChainOnFailure`` в ``TRUE``, -добавленный валидатор будет прерывать выполнение цепочки -валидаций в случае неудачи. Это позволяет избежать выполнения -других валидаций, которые были бы излишними или неподходящими -в данной ситуации. Ниже приводится переписанный пример, в -котором проверка на алфавитно-цифровые символы не должна -производиться, если не была пройдена проверка на длину строки: - - .. code-block:: php - :linenos: - - $validatorChain->addValidator(new Zend\Validate\StringLength(6, 12), true) - ->addValidator(new Zend\Validate\Alnum()); - - - -Любые объекты, реализующие ``Zend\Validate\Interface``, могут быть -использованы в цепочке валидаторов. - - diff --git a/docs/languages/ru/modules/zend.validator.writing-validators.rst b/docs/languages/ru/modules/zend.validator.writing-validators.rst deleted file mode 100644 index e47d0efd0..000000000 --- a/docs/languages/ru/modules/zend.validator.writing-validators.rst +++ /dev/null @@ -1,250 +0,0 @@ -.. EN-Revision: none -.. _zend.validator.writing_validators: - -Написание валидаторов -===================== - -``Zend_Validate`` предоставляет набор наиболее часто используемых -валидаторов, но разработчики часто сталкиваются с такими -ситуациями, когда требуется написание своих валидаторов. В -этом разделе описан процесс написания своих валидаторов. - -``Zend\Validate\Interface`` определяет три метода: *isValid()*, *getMessages()* и -*getErrors()*, они должны реализовываться в ваших классах валидации. -Объект, реализующий данный интерфейс, может быть добавлен в -цепочку валидаторов через метод *Zend\Validate\Validate::addValidator()*, также такие -объекты могут использоваться с классом :ref:`Zend\Filter\Input -`. - -Как вы наверное уже поняли из приведенного выше описания -интерфейса ``Zend\Validate\Interface``, классы валидации, предоставляемые -Zend Framework, возвращают булево значение, означающее успех/неуспех -валидации. Они также предоставляют информацию о том **почему** -переданное значение не прошло валидацию. Возможность узнать -причину того, почему значение не проходит валидацию, может -быть полезна для различных целей, как, например, создание -статистики для анализа удобства использования приложения. - -Базовый функционал для сообщений об ошибке валидации -реализован в классе ``Zend\Validate\Abstract``. Для того, чтобы -использовать этот функционал при создании класса валидации, -просто наследуйте свой класс от ``Zend\Validate\Abstract``. В -классе-наследнике вы можете реализовать логику метода *isValid()*, -а также определить шаблоны и переменные сообщений, которые -соответствуют различным типам ошибок валидации. Если значение -не проходит проверку, то *isValid()* должен возвращать ``FALSE``. Если -значение проходит проверку, то *isValid()* должен возвращать ``TRUE``. - -Обычно метод *isValid()* не должен бросать никаких исключений, за -исключением тех ситуаций, когда невозможно определить, -является ли валидным входное значение или нет. Например, -бросок исключения уместен в случае, когда невозможно открыть -файл (недоступен сервер LDAP, нет соединения с базой данных), и -процесс валидации не может быть продолжен. - -.. _zend.validator.writing_validators.example.simple: - -.. rubric:: Создание простого класса валидации - -Следующий пример демонстрирует создание простейшего -валидатора. В данном случае правила валидации просты - входное -значение должно иметь тип *float*. - - .. code-block:: php - :linenos: - - class MyValid_Float extends Zend\Validate\Abstract - { - const FLOAT = 'float'; - - protected $_messageTemplates = array( - self::FLOAT => "'%value%' не является числом с плавающей точкой" - ); - - public function isValid($value) - { - $this->_setValue($value); - - if (!is_float($value)) { - $this->_error(self::FLOAT); - return false; - } - - return true; - } - } - -В данном классе определен шаблон для единственного сообщения -об ошибке валидации, который включает в себя встроенный -"магический" параметр *%value%*. Вызов *_setValue()* подготавливает -объект к подстановке проверяемого значения в сообщение об -ошибке. Вызов *_error()* устанавливает причину ошибки валидации. -Поскольку в этом классе только одно сообщение об ошибке, то нет -необходимости передавать методу *_error()* имя шаблона сообщения -об ошибке. - -.. _zend.validator.writing_validators.example.conditions.dependent: - -.. rubric:: Написание классов валидации с подчиненными условиями - -Следующий пример демонстрирует более сложный набор правил -валидации, где требуется, чтобы входное значение было числом, -находящимся в диапазоне между минимальным и максимальным -значениями. Значение может не пройти валидацию по одной из -следующих причин: - - - - - Значение не является числом. - - - Значение меньше минимально допустимого. - - - Значение больше максимально допустимого. - - - -Эти возможные причины переводятся в определения в классе: - - .. code-block:: php - :linenos: - - class MyValid_NumericBetween extends Zend\Validate\Abstract - { - const MSG_NUMERIC = 'msgNumeric'; - const MSG_MINIMUM = 'msgMinimum'; - const MSG_MAXIMUM = 'msgMaximum'; - - public $minimum = 0; - public $maximum = 100; - - protected $_messageVariables = array( - 'min' => 'minimum', - 'max' => 'maximum' - ); - - protected $_messageTemplates = array( - self::MSG_NUMERIC => "'%value%' не является числом", - self::MSG_MINIMUM => "'%value%' должен быть не меньше '%min%'", - self::MSG_MAXIMUM => "'%value%' должен быть не больше '%max%'" - ); - - public function isValid($value) - { - $this->_setValue($value); - - if (!is_numeric($value)) { - $this->_error(self::MSG_NUMERIC); - return false; - } - - if ($value < $this->minimum) { - $this->_error(self::MSG_MINIMUM); - return false; - } - - if ($value > $this->maximum) { - $this->_error(self::MSG_MAXIMUM); - return false; - } - - return true; - } - } - -Открытые свойства ``$minimum`` и ``$maximum`` были созданы для установки -нижней и верхней границ диапазона соответственно. В классе -также определены две переменные сообщений, которые -соответствуют этим открытым свойствам и позволяют -использовать *min* и *max* в качестве магических параметров в -шаблонах сообщений, так же, как и *value*. - -Обратите вмимание, что если какая-либо из проверок в методе -*isValid()* не была пройдена, то подготавливается соответствующее -сообщение и метод сразу же возвращает ``FALSE``. Таким образом, эти -правила валидации являются последовательно-зависимыми. Это -значит, что если одна из проверок не была пройден, то нет -необходимости производить последующие проверки. Но это не -обязательный случай, в следующем примере показан класс с -независимыми правилами валидации, где объект валидации может -возвращать несколько причин, по которым валидация не была -пройдена. - -.. _zend.validator.writing_validators.example.conditions.independent: - -.. rubric:: Валидация с независимыми условиями и возвратом нескольких причин непрохождения валидации - -Рассмотрим написание класса валидации для обеспечения -стойкости пароля, где от пользователя требуется выбрать -пароль, который соответствует определенным критериям в целях -защиты пользовательского аккаунта. Предположим, что критерии -безопасности требуют, чтобы пароль: - - - - - был длиной как минимум 8 символов, - - - содержал как минимум одну букву в верхнем регистре, - - - содержал как минимум одну букву в нижнем регистре, - - - содержал как минимум один цифровой символ. - - - -Следующий класс реализует эти критерии валидации: - - .. code-block:: php - :linenos: - - class MyValid_PasswordStrength extends Zend\Validate\Abstract - { - const LENGTH = 'length'; - const UPPER = 'upper'; - const LOWER = 'lower'; - const DIGIT = 'digit'; - - protected $_messageTemplates = array( - self::LENGTH => "'%value%' должен быть длиной как минимум 8 символов", - self::UPPER => "'%value%' должен содержать как минимум одну букву в верхнем регистре", - self::LOWER => "'%value%' должен содержать как минимум одну букву в нижнем регистре", - self::DIGIT => "'%value%' должен содержать как минимум один цифровой символ" - ); - - public function isValid($value) - { - $this->_setValue($value); - - $isValid = true; - - if (strlen($value) < 8) { - $this->_error(self::LENGTH); - $isValid = false; - } - - if (!preg_match('/[A-Z]/', $value)) { - $this->_error(self::UPPER); - $isValid = false; - } - - if (!preg_match('/[a-z]/', $value)) { - $this->_error(self::LOWER); - $isValid = false; - } - - if (!preg_match('/\d/', $value)) { - $this->_error(self::DIGIT); - $isValid = false; - } - - return $isValid; - } - } - -Обратите внимание, что эти четыре проверки в методе *isValid()* не -сразу же возвращают ``FALSE``. Это позволяет классу валидации -предоставлять **все** причины того, почему введенный пароль не -отвечает требованиям валидации. Если, например, пользователь -введет строку "*#$%*" в качестве пароля, то после *isValid()* вызов -*getMessages()* вернет все четыре сообщения ошибки валидации. - - diff --git a/docs/languages/ru/modules/zend.version.rst b/docs/languages/ru/modules/zend.version.rst deleted file mode 100644 index 9fc8c2fe1..000000000 --- a/docs/languages/ru/modules/zend.version.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. EN-Revision: none -.. _zend.version.reading: - -Получение версии Zend Framework -=============================== - -``Zend_Version`` имеет константу ``Zend\Version\Version::VERSION``, которая содержит -строку с номером версии текущей инсталляции Zend Framework. Например, -``Zend\Version\Version::VERSION`` может содержать "1.7.4". - -Статический метод ``Zend\Version\Version::compareVersion($version)`` основан на -*PHP*-функции `version_compare()`_. Метод возвращает -1, если указанная -версия более поздняя, чем версия установленного Zend Framework; 0, -если они одинаковые, и +1, если указанная версия более ранняя, -чем версия установленного Zend Framework. - -.. _zend.version.reading.example: - -.. rubric:: Пример использования метода compareVersion() - -.. code-block:: php - :linenos: - - // возвращает -1, 0 или 1 - $cmp = Zend\Version\Version::compareVersion('2.0.0'); - -Статический метод ``Zend\Version\Version::getLatest()`` возвращает номер версии -последнего стабильного релиза, доступного для скачивания на -сайте `Zend Framework`_. - -.. _zend.version.latest.example: - -.. rubric:: Пример использования метода getLatest() - -.. code-block:: php - :linenos: - - // возвращает 1.11.0 (или более позднюю версию) - echo Zend\Version\Version::getLatest(); - - - -.. _`version_compare()`: http://php.net/version_compare -.. _`Zend Framework`: http://framework.zend.com/download/latest diff --git a/docs/languages/ru/modules/zend.view.helpers.doctype.rst b/docs/languages/ru/modules/zend.view.helpers.doctype.rst deleted file mode 100644 index 948535b47..000000000 --- a/docs/languages/ru/modules/zend.view.helpers.doctype.rst +++ /dev/null @@ -1,84 +0,0 @@ -.. EN-Revision: none -.. _zend.view.helpers.initial.doctype: - -Помощник Doctype -================ - -Валидные HTML- и XHTML-документы должны включать в себя декларацию -*DOCTYPE*. Написание этих деклараций сложно для запоминания, кроме -того, от выбранного типа документа зависит то, как должны -выводиться элементы в вашем документе (например, -экранирование через CDATA в элементах *