Ho un'applicazione costruita usando un framework MVC (per ragioni di argomento, PHP / Yii2) e ho una domanda su dove portare avanti la logica e generare valori che verranno iniettati in, per esempio, IndexView
o AboutUsView
.
In questo caso la pagina "Chi siamo" viene visualizzata quando la rotta /about-us
viene colpita da un browser, chiamando il metodo actionAboutUs
in SiteController
che chiama semplicemente il metodo Controller::render($template)
che causa il $template
php file da analizzare e produrre.
Questo va bene quando il contenuto di $template
non è dinamico in alcun modo; solo contenuto html statico. Tuttavia, quando dovrebbe esserci del contenuto dinamico, la mia comprensione di MVC è che questo dovrebbe essere calcolato nel controller e passato al metodo render
.
Essere veramente MVC è corretto e se è così una regola dura e veloce?
Ad esempio, in una pagina mi piacerebbe produrre il numero di post che un metodo di classe Post::getNumberPosts()
potrebbe essere chiamato direttamente nella vista e in uscita o chiamato nel controller, assegnato a una variabile, la variabile iniettata in alla vista e al valore dell'output variabile. Il primo metodo va contro MVC come pattern?
O se sulla homepage mi piacerebbe produrre uno di due messaggi diversi a seconda dello stato di accesso dell'utente corrente. Se l'utente non ha effettuato il login in un messaggio di benvenuto generico o se ha effettuato l'accesso, chiama altri metodi per generare contenuti specifici dell'utente. Al momento questo viene gestito nella vista nel modo seguente
<?php if (!App::loggedIn) { ?>
<p>Generic Welcome!</p>
<?php } else {
$myVar = currentUser->getDetails();
?>
<p>hello <?php echo $myVar->myName;?></p>
<?php } ?>
Questo caso potrebbe essere gestito in un modo più MVC?
tl; dr Tutta la logica nel controller e passa alla vista?