Benutzer-Werkzeuge

Webseiten-Werkzeuge


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.

Was passiert hier?

  • 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

Struktur

.
|-- 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

Aufruf im Browser: Index.php

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();
 
 
 
?>

Controller

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..
    }
}
?>

Views

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

Wie schalte ich den View-Renderer ab?

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);

Apache: Public Folder ist nicht sichtbar

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)

hello, world