Mijn index.php in de map public ziet er als volgt uit: Plaatscode: 140703
Nu heb ik een formulier kunnen maken met als actie "user/process" en in de controllers een nieuwe controller UserController.php gemaakt.
In de process-actie staat er enkel een echo van testcommentaar.
Wanneer ik het forumulier submit (of zelf de url localhost/abes/public/user/process ingeef) krijg ik steeds de melding 'object not found'.
Het lijkt me dus dat Zend niet weet dat hij de url moet ontleden en de bijhorende controller+action openen.
Dit is de code voor mijn controllers en bootstrapper (inclusief locatie):
htdocs/myProject/application/controllers/IndexController.php: Plaatscode: 140720
htdocs/myProject/application/controllers/UserController.php: Plaatscode: 140721
htdocs/myProject/public/index.php Plaatscode: 140722
Wat ik nu zou verwachten is dat wanneer ik naar http://localhost/myProject/public/user/process zou gaan (url dat from-submit geeft), ik "ok" te zien zou krijgen. In plaats daarvan krijg ik een HTTP error 500.
Want volgens mij blijft het resultaat van getForm() gedurende heel de uitvoering null... Je moet je ervan bewust zijn dat je werkt met klassen en objecten van klassen. Een object bestaat niet voor het gemaakt is. Je moet je formulier dus wel eerst maken.
Denk echter niet dat wanneer je een formulier gemaakt hebt in indexAction() die bij het verzenden van de form dan ook in je object blijft staan. Een pageload = nieuw Controller-object. Dus moet je ook weer je form opnieuw instantiëren in je processAction
@MiST: DriesA is maar een beginner in ZF, wind je niet te veel op
@Dries: Misschien een goed idee om de form eerst in een "model" te steken. Dit wil zeggen dat we een aparte form class maken, om achteraf die code te gebruiken in de controller. Hierdoor heb je minder code in de controller (het principe skinny controllers, fat models).
Zie hiervoor de tutorial op http://framewor...-form.html
Alle code die nodig is om de form te maken steek je dan gewoon in de methode init van je form class (vergeet niet Zend_Form te extenden).
Als je de class hebt, gebruik dan de code boven (in het post van MiST) om de form te laden. Steek deze code in de init methode van je controllers (IndexController en UserController). In principe zou je form dan moeten werken.
En voor de methode processAction mag je de eerste 3 lijntjes in comments uit de comments halen.
Ik wind me niet op. Akkoord, mijn openingszin is niet zo geslaagd maar ik probeer gewoon even enkele belangrijke pijnpunten in het licht te zetten. Volgens mij is de TS niet enkel ZF beginner maar ook OOP beginner, am I right?
Het is belangrijk dat je de principes van OOP goed begrijpt voor je verdergaat met ZF.
Nog even een beetje inhoudelijke commentaar op avdg zijn post.
* Het is eerder afgeraden PHP globals te gebruiken in ZF omdat zij daar wrappers voor gemaakt hebben. Gebruik dus liever geen $_POST maar $this->getRequest()->getPost() (ook al komt het op hetzelfde neer).
* Steek nooit, maar dan ook nooit formulierinitialisatie code in de init() van je controller. Wat je hier instopt wordt bij ELKE request uitgevoerd. Het kan zijn dat je maar 2 actions hebt en deze alle twee hetzelfde formulier nodig hebben maar dit blijft een slecht ontwerp dan.
* What the hell?! (dit is even niet op avdg bedoeld ;))
Renderen doe je in je view, niet in je Controller. zet <?= $this->form; ?> in je viewscript en je form verschijnt. Hiervoor moet je wel short_open_tag enablen in php.ini of het voluit schrijven: <?php echo $this->form; ?>
Als het fout is, mag/moet het ook gemeld worden
Ben inderdaad maar een beginner, maar zonder nuttige feedback zoals dit is het ook moeilijker om te leren ;)
Heb dus nu in /application/forms een Loginform.php gemaakt met volgende code: Plaatscode: 140727
in je LoginForm.php moet je de variabele $form veranderen door $this.
Dit is hoe OOP in PHP werkt. Het is waarschijnlijk ook de reden voor je error 500 want die variabelen die je gebruikt hebben geen methodes.
Ken/Begrijp je de principes van OOP (Object Oriented programming)?
In je IndexController zou ik de constructie van je formulier toch uit de init() methode houden omwille van bovenstaande reden. (zeker omdat je ook nog een registeraction hebt )
$this->render() moet weg uit je UserController. Dit geeft waarschijnlijk ook een fout. een ActionController heeft geen methode render, tenzij je er zelf een declareert. (Again, OOP principes ;))
je index.phtml is correct, behalve dan het gebruik van <center> tag. Die is deprecated. Gebruik liever "margin: 0 auto" in je CSS.
By the way, het kan maar een nuttige tip zijn. Zet in je .htaccess de volgende lijn als die er nog niet instaat.
Ik dacht van wel, maar blijkbaar toch niet zo.
Ik heb enkele jaren geleden een cursus OO gezien, maar nooit echt pratisch toegepast (tot nu dan).
Met je opmerkingen krijg ik inderdaad mijn formulier te zien en kan ik weer even verder
Beide bedankt en waarschijnlijk tot binnenkort voor mijn volgende vraag