Geen overdracht argumenten naar controller

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan Kila

Jan Kila

04/02/2020 12:31:43
Quote Anchor link
Teneinde mijn inzicht in het gebruik en de werking van een MVC-framework te verdiepen, heb ik de volgende link gevonden:
https://medium.com/@noufel.gouirhate/create-your-own-mvc-framework-in-php-af7bd1f0ca19

Dit ervaar ik als een goed artikel dat mijn inzicht weer een stukje verder brengt. Aldus besluit ik het bijbehorende project te downloaden en aan een nader onderzoek te onderwerpen. Ik vind de link hier:
https://github.com/ngrt/MVC_todo

Tot zover gaat alles goed. Maar als de dispatcher de betreffende controller moet starten en argumenten overdragen loop ik vast, graag een zetje in de goede richting?

De gebruikte url is:
Router url: /mvc/dog/bark/hiaaah

In de dispatcher gaat het om deze code:
$controller = $this->loadController();

echo '<p>Dispatcher-controller: </p>';
echo '<pre>';
echo print_r($controller);
echo '</pre>';
Output:
Dispatcher-controller:
dogController Object
(
[vars] => Array
(
)

[layout] => default
)
1
echo '<p>Dispatcher-request-action: '.$this->request->action.'</p>';
Output:
Dispatcher-request-action: bark

echo '<p>Dispatcher-request-params: </p>';
echo '<pre>';
echo print_r($this->request->params); // This is already an array()!
echo '</pre>';
Output:
Dispatcher-request-params:
Array
(
[0] => hiaaah
)
1
Conclusie: ik heb alle parameters voor overdracht naar de controller op orde.
Dan nu dit statement:

call_user_func_array([$controller, $this->request->action], $this->request->params);
Tot zover de code in de dispatcher.

In de controller heb ik de volgende code:
Class dogController extends Controller
{
function dog($bark, $sound)
{
echo '<p>Class dogController method: '.__METHOD__. "() hond: $bark en huilt: $sound </p>”;
}
} // Class dogController

Maar deze output krijg ik niet. Voorlopige conclusie; het statement in de dispatcher:

call_user_func_array([$controller, $this->request->action], $this->request->params);

lijkt niet te werken.
Wat doe ik hier fout?
 
PHP hulp

PHP hulp

16/05/2021 23:04:26
 
Michael -

Michael -

04/02/2020 12:51:09
Quote Anchor link
Plaats je code even tussen code-tags.
 
Jan Kila

Jan Kila

04/02/2020 13:31:03
Quote Anchor link
Oeps. De oplossing is zoals vaak weer eenvoudig: RTFM!
En het manual vermeldt nogal expliciet: de functie 'call_user_func_array()' gaat niet werken als er in de voorgaande code een fout is opgetreden.
Dan een bezoek aan de log file; en daar staat dat m'n class dogController geen functie bark() heeft; dát is dus m'n fout!
Dit had ik ook eerder kunnen zien - en dat zou me heel veel zoekwerk hebben bespaard - als ik de error reporting zou hebben aangezet.
Laat het een les zijn; niet alleen voor mij.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/02/2020 13:49:15
Quote Anchor link
Zodra ik zoiets zie in een .htaccess:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
RewriteRule ^([a-zA-Z0-9\-\_\/]*)$ index.php?p=$1

dan word ik eigenlijk al een beetje mistroostig.

Hier vervuil je namelijk onnodig de "querystring namespace". De code maakt al gebruik van REQUEST_URI, dus waarom heb je dan nog ?p=whatever nodig?

En wat als je straks een pagineringssysteem hebt met ?p=1, ?p=2 etc? De querystring parameter "p" wordt hier onnodig gereserveerd/geclaimd. Dit is ook niet echt in de geest van de querystring, deze zou namelijk transparant moeten zijn. Het querystring-gedeelte van URLs wijkt in deze opzet af van $_GET omdat je onder water "p" injecteert...

Ook qua naamgeving biedt dit weinig flexibiliteit, het zal altijd van de vorm <controller>/<action>[/<parameter(s)>] zijn. Dit hoeft trouwens niet per se een probleem te zijn.

Overal requires, er is geen autoloader?

Een connectie (met hardcoded parameters, waarom trek je deze niet uit het config object of uit een config file?) zonder indicatie van character encoding en je connect met root... Ayyy.

Okay, voor de illustratie van een MVC-aanpak is dit misschien afdoende, maar andere principes worden hier met voeten getreden :/.
 
Jan Kila

Jan Kila

04/02/2020 20:17:21
Quote Anchor link
@Thomas,
Als illustratie, zeker!
Er zit nog veel meer in dat project dat ik op die manier niet zou willen maken. Maar om het principe aan de hand van een uitgewerkt voorbeeld te doorgronden, voor mij voldoende.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.