php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 23.11.2010, 18:20  
Benutzer
 
Benutzerbild von Raiden
 
Registriert seit: 13.06.2009
Beiträge: 58
PHP-Kenntnisse:
Anfänger
Raiden befindet sich auf einem aufstrebenden Ast
Raiden eine Nachricht über ICQ schicken
Standard [Erledigt] Website-Initialisierung nach MVC-Prinzip [OOP]

Es geht um Folgendes:

Ich programmier zwar schon ein paar Jahre mit PHP, aber erst seit Kurzem objektorientiert.

Bei der Frage, welche Klassen sinnvoll zu Erstellen wären, kam mir die Frage, was eigentlich mit - oder eher in - der index.php (also der 1. aufgerufenen Datei) passiert.

In den index.php-Dateien diverser CMS sieht man hauptsächlich nur noch Aufrufe wie ...

PHP-Code:
/**
 * Instantiate controller
 */
$objIndex = new Index();
$objIndex->run(); 
Kein DOCTYPE und kein HTML-Gerüst mehr.
Wohin ist das alles verschwunden?

Ist es einfach "unsauberer" oder "uneleganter" Stil, wenn man in der index.php noch das HTML-Gerüst aufführt?
Oder macht es Sinn, das in diverse Klassen auszulagern??

Ich durchblicke das nicht wirklich und auch das Durchforsten von diversen CMS-Strukturen hat mich eher weiter verwirrt als Klarheit zu schaffen

Wäre echt super, wenn mir da jemand auf die Sprünge helfen könnte.
__________________
Es gibt Tage da verliert man und es gibt Tage da gewinnen die anderen ...

Geändert von Raiden (24.11.2010 um 15:12 Uhr).
Raiden ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.11.2010, 18:31  
Erfahrener Benutzer
 
Registriert seit: 23.09.2010
Beiträge: 146
PHP-Kenntnisse:
Fortgeschritten
jabubo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Der HTML-Code ist bei einem CMS in der Regel in Templates ausgelagert. Diese Templates werden entweder durch eine Template-Engine (Smarty, PHPTal, ...) gefüllt oder durch str_replace().

Da die index.php flexibel reagieren muss, sollte der HTML-Quellcode auch definitiv an einer anderen Stelle liegen. So kann ein und die selber index.php Fehlermeldungen ausgeben, Header-Befehle setzen, sowie HTML oder auch andere Formate (XML, JSON, ...) zurück geben.
__________________
PHP online testen, zum Beispiel: md5, base64_decode, preg_match, urldecode und viele weitere...
jabubo ist offline   Mit Zitat antworten
Alt 23.11.2010, 18:37  
Erfahrener Benutzer
 
Benutzerbild von bitsnack
 
Registriert seit: 01.08.2010
Beiträge: 352
PHP-Kenntnisse:
Fortgeschritten
bitsnack befindet sich auf einem aufstrebenden Ast
bitsnack eine Nachricht über ICQ schicken bitsnack eine Nachricht über MSN schicken bitsnack eine Nachricht über Skype™ schicken
Standard

Informier dich mal zu Begriffen wie MVC (Model View Controller) oder EVA.
bitsnack ist offline   Mit Zitat antworten
Alt 23.11.2010, 22:06  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Oder macht es Sinn, das in diverse Klassen auszulagern??
Ja. In mehrfacher Hinsicht

1. EVA und „headers sent“
2. Verschiedene Formate, um einen Inhalt auszuliefern (Druckansicht, Ansicht für Mobildgeräte, normale Website)
3. Ausliefern verschiedener Formate (i.S. von mime-types)
4. Ansprechen der Index im JSON-Kontext (alternativer Controller o.ä.)
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 23.11.2010, 22:43  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,
naja die index.php wurde auf den kleinsten gemeinsamen Nenner verkürzt, der ist bei den verschiedenen Formaten (HTML, JSON, AJAX, ..) eigentlich darauf beschränkt eine Anfrage (Request) anzunehmen, zu verteilen (Dispatch) und die Ausgabe (Response) zurückzuliefern.

EVA und MVC sind sicherlich gute Lektüren.
__________________
"Nuschel ich?" - "Was?"

Geändert von Chriz (23.11.2010 um 23:36 Uhr).
Chriz ist offline   Mit Zitat antworten
Alt 23.11.2010, 23:05  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

eine Anfrage (Request)
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 23.11.2010, 23:36  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.268
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Was meinst du? Die Begrifflichkeiten waeren also klargestellt
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 24.11.2010, 01:56  
Benutzer
 
Benutzerbild von Raiden
 
Registriert seit: 13.06.2009
Beiträge: 58
PHP-Kenntnisse:
Anfänger
Raiden befindet sich auf einem aufstrebenden Ast
Raiden eine Nachricht über ICQ schicken
Standard

OK, danke euch allen!

Ich hab die Aufteilung in MVC in Java einige wenige Male praktiziert, aber das ist auch schon wieder Jahre her.
Und was man nicht oft genug macht, landet nicht auf der ewigen Festplatte
Allerdings hatte ich bei PHP - also auf eine Website bezogen - ein totales Brett vor dem Kopf und nicht weit genug gedacht.

Die letzten Stunden hab ich mir mal etwas Lektüre zu MVC zu Gemüte geführt.
Es gibt verschiedene Modelle zu MVC.
Aber auf das Web bezogen ist es doch so, dass View und Controller mit dem Model kommunizieren.
Das Model ist für die interne Datenverarbeitung und -speicherung zuständig, während die View "nur" die im Model vorhandenen Daten anzeigt und der Controller die Abläufe steuert.
Aber View und Controller liegen irgendwie gemeinsam auf einer Ebene und der Controller dient _nicht_ als Mittelsmann zwischen View und Model.

Jetzt kam beim Lesen noch der Begriff "Presentation Logic" auf.
Ist es nicht so, dass man nicht unbedingt genau sagen kann, was jetzt zu welcher Ebene (also zu Controller oder View) gehört?
Eine ganz strikte Trennung ist auch gar nicht unbedingt möglich, oder??
Bei Templates z.B. hat man doch auch eine Vermischung von reiner Darstellung und Presentations-Logik.
__________________
Es gibt Tage da verliert man und es gibt Tage da gewinnen die anderen ...

Geändert von Raiden (24.11.2010 um 02:02 Uhr).
Raiden ist offline   Mit Zitat antworten
Alt 24.11.2010, 02:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

PHP ist da etwas special. 1. Weil im Webbereich sowieso schon eine Abstraktion der View herrscht (PHP gibts ja die Daten aus - auf ähnliche Weise wir immer gegen Templating in PHP-Applikationen gewettert), 2. weil im Request-Modell keine Persistenten Componenten vorherrschen, wie man sich normalerweise Controller etc. vorstellen würden.
Z.B. ist auch relevant, ob Du die Rollen von HTML und v.a. Javascript mit in der Diskussion betrachten willst.

Wir haben das schon öfter diskutiert an. Schau Dir mal http://www.php.de/album.php?albumid=5&pictureid=75 an, da habe ich vor ner Weile mal versucht, die Begrifflichkeiten im Kontext etwas zu ordnen. So wie ich sie sehe, ohne Garantie auf Richtigkeit, jeder hat eben eine andere Vorstellung von dieser Systematik.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 24.11.2010, 09:33  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Zitat:
Zitat von Raiden
Aber auf das Web bezogen ist es doch so, dass View und Controller mit dem Model kommunizieren.
In einer Anwendung mit Laufzeit-Interaktionen (z. B. GUI-Desktopanwendung) ist es üblicherweise so, dass eine oder mehrere Views ein Model observieren und sich bei Änderungen im Model selbsttätig aktualisieren.

In PHP fällt die Interaktion weg. Der View müssen lediglich einmal die darzustellenden Daten zugewiesen werden. Das kann der Controller erledigen. Es besteht keine Notwendigkeit, dass die View die Models kennt.

Zitat:
Bei Templates z.B. hat man doch auch eine Vermischung von reiner Darstellung und Presentations-Logik.
Worin besteht denn der Unterschied zwischen reiner Darstellung und Presentation Logic?

Ich habe mal ein sehr verkürztes Klassen-Mockup zu (einer Interpretation von) MVC in PHP erstellt. Interessant sind die Klassen MyModel und IndexController sowie das View-Script und das Layout-Script. Der Rest ist applikationsübergreifender Framework-Code.

index.php

Code:
<?php

namespace org\example\SimpleMVC;

/**
 * Framework code
 */
class Layout
{
    protected $view = null;

    public function setView(View $view)
    {
        $this->view = $view;
    }

    public function renderContent()
    {
        if ($this->view !== null) {
            $this->view->render($template);
        }
    }

    public function render($layoutScript)
    {
        include $layoutScript;
    }
}

/**
 * Framework code
 */
class View
{
    protected $vars;
    protected $script;

    public function __construct()
    {
        $this->vars = array();
    }

    public function __set($name, $value)
    {
        $this->vars[$name] = $value;
    }

    public function __get($name)
    {
        return (isset($this->vars[$name])) ? $this->vars[$name] : null;
    }

    public function setScript($script)
    {
        $this->script = $script;
    }

    public function render()
    {
        include $this->script;
    }
}

/**
 * Custom application code
 */
class MyModel
{
    public function getArticles()
    {
        /* Dummy */
        return array(
            array('title'   => 'Hello World!',
                  'content' => 'Lorem ipsum...'),
            array('title'   => 'Foo Bar',
                  'content' => 'Lorem ipsum...')
        );
    }
}

/**
 * Framework code
 */
abstract class Controller
{
    protected $view = null;

    public function __construct()
    {
        $this->view = new View();
    }

    public function getView()
    {
        return $this->view;
    }
}

/**
 * Custom application code
 */
class IndexController extends Controller
{
    public function indexAction()
    {
        $model = new MyModel();

        $this->view->articles = $model->getArticles();        
    }
}



/* Front Controller stuff */

/* Extract these values from URL, e. g. http://example.org/index/index */

$controller = 'index';
$action     = 'index';

/* Instantiate corresponding controller, call corresponding action method */

$controllerClass = __NAMESPACE__ . '\\' . \ucfirst($controller) . 'Controller';
$actionMethod    = $action . 'Action';

$controllerInstance = new $controllerClass();

$controllerInstance->$actionMethod();

/*
 * Render view from active controller. Default view script resides at
 * ./templates/<controller>/<action>.phtml
 */

$view = $controllerInstance->getView();

$view->setScript('./templates/' . $controller . '/' . $action . '.phtml');

$layout = new Layout();
$layout->setView($view);
$layout->render('./layouts/default.phtml');
templates/index/index.phtml

PHP-Code:
<div class="articles">

    <?php foreach ($this->articles as $article): ?>

    <div class="article">
        <h1><?php echo $article['title']; ?></h1>
        <div class="content">
            <?php echo $article['content']; ?>
        </div>
    </div>

    <?php endforeach; ?>
    
</div>
layouts/default.phtml

PHP-Code:
<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>A simple demo</title>
        <style type="text/css">
            body { margin: 5em; font-family: Arial, sans-serif; }
            .articles .article { margin-bottom: 3em; padding: 1em;
                      border: 1px solid #ccc; }
        </style>
    </head>

    <body>
        <?php $this->renderContent(); ?>
        <hr />
        <p>Thanks for visiting!</p>
    </body>

</html>
Edit: Bei solchen Themen ist immer der Blick in ein oder mehrere PHP-Frameworks anzuraten.
__________________
Blog | Buch | Kaloa

Geändert von mermshaus (24.11.2010 um 09:50 Uhr).
mermshaus ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Premature end of script headers: index.php im Zusammenhang mit Performanceverlust Asipak Server, Hosting und Workstations 10 29.10.2010 14:13
[Erledigt] fopen nicht in index.php ausführen TZP PHP Tipps 2010 9 18.08.2010 16:38
Ein (Teil)Array anhand von level und depth zurückgeben. greatcthulhu Scriptbörse 4 16.04.2010 10:45
Mod Rewite Problem - Variable 1 immer index.php K.haos Server, Hosting und Workstations 2 10.04.2010 18:58
Probleme mit der Startseite (Index.php) DSAS87 PHP Tipps 2009 7 02.01.2010 15:11
PHP index.php Fehlermeldung bayliner80 PHP Tipps 2008 4 14.12.2008 00:58
index.php wird nicht angezeigt tomharvey PHP Tipps 2008 2 26.09.2008 09:00
apache ruft index.php nicht als default auf Zero.exe Server, Hosting und Workstations 3 05.07.2006 23:06
index.html statt index.php als startseite.... niffi PHP-Fortgeschrittene 28 23.01.2006 19:23
Abfrage aus Datenbank mit Tabellen und Ausgabe in index.php PHP Tipps 2005-2 4 23.10.2005 11:04
probleme mit index.php Cyrus PHP Tipps 2005-2 4 06.07.2005 14:53
seiten in index.php aufrufen PHP Tipps 2005-2 4 22.06.2005 15:06
index.php wird nicht aufgerufen PHP Tipps 2005 4 22.01.2005 04:23
index.php mit Unterseiten PHP Tipps 2005 2 08.01.2005 21:37

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
oop mvc class php, php oop mvc, php mvc dispatch, php oop dispatcher, website oop, http://www.php.de/php-fortgeschrittene/74301-erledigt-website-initialisierung-nach-mvc-prinzip-oop.html, smarty mvc controller, mvc php webseiten erstellen, php oop website erstellen, webseiten objektorientiert php, php cms nach mvc-prinzip, php website aufbauen mvc oop ohne framework, oop cms, mvc php oop, oop php webseite aufbauen, oop php initialisierung übergeben, webseiten in oop, php mvc class phtml php, website nach mvc, oop php nach mvc prinzip

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum