Come posso integrare le viste con lo stato del controller in modo trasparente?

1

In un'applicazione MVC, l'integrazione tra controller e viste è spesso una questione di:

class HelloController {
  public function sayHello(Request $request) {
     return new Response($this->templating->render('view', [
       'name' => $request->get('name')
     ]);
  }
}

Tuttavia, ci sono molti framework là fuori che spesso eseguono integrazioni "trasparenti" della vista con la logica del controller. Ad esempio, consentono l'accesso diretto al token CSRF semplicemente scrivendo {{ csrftoken() }} o simile nella vista; questo accade in modo completamente trasparente.

Tuttavia, dal momento che non utilizzo alcun framework, sono costretto a fare qualcosa di simile per la maggior parte dei controller:

$this->templating->render('view', [
  'name' => $request->get('name'),
  'csrf_token' => $this->getCsrfToken()
])

Come posso eseguire un'integrazione così trasparente dello stato del controller come fa la maggior parte dei framework moderni?

    
posta user2064000 27.12.2016 - 17:03
fonte

1 risposta

1

Un modo in cui il tuo esempio di {{ csrftoken() }} può essere implementato è analizzando le parentesi, riflettendo sul classe sottostante per trovare il metodo corretto da chiamare e sostituire le parentesi e racchiudere il testo con il valore restituito dalla chiamata al metodo.

Ulteriori letture
L'anatomia di un semplice motore di template

    
risposta data 27.12.2016 - 17:50
fonte

Leggi altre domande sui tag