• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP -> Frameworks und anderes

Seyonne

Mitglied
Hi,

Ich bin mir grade nicht sicher ob ich im PHP Forum richtig, wenn nicht verschiebt mich bitte :D

Ich bin seit ein einiger Zeit daran eine Bürosoftware zu erstellen (PHP, MySQL).
Nach nem kleinen Brainstorming wird das Projekt nun deutlich aufwändiger als zuerst geplant.

Das Projekt soll in Richtung 'WISO - Mein Büro' gehn.

Jetzt lese ich überall von Dingen wie Frameworks: Zend, CakePHP, Doctrine, ASP.NET oder AJAX, API, und wie sie alle heissen mögen.

Ich kann ja nicht alles Installieren und testen, da bin ich ja Monate beschäftigt.

Nach diversen Stunden googlen und diversen Links folgend habe ich aber immernoch keine Ahnung was mir ein Framework denn eigentlich bringt!?

Ich kann mir ehrlich gesagt nichts unter 'nem Grundgerüst vorstellen. Gibts da etwas das für Bürosoftware prädestiniert ist?

Kennt ihr Tutorials zu nem eventuell sinnvollen Framework?
Muss man da mehr kennen/können als PHP?

Kann man irgendwie ohne JS/Ajax eine Seite dynamisch ändern? Es gibt doch immernoch sehr viele User die JS ausgeschaltet haben.
Wenn X in Form1 ausgewählt lade was auch immer..

Danke im voraus,
 
Zuletzt bearbeitet:
Werbung:
Kann man irgendwie ohne JS/Ajax eine Seite dynamisch ändern
Nein, dazu muss der Benutzer einen Knopf drücken und eine neue Seite anfordern oder der Refresh durch den Browser angestoßen werden. Dann muss die angeforderte Seite neu/dynamisch auf dem Server erstellt werden, zum Browser transportiert und dort angezeigt werden. Für eine moderne Anwendung nicht tragbar. Wer deiner Seite vertraut, wird dort auch Javascript zulassen. Mir scheint, man geht da sehr blauäugig an etwas heran nach dem Motto 'da schreiben wir in einer Woche mal was ganz tolles und haben bisher von allem wenig Ahnung'.
 
Ein Framework ist ein Teil eines Programms, das grundsätzliche Teile des Programms defniert. Mit anderen Worten: Man muss das Rad nicht jedes Mal neu erfinden.

In PHP gibt es verschiedene Frameworks: Zend Framework, CakePHP, Symfony usw.
Deren Funktionsweise muss man lernen, das ist nicht wirklich intuitiv. Befasse dich also mit einem um es zu verstehen.

Ein JavaScript Framework wie jQuery ermöglicht es dir, nicht jedes Mal, wenn du einen Eventhandler benutzen willst, Browserweichen schreiben zu müssen wie element.addEventListener + element.attachEvent usw. Es kann auch Ajax-Requests kinderleicht ausführen. Es gibt tausende Beispiele.


Was eine Bürosoftware ist, weiß ich nicht.
Im Falle, dass es ein Office-ähnliches Programm ist: Ich würde sie jedenfalls nicht in PHP schreiben (bzw. HTML, JS und CSS). Man kann nicht ohne installiertem Office oder Open Office drucken und dabei muss das PHP Script auf dem lokalem PC des Benutzers ausgeführt werden, denn im Datenzentrum des Servers zu drucken, ist nicht sonderlich nützlich. Außerdem ist Office wahrscheinlich die beste Office-Reihe, die es gibt, gefolgt von Open Office, das trotz Java ein sehr gutes Produkt ist.
 
Werbung:
Anfänglicher Gedanke war meine PHP kenntnisse um SQL zu erweitern.
Ergebnis ist das ein Freund seine Kunden/AngeboteAufträge inkl. PDF-Druck und Versand bereits verwaltet (was eigentlich nur zur Fehlerentdeckung beitragen sollte).

Jetzt hab ich mir überlegt das JS (von dem ich wirklich (noch) keine Ahnung habe ja sejr hilfreich wäre um das 'Tool' dynamischer zu gestalten da das andauernde absenden von Formularen schon nervig sein kann.
Je schlimmer desto umfangreicher.

Nach der Ein-User Variante habe ich das 'Tool' auf Multi-User erweitert was mich zur Problematik bringt ob ich sämtliche Daten in einer Datenbank oder pro User eine Datenbank benötige.. Durch die Tests meines Freundes weiss ich das er innerhalb einer woche über 4k Datensätze in einer Woche in Tabelle X produziert hat.

Soweit läuft natürlich alles schnell und sauber aber in einer Multi-User Variante mit Kunden die das 'Tool' wirklich effektiv nutzen würden wären innerhalb einer Woche schon etliche Tausend Datensätze angefallen.
Jetzt leidet 'eine' Datenbank in seiner Performance nicht nur unter zig Selects etc sondern doch auch der Server, oder?

Nun will ich mein Tool voran bringen und dennoch nicht in der Struktur völliges Chaos einarbeiten.
Was ich jetzt gelernt hab is das Frameworks (MVC) zumindest in dem Punkt hilfreich sein könnten.

Allerdings bin ich da in der kurzen Zeit nicht wirklich eingestiegen. (Lese grade Zend Tutorial)..
Zumal es ja überall unterschiede gibt.

Prototype vereinfacht wohl JS, so zumindest mein Eindruck.
Kann man zB Zend Framework UND Prototype gleichzeitig verwenden?

Gibts da etwas das für Bürosoftware prädestiniert ist?

Ein bisweilen Ahnungsloser ;D
 
Zuletzt bearbeitet:
@Asterixus:

Also sind Frameworks eine Ansammlung von Funktionen die PHP um eben diese Funktionen erweitern?

Dann müssen sich die Frameworks j airgendwie unterscheiden bzw müsste es ja ähnlich PHP.net eine Liste der Funktionen geben. Vielleicht ist Google einfach nicht mein Freund..

Mit Bürosoftware meine ich eine Verwaltungssoftware vom Mitarbeiter über Kundenmanagement bis hin zur Steuererklärung.
 
Frameworks sind nicht für etwas prädestiniert. Frameworks sind so allgemein und so komplett wie möglich. MVC kann man in fast jedem Projekt brauchen.
Frameworks sind auf der einen Seite Ansammlung von Funktionen, aber auf der anderen, wichtigeren Seite, eine Ansammlung von Coding-Art-und-Weisen ((H)MVC, OOP usw.), die die Frameworkentwickler für gut halten (und deren Benutzer somit normalerweise auch).
Soweit ich weiß, hat das Zend Framework eine "Liste" an Funktionalitäten auf seiner Website; war zumindest vor kurzer Zeit noch so.
Prototype ist ein JavaScript Framework und Zend Framwork ist ein PHP Framework. Zend FW verlangt kein spezifisches JS-Framwork. jQuery ist das JS-Framework, das am meisten benutzt wird.
 
Werbung:
ZF hat eine Unterstüzung für Dojo, womit sich Rich Internet Applikationen einfach entwickeln lassen. Außerdem geeignet für Oberflächen (bei weitem mehr als JQuery) sind ExtJS und YUI. Das Prototype-Projekt ist tot.

Frameworks nehmen einem Arbeit ab, indem sie bestimmte Aufgaben wrappen. Beispiel bietet ZF mit Zend_Translate eine Klassensammlung um eine Multi-Language-Anwendungen zu entwickeln, dabei „wrappt” es verschiedene Adapter, so dass die Daten aus XML- (die verschiedenen Industriestandards), INI-, CSV-, Gettxt- und PHP-Dateien kommen können. Das spart einem schon einmal die Entwicklung von einem solchen Adapter, wenn man z.B. für ein anderes Projekt mit Xliff arbeiten möchte, da einem eine Übersetzungsagentur dieses Format zu Verfügung stellen kann.

Kein Framework einzusetzen ist also Schwachsinn. Besonders in PHP.

Die in ZF vorgeschlagene Struktur muss man dabei allerdings keinesfalls wählen. Man kann auch einfach nur bestimmte Komponenten verwenden, oder diese den Bedürfnissen anpassen.

MVC ist im übrigen keine Design-Pattern, sondern eine Organisationsstruktur. Die HMVC-Diskussion rund um ZF verstehe ich hingegen nicht. ZF kann auch HMVC liefern, wenn man das so möchte.

Eine List der einzelnen Komponenten gibt's natürlich im Manual: Zend Framework: Documentation: Zend Framework Manual
 
Sooo.... weit so schlecht.

Hab hier ein Tut gefunden das den Einstieg ins Zend FW ziemlich zu erleichtern scheint.
Hört jetzt leider plötzlich.. --> Zend Framework Hilfe » Blog Archiv » Zend Framework Tutorial Teil 8:Formularverarbeitung mit Zend_Form#

Vielleicht kennt das ja wer, ich habe jedenfalls ein Paar Fragen und finde keine Antworten.

PHP:
public function showAction()
    {
  $this->view->title = 'Dinelco - Artikelliste';  //Das funktioniert auch nicht..
  $id = (int)$this->getRequest()->getParam('id');
  $articles = new Model_ArticleModel();
  $this->view->article = $articles->fetchRow('art_id='.$i);
    }
PHP:
<?php
foreach ($this->article as $a)
{
    echo '<h2>'. $this->escape($a->art_title) .'</h2>';
    echo '<p><em>'. $this->escape($a->art_cdate) .'</em></p>';
    echo '<p>'. $this->escape($a->art_text) .'</p>';
}
echo '<hr>';
echo '<h2><a href="'. $this->url(array('controller'=>'article',
                                       'action'=>'index')) .'">'
                    .'zur&uuml;ck zur Artikelliste</a></h2>';
?>

Formular und Auflistung klappt wunderbar. Allerdings bekomme ich beim senden des Formulares als auch bei --> article/show/id/7
die Fehler:
An error occurred

Application error

Ein Wunder wie wenig man zu dem Thema findet..
Kann man nicht irgendwie Fehler anzeigen lassen?

Gefunden -->
Das könnte daran liegen das die application.ini geändert wurde. resources.frontController.params.displayExceptions steht dann sicherlich auf o anstatt auf 1.
in der production Umgebung ist dies auch richtig, nur unter development sollte dieser Wert überschreiben werden.
 
Zuletzt bearbeitet:
Das kein Fehler angezeigt wird liegt eindeutig daran, dass keine Exceptions geworfen werden und dein APPLICATION_ENV nicht auf „development” steht.

Siehe SetEnv APPLICATION_ENV development im Quickstart.

PHP:
$this->view->title = 'Dinelco - Artikelliste';
Hierfür gibt den headTitle()-View-Helper. Einfach mal ansehen.

PHP:
$this->view->article = $articles->fetchRow('art_id='.$i);
$i steht hier wohl für $id. Diese Query ist gar nicht gegen SQL Injections geschützt. Nutze lieber find(). Überhaupt solltest du dir den Models-, Mappers- und DbTable-Aufbau im Quickstart ansehen. Direkt mit Zend_Db_Table_Abstract-Instanzen zu arbeiten führt schnell zu unübersichtlichen Code.

Außerdem solltest du dein HTML möglichst nicht mit echo ausgeben, das hat einige Nachteile (Validierung und Vervollständigung im Editor und mehr Schreibarbeit etc.).

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

    <h2><?php print $this->escape($article->getTitle()); ?></h2>
    <p><em><?php print $this->escape($article->getCDate()); ?></em></p>
    <p><?php print $this->escape($article->getText()); ?></p>
<?php endforeach; ?>
<hr>
<h2>
    <a href="<?php print $this->url(array('controller'=>'article',
                                       'action'=>'index')) ?>">
        zur&uuml;ck zur Artikelliste
    </a>
</h2>
 
Werbung:
Ich suche jetzt schon relativ lange, habe aber noch keine Lösung gefunden.Ich will lediglich in layout.phtml 'nen Text ausgeben den ich im Controller definiere.Ich hab mir nen view Helper erstellt und bekomme den Text angezeigt den ich in diesem Helper definiere.Wie kann ich jetzt diesem Helper im Controller einen Parameter (String) hinzufügen?Der Controller kann nur die ihm unterstellten Views manipulieren und nicht die übergeortnete layout.phtml in der der Rest per
PHP:
echo $this->layout()->content;
included wird.In dem oben gelinkten Tutorial tun sie das jedoch..
 
Zuletzt bearbeitet:
PHP:
$this->view->helperName('test')
und im Layout oder View:
PHP:
print $this->helperName();
Kommt drauf an, ob dein Viewhelper so entwickelt wurde, dass er Strings frisst und diese später ausgeben kann.
 
Ich steh total auf dem Schlauch, finde aber kein wirklich ausführliches Beispiel da ich bislang immer alles ausprogrammiert hab.

Einen viewHelper muss man ja initialisieren.
Entsprechend einem Tut liegt jetzt unter /application/Helper/View die Datei Titel.php
mit dem entsprechenden Helper:

PHP:
class Helper_View_Titel extends Zend_View_Helper_Abstract
{
 public function titel($titel)
 {
  return "TEST - " . $titel;
 }
}

Jetzt will ich $titel im Controller einen String zuweisen:
PHP:
$this->view->titel('Artikelliste');

und im Optimalfall im Layout ausgeben. Wäre ja sogar froh den Titel im view des Controllers ausgeben zu können. zB index.phtml
PHP:
print $this->titel();
---> Missing argument..

Wenn ich im view den Parametar angebe habe ich zwar meine ausgabe, allerdings absolut und könnte doch direkt im HTML teil die Ausgabe machen.

Mit der dynamischen Ausgabe will ich später die Navigation erstellen.
 
Werbung:
Das kann auch so nicht funktionieren.
Du musst deine Helper-Funktion auch so schreiben, dass sie setzen und gleichzeitig ausgeben kann.
Als Beispiel

PHP:
 public function title($title=false) {
  if($title != false) {
    $this->title = $title;
  } else {
    return $this->title;
 }
}

natürlich musst du dann in deiner Klasse noch das Attribut title definieren :)
ich muss jedoch sagen, dass ich das Framework nicht kenne und somit nicht weiss wie Zend_View_Helper_Abstract aussieht
 
Wenn ich die function im Controller definieren will zB mit $title = 'test' bekomm ich nurn error:
Exception information:

Message: Method "titel" does not exist and was not trapped in __call()

Ist die Überlegung im Controller dem Helper einen String zu übergeben und im Layout auszugeben so abwägig? Dem Helper im View einen Wert zu übergeben is ja np, nur kapier ich net wieso das in dem Tutorial geht.
 
Werbung:
Zurück
Oben