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 18.05.2011, 19:39  
Benutzer
 
Registriert seit: 03.03.2010
Beiträge: 38
PHP-Kenntnisse:
Anfänger
Enigma228 ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Erledigt] Zend_Form Klasse mit mehreren Forms

Hallo Leute,

ich stehe mal wieder völlig auf dem Schlauch..

ich erstelle mit dem zf Tool zb. zf create form User
und bekomme dann sowas

PHP-Code:
class Application_Form_User extends Zend_Form
{

    public function 
init()
    {
         
/*hier kann ich meine Form eintragen*/
    
}


Wenn ich jetzt aber mit der Klasse sowohl login als register abfrühstücken will, wie macht man das und wie ruft man diese dann gezielt ab??

ich dachte ich mache 2 Funktion wie
PHP-Code:
public function registerform()
{
    
$this->addElement('text','name',array(
            
'label' =>'Name',
            
'required' => true
    
));
    
$this->addElement('text','firstname',array(
            
'label' =>'Vorname',
            
'required' => true
    
));
    
$this->addElement('text','username',array(
            
'label' =>'Benutzername',
            
'required' => true
    
));
    
$this->addElement('password','pass', array(
            
'label' => 'Passwort',
            
'required' => true
    
));
    
$this->addElement('text','username',array(
            
'label' =>'Benutzername',
            
'required' => true
    
));
    
$this->addElement('submit''submit', array(
            
'ignore'   => true,
            
'label'    => 'Registrieren'
    
));
        
$this->setMethod('post');

und
PHP-Code:
public function loginform()
{
    
$this->addElement('text','username',array(
            
'label' =>'Benutzername',
            
'required' => true
    
));
    
$this->addElement('password','pass', array(
            
'label' => 'Passwort',
            
'required' => true
    
));
    
$this->addElement('submit''submit', array(
            
'ignore'   => true,
            
'label'    => 'Anmelden'
    
));
    
$this->setMethod('post');

in dieser Klasse, aber ich schaffe es nicht sie abzurufen!

normal mache ich das ja über den UserController und zwar so:
PHP-Code:
class UserController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
$request $this->getRequest();
        
/* Hier rufe ich auf, bekomme aber nur die init() */
        
$form = new Application_Form_User();
        if(
$this->getRequest()->getPost()){
            if (
$form->isValid($request->getPost())) {
                echo 
"korrekt abgesendet";
                return 
$this->_helper->redirector('index','index');
            }
        }
        
$this->view->form $form;    
        
    }
    

Was kann ich tun??
Enigma228 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 18.05.2011, 20:17  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Zitat:
Wenn ich jetzt aber mit der Klasse sowohl login als register abfrühstücken will, wie macht man das und wie ruft man diese dann gezielt ab??
Nicht mit einer, sondern mit 2 Klassen. 1 Objekt entspricht dann einem Formular.

Zum Rendern per __toString oder explizit render aufrufen.

Doku findest du hier: http://framework.zend.com/manual/en/...uickstart.html
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 18.05.2011, 23:31  
Benutzer
 
Registriert seit: 03.03.2010
Beiträge: 38
PHP-Kenntnisse:
Anfänger
Enigma228 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Wie meinst du das?

etwa so?
die User.php im forms-Ordner
PHP-Code:
class Application_Form_User_Login extends Zend_Form
{

    
    public function 
init()
    {
        
$this->addElement('text','username',array(
            
'label' =>'Benutzername',
            
'required' => true
        
));
        
$this->addElement('password','pass', array(
            
'label' => 'Passwort',
            
'required' => true
        
));
        
$this->addElement('submit''submit', array(
            
'ignore'   => true,
            
'label'    => 'Anmelden'
        
));
        
$this->setMethod('post');
        
//$this->setAction('user/check');
    
}

}

class 
Application_Form_User_Register extends Zend_Form
{
    public function 
init()
    {
        
$this->addElement('text','name',array(
            
'label' =>'Name',
            
'required' => true
        
));
        
$this->addElement('text','firstname',array(
            
'label' =>'Vorname',
            
'required' => true
        
));
        
$this->addElement('text','username',array(
            
'label' =>'Benutzername',
            
'required' => true
        
));
        
$this->addElement('password','pass', array(
            
'label' => 'Passwort',
            
'required' => true
        
));
        
$this->addElement('text','username',array(
            
'label' =>'Benutzername',
            
'required' => true
        
));
        
$this->addElement('submit''submit', array(
            
'ignore'   => true,
            
'label'    => 'Anmelden'
        
));
        
$this->setMethod('post');
    }

die UserController.php
PHP-Code:
class UserController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
$request $this->getRequest();
        
        
$form = new Application_Form_User();
        
        if(
$this->getRequest()->getPost()){
            if (
$form->isValid($request->getPost())) {
                echo 
"korrekt abgesendet";
                return 
$this->_helper->redirector('index','index');
            }
        }
        
$this->view->form $form;    
        
    }
    
    public function 
registerAction(){
        
$request $this->getRequest();
        
$form = new Application_Form_User_Register();
        if(
$this->getRequest()->getPost()){
            if (
$form->isValid($request->getPost())) {
                echo 
"korrekt abgesendet";
                return 
$this->_helper->redirector('index','index');
            }
        }
        
$this->view->form $form;    
    }



die Scripts(application/views/scripts/user): index.phtml
PHP-Code:
<br>
<div>
<?php 
$this
->form->setAction($this->url());
echo 
$this->form;
?>
<br>
oder hier <a href="<?php echo $this->url(array('controller'=>'user''action'=>'register'),'default'true?>">Registrieren</a>
</div>
und
register.phtml
PHP-Code:
<?php 
$this
->form->setAction($this->url());
echo 
$this->form;
?>
das war so mein Gedanke.. aber leider bleibt die Darstellung ein leeres Fenster in dem nicht mal die layout.phtml dargestellt wird..
Also was mache ich verkehrt??

Danke
Thomas
Enigma228 ist offline   Mit Zitat antworten
Alt 18.05.2011, 23:39  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Schau doch mal in die Error-Log. Statt $this->_helper->redirector kannst du auch $this->_redirect verwenden. Obs das jetzt schon ist, weiss ich nicht.

Ich würde im Controller mit $this->getHelper("helpername")->foo() arbeiten, da dann der helper broker den helper - wenn noch nicht geladen - nachladen würde.

Grüße Basti
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Alt 19.05.2011, 09:27  
Benutzer
 
Registriert seit: 03.03.2010
Beiträge: 38
PHP-Kenntnisse:
Anfänger
Enigma228 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Das ist es leider nicht

die redirector's treten ja erst bei erfolgreichen absenden des Formulars in Kraft.. aber es wird ja schon kein Formular angezeigt...

ich habe im UserController ein wenig getestet und ein paar echo's gesetzt.
alle Echo's bis zum $form - Eintrag funktionierten und danach kam nichts mehr
PHP-Code:
...
echo 
"hallo";
$request $this->getRequest();
echo 
"Hallo2";
$form = new Application_Form_User_Login();
echo 
"Hallo3";
... 
Ausgabe:
halloHallo2

also muss er bei der Objecterstellung scheitern oder??

wenn ich die Klasse in der User.php (Form-Ordner) wieder ändere auf den Namen Application_Form_User
ändere und auch den Aufruf im Controller ändere
also
PHP-Code:
class Application_Form_User extends Zend_Form
{
... 
PHP-Code:
$form = new Application_Form_User(); 
funktioniert es wieder.. allerdings nur die 1. Klasse.. Die 2. Klasse in der User.php aus dem Form Ordner wird weiter ignoriert..
Ich füchte es hat etwas mit den strengen Namenskonventionen zu tun..

Irgendwelche Ideen wie man sowas normalerweiser löst..
Es muss doch möglich sein, einem Controller mehrere Forms zuzuteilen

Gruss
Thomas
Enigma228 ist offline   Mit Zitat antworten
Alt 19.05.2011, 16:43  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

Für jede Klasse eine Datei, sonst bringst du den Autoloader durcheinander.

application/forms/User/Login.php -> Application_Form_User_Login
application/forms/User/Register.php -> Application_Form_User_Register

"forms" wird beim Modul-Autoloader (wenn du keine Module benutzt, ist application/ direkt ein Modul) für Form_ definiert, "User_" hingegen nicht (das bekannt zu machen ist meiner Meinung nach nicht sehr sinnvoll). Achte auch unbedingt auf die Groß- und Kleinschreibung.

Tipp:
echo's bei Redirects sind wirklich unpraktisch, allerdings mit Firebug + FirePHP und Zend_Log kann man schön mitloggen was passiert:

Dazu zuerst mein Action Helper: http://pastie.org/1926956

und in die application.ini:
Code:
; Log-Datei für grobe Fehler
resources.log.stream.writerName = "Stream"
resources.log.stream.writerParams.stream = APPLICATION_PATH "/../data/logs/application.log"
resources.log.stream.writerParams.mode = "a"
resources.log.stream.formatterName = "Simple"
resources.log.stream.formatterParams.format = "%timestamp% %priorityName% (%priority%): %message% -- %info% --
"
resources.log.stream.filterName = "Priority"
resources.log.stream.filterParams.priority = Zend_Log::WARN

; Debug-Log für Firefox in [development] gut aufgehoben
resources.log.firebug.writerName = "Firebug"
resources.log.firebug.filterName = "Priority"
resources.log.firebug.filterParams.priority = Zend_Log::DEBUG
und den Action Helper-Pfad registrieren:
Code:
resources.frontController.actionHelperPaths.Lubyte_Controller_Action_Helper = "Lubyte/Controller/Action/Helper"
und dann in einer Action:
PHP-Code:
$this->_helper->logger()->log('debug me'Zend_Log::DEBUG);
// oder
$this->_helper->logger()->debug('debug me'); 
Dann im Firebug auf "Dauerhaft" stellen und man sieht auch was vor einem Redirect geloggt wurde.
lcrash ist offline   Mit Zitat antworten
Alt 19.05.2011, 22:30  
Erfahrener Benutzer
 
Registriert seit: 13.05.2011
Beiträge: 188
PHP-Kenntnisse:
Fortgeschritten
php1704 wird schon bald berühmt werden
Standard

Zitat:
die User.php im forms-Ordner
Das geht so nicht.

Das muss in 2 Dateien. Die dann entsprechend der Klassennamen auch noch in einem Unterverzeichnis sein müssen.

forms/user/Login.php
PHP-Code:
class Application_Form_User_Login extends Zend_Form
{
...

forms/user/Register.php
PHP-Code:
class Application_Form_User_Register extends Zend_Form
{
...

Nun sollte der Autoloader beide Formulare finden.


Grüße.
php1704 ist offline   Mit Zitat antworten
Alt 20.05.2011, 00:03  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

Zitat:
application/forms/User/Login.php -> Application_Form_User_Login
application/forms/User/Register.php -> Application_Form_User_Register
[...]
Achte auch unbedingt auf die Groß- und Kleinschreibung.
„user“ wird auf Windows (eigentlich ist das eher eine Sache des Dateisystems) funktionieren, aber nicht mehr unter Linux (oder anderer Unix, nur nicht Mac OS X), da hier zwischen Groß- und Kleinschreibung unterschieden wird.
lcrash ist offline   Mit Zitat antworten
Alt 20.05.2011, 14:50  
Benutzer
 
Registriert seit: 03.03.2010
Beiträge: 38
PHP-Kenntnisse:
Anfänger
Enigma228 ist zur Zeit noch ein unbeschriebenes Blatt
Standard Danke

Danke für die Tips

Thomas
Enigma228 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
Klasse mit Pfadproblem Dieselsepp PHP Einsteiger 6 27.04.2011 13:51
Seite nur im Script aufrufbar BlackScorp PHP Tipps 2010 4 03.11.2010 15:57
[Erledigt] Klasse aus einer anderen Klasse aufrufen Tobby PHP-Fortgeschrittene 7 14.07.2010 20:05
[Erledigt] Nur einer bestimmten Klasse Zugriff andere Klasse erlauben Turamisi Software-Design 2 20.02.2010 20:31
Mysql Klasse macht Probleme in verschachtelten / verzweigten SQL Abfragen litterauspirna PHP Tipps 2010 3 16.02.2010 12:54
Grundsatzfrage zu Attributen einer Klasse sloomf PHP Tipps 2009 6 25.10.2009 07:14
Klasse für Objekteigenschaft erzeugen? Asipak PHP-Fortgeschrittene 25 30.05.2009 19:45
[Erledigt] Eine klasse einbinden newWorldOrder PHP Tipps 2009 2 23.02.2009 19:32
Methode einer anderen Klasse aufrufen Luka PHP-Fortgeschrittene 15 09.11.2008 14:19
Klasse aus externer Klasse aufrufen kostja PHP Tipps 2008 8 07.08.2008 14:13
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mehrer forms zend form, zend form text size, resources.log.stream.formatterparams.format, zend form in verschiedenen views einbinden, zend_form extend ordner, php extends mehrere klassen, mehrere forms auf einer seite zend_form, zf forms ordner init, klasse in mehreren formularen, resources.log.stream.formatterparams.format ignoriert, log.stream.formattername = \simple\, lubyte_controller, $this->addelement(\'text\', \'vorname\', array(, zend, zend form klasse laden, zend_form klasse einbinden, zf form ordner, zf create form unterordner, zend framework \mehrere forms\ aus modulen anzeigen, zend form mehrere form auf einer seite, zend post mehrere formulare auf einer seite

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:53 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