While view items can be useful to pass generic data, such as the title and so on, the primary data for a page should be passed via a model.
Let's get rid of the hard coded author information on our "About"-page and pass it as a model instead. While we're at it, we also add a year-parameter.
Open Application/Controllers/IndexController.php and modify the aboutAction method to look like this:
public function aboutAction(): View
{
$model = ['Name' => 'John Doe', 'Email' => 'info@example.com', 'Year' => 2018];
$this->setViewItem('Title', 'About this website');
return new View($model);
}
Anything that is passed as the first parameter to View() is considered to be the model. The parameter name $model is only for illustrative purposes. Also, any type or object can be passed as a model.
Open Application/Views/Index/about.twig and modify the content like this:
{% extends "sitelayout.twig" %}
{% block content %}
<h1>About this website</h1>
<p class="intro">
This is a website created by {{ Model.Name }} {{ Model.Year }}
</p>
<p>
E-mail me at <a href="mailto:{{ Model.Email }}">{{ Model.Email }}</a>
</p>
{% endblock %}
Reload the http://localhost/about page to see the new result:
The array passed to the View constructor in the controller is always available as the Model object in the view.
The dot-notation for accessing array elements as in Model.Name is a Twig functionality. See the Twig variables documentation for more information.
Of course in real life applications, the model content is not hard coded in the controller, but is rather a result from a database query or something similar. We will continue with this in the following parts.
✎ Published in category get started