Häufig gestellte Fragen
Im FAQ-Bereich finden Sie Antworten auf häufig gestellte Fragen. Haben Sie Probleme und Fragen, die in dieser Auflistung fehlen, so wenden Sie sich gerne per E-Mail an uns.
Design
Design und Templates
-
Wie definiere ich Output-Variablen, damit Sie im Template ausgegeben werden?
-
In deiner Action übergibst Du am Ende:
<?php
$this->assign('var', $value );
?>
an das View der Action.
Im View der Action wird der Inhalt von $value mit Smarty an der Stelle raus gerendert, wo {$var} im Template steht. Du kannst sowohl Strings, als auch Arrays und Objekte an das View übergeben.
recent update: 2011-05-27 15:30:02
-
Wofür gibt es Subactions und wie sind diese zu implementieren?
-
Subactions werden implementiert wie actions in Zend:
<?php
<u>foo</u>Subaction() {}
?>
Der Aufruf mit Hilfe einer Standardroute geht so:
http://www.myhome.de///foo.phtml
Aber auch hier zum Erzeugen der URL einfach den Router benutzen.
recent update: 2011-05-27 15:30:45
-
Wie erstelle ich Standardschaltflächen?
-
Mit einfachen Links
<a class="button" href="{createlink module='MyModule' action='MyAction' params='&var=value'}"><span>Standardschaltfläche</span></a>
recent update: 2011-05-27 15:34:27
-
Wie funktioniert das URL rewriting?
-
Das URL rewriting übernimmt die
Zend_Route Komponente.
recent update: 2011-05-27 15:34:45
-
Wie funktioniert das Routing?
-
Das Routing wird 1:1 vom Zend Router übernommen.
Routen werden innerhalb der config.ini des Moduls definiert.
ACHTUNG: Der Name der Route muss eindeutig sein.
recent update: 2011-05-27 15:35:51
-
Wie werden über Methoden Links zu meinen Actions erstellt ?
-
Links werden mit folgendem Aufruf generiert:
<?php
Broker::getRouter()->assembleLink2($module, $action, Array('param' => 'value'), Array('absolute' => true));
?>
Standardmäßig werden links relative zum docroot erzeugt, bei bedarf aber auch absolute inklusive hostname.
recent update: 2011-05-27 15:36:21
-
Was sind Subactions ?
-
Subactions werden implementiert wie Actions in Zend:
<?php
fooSubaction() {}, barSubaction() {}
?>
Der Aufruf mit Hilfe einer Standardroute geht so: /Module/Action/foo.phtml
Aber auch hier sollte man zum erzeugen der URL den Router benutzen
recent update: 2011-05-26 13:41:14
-
Wie erstelle ich Links ?
-
Links werden mit folgendem Auruf generiert:
<?php
Broker::getRouter()->assembleLink2($module, $action,
Array('param' => 'value'),
Array('absolute' => true))
?>
Standardmäßig werden Links relativ zum DocRoot erzeugt, bei Bedarf aber auch absolut inklusive Hostname.
recent update: 2011-05-26 13:42:21
-
Wie nutze die Rechte (admin, member, world, …) ?
-
Actions sind per Rights.xml an acl angebunden. Individuelle Abfragen an das ACL erfolgen Zend-konform. Hinzufügen von Rollen/Rechten/Privilegien kann man per Interface im Modulcontroller (siehe Redspark_RsModule_Abstract_Controller_Interface_Acl)
< href="http://framework.zend.com/manual/en/zend.acl.html">http://framework.zend.com/manual/en/zend.acl.html
recent update: 2011-05-26 14:36:38
Actions
Actions und Subactions
-
Woran erkenne ich, zu welchem Modul ein Model gehört , bzw. welches Modul stellt welche Models bereit?
-
Ersteres geht per Definition nicht, da Models nur bzgl. des Moduls eindeutig sind.
Letzteres kannst du per Module-Broker mit einer foreach Schleife oder einem var_dump abfragen:
$models = Broker::getModuleBroker()->getModels();
var_dump($models);
recent update: 2011-02-16 10:51:23
-
Was für einen zusätzlichen Nutzen bietet RedsparkMember?
-
Member sind Mitglieder, die nicht ins Backend dürfen. Sie bekommen in der Regel einen Mehrwert im Frontend geboten.
recent update: 2011-05-27 15:23:29
-
Wie mache ich eine Verknüpfung mehrerer Models aus verschiedenen Modulen mit Joins?
-
Hier gibt es diverse Ansätze via m:n oder 1:n Tabelle. Im Notfall lieber im Datahandler selbst implementieren.
recent update: 2011-02-16 11:26:10
-
Sollten in mehreren Modulen benutzte Methoden als abstrakte Klasse oder in einem eigenen Modul untergebracht werden?
-
Abhängigkeiten zwischen Modulen sollten so gut wie möglich vermieden werden.
In den meisten Fällen lohnt es sich, applikationsspezifisch eine Vererbungsstufe im abstrakten Modul einzubauen (z.B. MyApp_RsModule_Abstract_Model) .
recent update: 2011-05-27 15:31:40
-
Wofür sind Module gedacht ?
-
Module dienen der weiteren Strukturierung der eigenen Applikation, sollten jedoch in sich gekapselt sein und Abhängigkeiten untereinander vermieden werden. Um diese vollständig zu entkoppelt, lohnt es sich häufig applikationsspezifisch eine abstrakte Vererbungssufe einzubauen, z.B. MyApp_RsModule_Abstract_Model.
recent update: 2011-05-26 13:55:39
-
Wie beerbe ich ein Modul in einer anderen App ?
-
In der eigenen Applikation XYZ kann das Modul M aus der Applikation ABC einfach überschrieben werden.
Die App ABC muss in der App XYZ verlinkt werden. Der Name des zu beerbenden Moduls M sollte in der eigenen App ebenfalls M lauten, damit das Autoloading der jeweiligen Methoden korrekt funktioniert.
Statt der RedSpark-Klassen gibt man in den extend-Statements die full qualified names der Klassen aus dem Modul M der App ABC an.
z.B.:
<?php
class
XYZ_RsModule_M_Model_AnyModel
extends
ABC_RsModule_M_Model_AnyModel
{
// ...
}
?>
recent update: 2011-05-27 15:55:56
-
Das CMS-Modul ist deaktivert, da nur das Backend verwendet werden soll. Wie ist eine automatische Weiterleitung auf die Login-Seite einzurichten?
-
Ohne das CMS-Modul lässt sich solch eine Weiterleitung nur über das Routing konfigurieren. Genauer gesagt ist das in der Datei RedSparkCore/<version>/RedSparkCore/RsApplication/Config/Default/Routes.ini definierte Routing zu überschreiben.
In der Konfiguration für die eigene Applikation (MyApplication/latest/configs/config.ini) ist ganz unten in der Routes-Section einfach Folgendes zu ergänzen:
[Routes]
Default.type = "Redspark_Controller_Router_Route_Regex";
Default.route = "";
Default.reverse = "";
Default.defaults.module = "MyModule";
Default.defaults.controller = "MyModule";
Default.defaults.action= "MyDefaultAction";
recent update: 2011-06-09 11:11:32
Allgemein
Allgemeine Fragen zu RedSpark
-
Wie stelle ich die Startseite ein?
-
Die Startseite ist über eine Route definiert; standardmäßig geht sie in das CMS Modul auf ShowSite.
recent update: 2011-02-16 12:59:03
-
Wie definiere ich Output-Variablen fürs template ?
-
in der jeweiligen Action:
<?php
$this->assign('var',$value);
?>
recent update: 2011-05-26 13:40:40
-
Wo speichere ich Bilder und wie verlinke ich diese ?
-
Bilder werden am besten im Template Ordner der eigenen App gespeichert:
/application/MyApp/latest/templates/myTemplate/img/pic.jpg
Augerufen werden diese über eine Standardroute der eigenen App:
/templates/myTemplate/img/pic.jpg
recent update: 2011-05-26 13:41:51
-
Wie erstelle ich eigene Buttons ?
-
Buttons werden am besten im Template definiert:
<a class="button" href="{createlink module='MyModule' action='MyAction' params='&var=value'}">Standardschaltfläche</a>
recent update: 2011-05-26 13:49:53
-
Wie erstelle ich kurze Formulare aus einem Model ohne XML ?
-
Dazu die Methode _getForm() oder _getZendForm() überschreiben. Hier ist entscheidend, ob es sich um Frontend oder Backend Formulare handelt.
-> http://framework.zend.com/manual/en/zend.form.html
recent update: 2011-05-26 14:38:44
-
Wie richte ich eine Weiterleitung auf einen einhetlichen Hostname ein (Bsp. kuborgh-cms.de -> www.kuborgh.de)
-
In der application config application/MyApp/config/config.ini muss folgender Abschnitt hinzugefügt/konfiguriert werden
[Domains]
main_host = "www.kuborgh.de";
redirect_to_main_host = 1;
Für die lokale Entwicklung sollte in der develop.ini letztere Option auf 0 gestellt sein um eine Weiterleitung auf das live system zu verhindern
recent update: 2011-07-01 15:09:19
-
Was mache ich bei einem Konflikt in den SVN-Externals?
-
Passieren kann dies, wenn sich die Externals in RedSpark Base (also z.B. für /application oder /library Ordner im Fall neuer Versionen der externen Bibliotheken). Das Problem ist dann meist, dass in der lokalen Installation einige eigene Externals eingetragen worden sind, die mit den Änderungen aus dem Repository im Konflikt stehen.
Die Lösung kann dabei sein, in der Kommandozeile bei der Frage nach dem Konflikt mf (mine full) einzugeben und Sofort dannach Strg+C drücken. Dann werden die alten Externals behalten und keine Dateien gelöscht.
Die Neuerungen an den Externals aus dem Repository müssen dann per Hand nachgetragen werden.
recent update: 2011-07-30 21:13:04
Module
Allgemeine Fragen zu Modulen
-
Sollte ein Site von Anfang an auf Mehrsprachigkeit ausgelegt werden, oder ist das auch nachträglich möglich?
-
Wenn du immer Translate benutzt, kannst du ein bestehendes System in Kürze internationalisieren. Dafür ist jedoch die Enterprise-Application Voraussetzung; diese ist noch nicht frei verfügbar.
recent update: 2011-05-27 15:19:48
-
Wie nutze ich Rechte bzw. ACL in der eigenen App ?
-
Actions sind per Modul Rights.xml an acl angebunden. Individuelle Abfragen an das ACL erfolgen Zend-konform. Hinzufügen von Rollen/Rechten/Privilegien kann man per Interface im Modulcontroller
(siehe Redspark_RsModule_Abstract_Controller_Interface_Acl)
RedSpark-Dokumentation
Zend-Dokumentation
recent update: 2011-02-16 11:10:07
-
Macht es Sinn, Zend_Form statt RsForm zu nutzen?
-
Im Frontend 'ja', im Backend 'nein'.
recent update: 2011-05-27 15:24:08
-
Wie sende ich eigene SQL-Abfragen?
-
Mit folgendem Methodenaufruf:
<?php
Redspark_RsDatabase::getDb()->query();
?>
Siehe Dokumentation von Zend_Db.
recent update: 2011-05-27 15:27:25
-
Wo werden eigene Dateien bzw. Uploads gespeichert?
-
Bestandsdaten werden immer im data Ordner der Applikation gespeichert.
Den Pfad dazu bekommt man per
<?php
Path::getDir(Redspark_RsPath::DIR_DATA_CUSTOM,Array(
'custom_path' => 'myfolder'
));
?>
recent update: 2011-05-27 15:31:06
-
Sind Unit-Tests von Anfang an sinnvoll?
-
Manche sagen ja, manche nein.
s. Testgetriebene Entwicklung mit Unit-Tests @wikipedia
recent update: 2011-05-27 15:32:25
-
Sollte ich für alle Aufrufe Exceptions nutzen?
-
Exceptions machen immer dort Sinn, wo eine Methode nicht das zurückliefern kann was sie soll.
Exceptions aufzufangen und sinnvolle Aktionen durchzuführen, ist die größere Arbeit.
recent update: 2011-05-27 15:33:17
-
Sollte Dokumentation zu eigenen Methoden für die phpDoc geschrieben werden?
-
Ja, am besten hier die Zend Coding guidelines beachten, RedSpark unterscheidet sich nicht sehr stark.
recent update: 2011-05-27 15:33:37
-
Wo speichere ich Dateien ?
-
Im /data/ Verzeichnis der eigenen App sind Dateien hervorragend aufgehoben.
Den Pfad dazu bekommt man wie folgt:
<?php
Path::getDir(Redspark_RsPath::DIR_DATA_CUSTOM,
Array('custom_path' => 'myfolder'));
?>
recent update: 2011-05-27 15:38:59
-
Wie erstelle ich eigene Routen ?
-
Das Routing wird 1:1 von Zend übernommen. Diese werden in der config.ini der Module definiert, die Namen der Routen müssen eindeutig sein.
→ http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.regex
recent update: 2011-05-27 15:40:51
-
Was bedeutet Versionierung ?
-
Durch die Versionierung einer App können unterschiedliche Versionen, z.B. zum Testen, unabhängig voneinander gestartet werden. Ausgenommen von dieser Versionierung ist das MyApp/data/ Verzeichnis, sowie die Datenbank. Erstellt man von dieser jedoch einen Snapshot und gibt dieser in der neuen Version einen anderen Namen (ohne die Datenbank selbst anzulegen), so wird diese beim ersten Aufruf anhand der XML erstellt und mit den Daten aus dem letzten Snapshot befüllt.
In der Datei /config/bootstrap.ini kann man z.B. unter [Domains] folgendes angeben:
www.myapp.de = "MyApp/1.0.0";
test.myapp.de = "MyApp/1.1.0";
dev.myapp.de = "MyApp/latest";
recent update: 2011-05-26 13:51:20
-
Gibt es einen Bug-Tracker ?
-
Redmine: -> http://issues.redsparkframework.de
recent update: 2011-05-26 14:41:13
-
Änderungen erscheinen nicht. Was kann ich tun ?
-
Da standardmäßig alle Seiten aus dem Cache geladen werden, ist es hilfreich, diesen zu löschen, bzw. an die jeweilige URL folgende Parameter anzuhängen:
<projekt-url>?cache=0&purgeCache=all
Der URL-Get-Parameter cache=0 veranlasst das RedSpakFramework, den Cache zu umgehen. Die Anzeige der Seite wird also neu errechnet, Caches werden dabei jedoch nicht verwendet.
Der Parameter purgeCache=all sorgt für das Leeren des Caches.
recent update: 2011-05-27 15:46:51
-
Wie rufe ich eine App auf, ohne die bootstrap.ini zu ändern ?
-
Eine Applikation kann mit folgendem Link direkt in jeder beliebigen Version geladen werden. Der Name der App und die Version müssen in runden Klammern angegeben werden.
http://localhost/(Appname)/(version)
version kann z.B. 'latest', '1.2.5' oder dergleichen sein.
recent update: 2011-05-27 15:48:22
Model
Fragen zum Model, Datenbank, Datenspeicherung
-
Gibt es Unterstützung für weitere Datahandler außer Datenbanken? (XML, CSV, WebService)
-
Hier sind einige angedacht, und wenige implementiert. Feel free! :-)
recent update: 2011-05-27 15:18:25
-
Wie erstelle ich kurze Formulare, für die es ein Model samt Datahandler gibt, jedoch kein Model-XML?
-
Dazu die Methode _getForm() oder _getZendForm() überschreiben. Hier ist entscheidend, ob es sich um Frontend oder Backend Formulare handelt.
Zur Zend-Dokumentation
recent update: 2011-05-27 15:25:04
-
Wie sende ich eigene SQL-Abfragen ?
-
<?php
Redspark_RsDatabase::getDb()->query()
?>
oder via Zend_Db.
-> http://framework.zend.com/manual/en/zend.db.html
recent update: 2011-05-26 14:00:17
-
Wie bekomme ich alle Models in einem Modul ?
-
per Module-Broker und foreach Schleife:
<?php
Broker::getModuleBroker()->getModels()
?>
recent update: 2011-05-26 14:04:46