PHP Sammelthread: Zend Framework und alles was dazugehört

da bin ich überfragt.
Da es aber im Netz auch viele Beispiele gibt, die das genauso gelöst haben, wie ich es in #716 gepostet habe, würde ich es nicht ausschließen, bzw. könnte es durchaus möglich sein.
Kannst ja mal in der Mailingliste des ZF fragen.
 
Kannst ja mal in der Mailingliste des ZF fragen.
Werde ich mal machen, danke.

Habe auch schon eine neue Frage :ugly:

Ich habe in einem Formulare eine Auswahl an Radio Buttons. Einer davon ist Sonstiges und ich möchte neben diesem ein Textfeld einblenden. Muss ich da ein ViewScript verwenden, oder gibt es da schönere/bessere Möglichkeiten?
 
ehrlich gesagt habe ich da keine Ahnung, ich vermute mal du müsstest ein komplettes neues Form-Element programmieren.
In letzter Zeit hat mir die autom. HTML-Ausgabe von Zend_Form in speziellen Situationen wirklich nicht zugesagt, viel zu kompliziert speziellere Dinge umzusetzen, ich denke mal ich werde meine Formulare in Zukunft selbst rendern und nur noch die geniale Validierung von Zend_Form nutzen.
 
In letzter Zeit hat mir die autom. HTML-Ausgabe von Zend_Form in speziellen Situationen wirklich nicht zugesagt, viel zu kompliziert speziellere Dinge umzusetzen, ich denke mal ich werde meine Formulare in Zukunft selbst rendern und nur noch die geniale Validierung von Zend_Form nutzen.
Mir geht es ähnlich. Ich hatte es jetzt auch mal so, dass ich das HTML selber geschrieben habe und nur die Validierung von Zend_Form genutzt habe. Es war aber tierisch nervig, sowohl im Zend_Form als auch im HTML immer die Änderungen durchzuführen, so dass ich das jetzt wieder so lösen möchte.
 
begrüße!

ich häng mal wieder nen bisschen mit zend_acl.. ich habe zig verschiedene rollen, die in ner hierarchie angeordnet sind.. rollen und resourcen stehen wunderhübsch in einem acl objekt.. soweit bin ich auch recht zufrieden damit ;)

das problem kommt jetzt dadurch, dass die benutzer mehrere verschiedene rollen haben können.. mein erster gedanke war hierbei, für jeden benutzer eine eigene rolle anzulegen, die dann eben von den rollen erbt, die dem benutzer zugeordnet sind..

hier gefällt mir aber das verhalten von Zend_Acl überhaupt nicht :-? ich brauche es so, dass ein "allow" ein "deny" in jedem fall dominiert.. also wenn eine der rollen des benutzers ihm erlaubt xy zu tun, dann darf der benutzer das.. egal, ob es in einer anderen seiner rollen verboten ist oder nicht.. bei zend_acl geht es da nach der reihenfolge, in der die rollen, von denen geerbt wird angegeben werden (ausführlicher hier unter example #1: https://framework.zend.com/manual/1.0/en/zend.acl.introduction.html .. bevor ich mir die finger wundtippe und am ende doch nur wieder alle verwirre :D )

mein erster gedanke war es, die isAllowed methode anzupassen.. habe ich auch gemacht.. wenn eine rolle (bzw ein benutzer) von mehreren rollen erbt wird jede einzelne rolle, von der geerbt wird überprüft.. wenn eine der rollen das recht hat => true.. ansonsten false.. wenn nur von einer oder von keiner rolle geerbt wird wird die standardmäßige isAllowed methode benutzt.. hier der code:

PHP:
    public function isAllowed($role, $resource, $privilege)
    {
        $parents = $this->_getRoleRegistry()->getParents($role);
        if(count($parents) > 1)
        {
            //iteration über alle parents
            foreach($parents AS $parent)
            {
            	//wenn es einem der parents erlaubt ist => true als rückgabewert
            	if(parent::isAllowed($parent, $resource, $privilege))
                {
                    return true;
                }
            }
            //wenn es keinem der parents erlaubt ist => false
            return false;
        }
        //wenn nur ein parent => standardverhalten von isAllowed
        return parent::isAllowed($role, $resource, $privilege);
    }

ich bin allerdings nich so ganz zufrieden damit.. ich habe etwas angst, dass sich das eventuell performance technisch bemerkbar macht, wenn jeder isAllowed aufruf dann im endeffekt zu 5 führt..

deswegen würden mich wie sooft mal wieder meinungen von euch interessieren.. vor allem, ob ihr eventuell andere/bessere vorschläge habt..

danke im vorraus!
mfg,
whizzler
 
Bug?

PHP:
$date = new Zend_Date(new Zend_Locale('de_DE'));
$date->setMonth(9);
echo $date->get(Zend_Date::MONTH_NAME) . "\n";
echo Zend_Version::VERSION;

// Oktober
// 1.10.8
 
Ich weiss nicht, ob man das wirklich als Bug bezeichnen sollte.

Du setzst ja schliesslich nur den Monat neu und somit ist das Datum der 31.9.2010 - den gibt's aber nicht, also wird daraus der 1.10.2010.

Wenn intern Unix-Timestamps verwendet werden, ist das Verhalten analog zu:
PHP:
<?=date('d.m.Y', mktime(0,0,0, 9, 31, 2010));
 
Stimmt, soweit habe ich gar nicht gedacht, dass es den 31. September gar nicht gibt und er dann den Oktober nimmt.
Dann ist es wohl kein Bug :biggrin:
 
Mal wieder ne Frage. Ich habe diesmal das verlangen, bei Zend_Form Elementen je nach Validator verschiedene Meldungen auszugeben.

da ich eben zu faul war einen eigenen Validator zu schreiben, saß ich vor genau dem gleichen "Problem".
Diesesmal ging es bei mir aber auf Anhieb:
PHP:
// telephone
$telephone = $this->createElement('text', 'telephone');
$telephone->setLabel('Telefon')->setRequired(true);
$telephone->addValidator('StringLength', true, array(5, 20))
		  ->addValidator('regex', true, array(
		  	  '/^[0-9\+\s\(\)\-]+$/',
		  	  'messages' => array(Zend_Validate_Regex::NOT_MATCH => 'scheint keine Telefonnummer zu sein')
			));	
		
var_dump($telephone->isValid('0000 000a'));
var_dump($telephone->getMessages());

eventuell veränderst du meinen Schnippsel nochmal auf deine Bedürfnisse und testest es?

Edit: ich habe gerade herausgefunden, dass er dann "scheint keine Telefonnummer" nochmal übersetzen will :biggrin: Deswegen werde ich da nun eigene Translationkeys hinschreiben, also "invalidTelephonenumber"
 
Zuletzt bearbeitet:
Hallo,

ich hab mal wieder ein Problem.

Ich Lese verschiedene Veranstaltungen aus der Db aus und benutze diese dann in Zend_Form als Checkboxen. Nun brauche ich zu jeder Veranstaltung noch ein Textfeld in das etwas eingetragen werden kann.

Beisp:
Checkbox Veranstaltungsname
Textfeld

Checkbox Veranstaltungsname
Textfeld

usw...

Ich bekomme es zwar hin die Elemente so anzuzeigen, jedoch bekomme ich es nicht hin, diese Punkte dann als Array zu übergeben.
Es gibt ja auch noch das Multicheckbox Element aber da bekomme ich die Textfelder nicht dazwischen :-?

Ich habs mit Subforms probiert aber da bin ich auch nicht wirklich mit weitergekommen. Gibt es dafür eine einfache Lösung?

Google hat mir dazu leider auch nichts brauchbares ausgespuckt :)
 
Form Elemente haben die Optionen isArray bzw. belongsTo. Mit Ersterem kannst du sagen, dass es sich bei dem Namen um ein Array handelt, also checkboxen[]. Mit Zweiterem kannst du Namen wie veranstaltungen[$id][checkbox] erzeugen.
 
Form Elemente haben die Optionen isArray bzw. belongsTo. Mit Ersterem kannst du sagen, dass es sich bei dem Namen um ein Array handelt, also checkboxen[]. Mit Zweiterem kannst du Namen wie veranstaltungen[$id][checkbox] erzeugen.

Vielen Dank für die Antwort, ich werds gleich mal probieren. :D
 
begrüße!

ich habe ein problem mit Zend_Mail_Storage_Imap

ich versuche ganz normal eine verbindung herzustellen.. dafür benutze ich ganz normal folgenden code:

PHP:
        $accountData = array (
            'host' => $this->imap_server,
            'user' => $this->identity['username'],
            'password' => $this->identity['password']
        );        
        $imap = new Zend_Mail_Storage_Imap($accountData);

auf meinem localhost funktioniert das auch problemlos.. aber sobald ich das ganze auf den produktiv server lade bekomme ich folgende fehlermeldung:
cannot connect to host; error = php_network_getaddresses: getaddrinfo failed: node name or service name not known (errno = 0 )

der produktivserver und der imap server liegen auf der gleichen domain.. die adresse des imap servers ist imap.rz.uni-xyz.de und der produktivserver, auf dem das script läuft ist www.uni-xyz.de/dir..

ich habe in dem Zend code gewühlt und herausgefunden, dass an der stelle, die den fehler produziert fsockopen() verwendet wird (Zend_Mail_Protocol_Imap Zeile 94).. ich habe jetzt aber keine ahnung, ob es nicht funktioniert, weil es auf dem gleichen server liegt (wobei ich mir da noch nichtmal sicher bin..) oder ob es an fsockopen liegt.. ich habe auf dem produktivserver bei "host" auch localhost ausprobiert, was zu folgender meldung geführt hat:
cannot connect to host; error = Network is unreachable (errno = 128 )

ich habe wie gesagt keine ahnung, woran das liegt und wie ich es beheben kann.. ich bin für jegliche tipps dankbar.. und wenn es nur nen paar schlagworte sind, die ich an den server administrator schicken kann ;)

danke im vorraus
mfg,
whizzler
 
Zuletzt bearbeitet:
Hallo,

ich habe jetzt nicht alle Seiten durchgesehen.
Seit kurzem beschäftige ich mich mit Zend oder versuche es zumindest.

Aus den ganzen englischsprachigen Tutorials werd ich nicht schlau, deshalb meine Frage ob es auch ein Deutschsprachiges gibt oder, was vielleicht noch besser wäre, ob es ein deutschsprachiges Video dazu gibt....

Habe schon Gegoogelt und auch direkt bei YT geschaut aber nichts brauchbares gefunden. Also mit brauchbares meine ich eine ordentliche Anleitung, warum das so gemacht wird, halt auf deutsch usw.

Kann mir da jemand helfen?
Fange komplett neu an mit Zend...


MFG
Papenburger
 
Hallo erstmal ;)
Zuerst würde ich dich bitten es nicht "Zend" zu nennen, denn Zend ist eine Firma die viele Produkte um PHP herstellt.

Deutschsprachige Tutorials gibt es kaum, und wenn sind sie sehr veraltet. Ich würde dir empfehlen in den "sauren" Apfel zu beißen und die englischen Tutorials (z.B. den Quickstart) zu lesen, denn früher oder später wirst du immer auf Tutorials stoßen, die es nur in englisch gibt oder gar direkt im Sourcecode lesen müssen ;)

Zudem ist beim Programmieren sowieso immer alles englisch, umso früher du dich daran gewöhnst, umso besser.
 
Es gibt in PHP ja sowohl eine Memcache als auch die Memcached Extension. Meines Wissens nach, soll Memcached schneller laufen, weswegen ich diese Extension bevorzugt verwenden möchte.
Ich möchte in Memcached cachen und Zend_Cache dafür verwenden. Wenn ich nun aber ein Cache-Objekt mit _Memcached erzeugen will, meckert das Framework, dass die memcache-extension nicht geladen ist.
Änder ich den Source-Code manuell auf memcached, dann läuft es.

Hat das nen bestimmten Grund, dass da nur das eine Plugin unterstützt/geprüft wird und memcached ignoriert wird? 8O