[[webdev:php:zend:notizen-1x]]

Notizzettel Zend-Framework 1.12.3

Um die Arbeitsweise (Ordnerstrukturen, Namespaces, Regeln, MVC) vom Framework kennen zulernen, kann man händisch ein kleines Projekt mit dem Front-Controller erstellen. Der Front-Controller kümmert sich um den Request und leitet es an die Action-Controller weiter. im nächsten Kapitel wird dieses Projekt mit dem zf-Tool erstellt, was die ganze Arbeit mit Ordnerstruktur, Controller, Actions, Models etc etc abnimmt uvm. Desweiteren gibt es noch Notizen zu Helper Klassen für den Action-Controller.

  • Installation Zend, Include_Path Direktive anpassen
  • Webseitenbeispiel: Startseite mit Unterseite (index, about)
  • header, footer seperat einbinden (layout, render)
  • (Autoloader für Klassen konfigurieren)
  • Front-Controller zur Ausführung

Installation

Es wurde Ubuntu 12.04 LTS verwendet mit PHP 5.4. Hier wird das Framework in /var/php-frameworks/ entpackt. Damit PHP die Library finden kann, muss in der php.ini die include_path-Direktive angepasst werden:

$ mkdir /var/php-frameworks/ && cd /var/php-frameworks/
$ wget https://packages.zendframework.com/releases/ZendFramework-1.12.3/ZendFramework-1.12.3.zip
$ unzip ZendFramework-1.12.3.zip
 
# ...
# include_path erweitern, damit php die library findet beispiel:
# .:/usr/lib/php:/var/php-frameworks/Zend/library
 
$ mcedit /etc/php5/apache2/php.ini

fertig.

kleine Webseite bauen

.
|-- controllers
|   |-- ErrorController.php
|   `-- IndexController.php
|-- index.php
`-- views
    `-- scripts
        |-- error
        |   `-- error.phtml
        |-- index
        |   |-- about.phtml
        |   `-- index.phtml
        `-- layout
            |-- footer.phtml
            `-- header.phtml

6 directories, 8 files

Hier ist das Herz, hier wird der Request vom Front-Controller verabreitet.

index.php
<?php
/*
 * front-controller 
 */
 
error_reporting(E_ALL);
 
require_once('Zend/Controller/Front.php');
require_once('Zend/Controller/Action.php');
require_once 'Zend/Controller/Exception.php';
 
Zend_Controller_Front::getInstance()
    ->setControllerDirectory('controllers/')
    ->throwExceptions(false)
    ->dispatch();
 
 
 
?>

Damit das MVC greift, sind mindestens zwei Controller nötig: Index, Error. Für die Startseite wird ein IndexController im Ordner controllers/ (s.o. Struktur) angelegt:

IndexController.php
<?php
 
// es soll ein hello world figlet auf der startseite ausgegeben werden..
require_once('Zend/Text/Figlet.php');
 
Class IndexController extends Zend_Controller_Action{
 
 
    public function indexAction(){
 
        $figlet = new Zend_Text_Figlet();
 
        $this->view->hello = $figlet->render('Hello World!');
 
    }
 
    public function aboutAction(){
 
    }
 
}
ErrorController.php
<?php
 
class ErrorController extends Zend_Controller_Action{
    public function errorAction(){
 
        $this->view->errormsg = "Es ist ein Fehler aufgetreten!"; // fehlerbehandlung etc..
    }
}
?>

Im Ornder views/scripts/index/ werden analog zum Controller die Templates angelegt:

index.phtml
<?=$this->render('layout/header.phtml') ?>
 
<h2>Willkommen!</h2>
<pre><?=$this->hello;?></pre>
 
<?=$this->render('layout/footer.phtml') ?>
 

Die About-Seite:

about.phtml
<?=$this->render('layout/header.phtml') ?>
 
<h2>Über..</h2>
Notizzettel für eine einfache Webanwendung mit dem Zend-Framework 1.12.3
 
<?=$this->render('layout/footer.phtml') ?>
 

Für den ErrorController wird im Verzeichnis views/scripts/error/ das Template error.phtml hinzugefügt:

error.phtml
<?=$this->render('layout/header.phtml') ?>
<h2>Fehler!</h2>
<p><?=$this->error;?></p>
 
<?=$this->render('layout/footer.phtml') ?>      

Und zum Schluss die Layouts für den Kopf und Fussbereich der Seite im Verzeichnis views/scripts/layout/:

header.phtml
<!DOCTYPE HTML>
    <head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Zend Front-Controller Test</title>
    </head>
    <body>
	<div id="header">
	    <a href="<?=$this->baseUrl();?>/index.php">Home</a> | <a href="<?=$this->baseUrl();?>/index.php/index/about">About</a>
	</div>
	<div id="content">
footer.phtml
        </div>
    </body>
</html>

FAQ

Wenn kein View benutzt werden soll, kann man den Renderer über den View-Helper global in der init()-Methode (oder auch in der Methode) des Action-Controllers abschalten:

$this->_helper->viewRenderer->setNoRender(true);

Vermutlich ist das Apache-Modul mod_rewrite nicht aktiviert. Abhilfe:

$ a2enmod rewrite
$ service apache2 restart

Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
  • webdev/php/zend/notizen-1x.txt
  • Zuletzt geändert: 2014/01/28 13:07
  • (Externe Bearbeitung)