Skip to content

Commit ff67f30

Browse files
authored
Merge branch 'main' into vagrant-workers
2 parents fbc0313 + c76ae0d commit ff67f30

22 files changed

+372
-302
lines changed

Diff for: _docs/developer/developing_the_php_site/view.md

+43-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ pattern.
1111
The [Controller](controller) will call the view. Let's have a look at
1212
an example `UserView.php`. It might have a function in it like this:
1313

14-
```PHP
14+
```php
1515
public function showUserDetails(UserModel $user) {
1616
$this->core->getOutput()->addInternalJs('user-details.js');
1717
$this->core->getOutput()->addInternalCss('user-details.css');
@@ -53,4 +53,45 @@ Finally, let's look at `UserDetails.twig`
5353
```
5454

5555
In this page, we use `user_id` and `favorite_color` to render information
56-
about the student.
56+
about the student.
57+
58+
## Another option: Rendering with Vue
59+
60+
Alternatively, instead of using Twig, we can use [Vue](https://vuejs.org/) instead.
61+
62+
To do this, first make a Vue page in `site/vue/src/pages` (for example, `site/vue/src/pages/UserDetails.vue`):
63+
```html
64+
<script setup lang='ts'>
65+
import { inject } from 'vue';
66+
67+
const userId = inject<string>('user_id') ?? '<no user provided>';
68+
const favoriteColor = inject<string>('favorite_color') ?? '<no color provided>';
69+
</script>
70+
71+
<template>
72+
<div class="content">
73+
{% raw %}{{ userId }}'s favorite color is {{ favoriteColor }}.{% endraw %}
74+
</div>
75+
</template>
76+
```
77+
78+
79+
To actually render this page, we will then need to use the `renderVue` function in our View (ex. `UserView.php`).
80+
81+
The first paramater of the `renderVue` takes the name of the page (the name of the `.vue` file minus the extension, in this case `UserDetails`), and the second parameter is the same as in `renderTwig`, an associative array of variables that are passed to the Vue page.
82+
83+
If we wanted our `UserView.php` example to render with Vue, it would have a function that might look like this:
84+
85+
```php
86+
public function showUserDetails(UserModel $user) {
87+
return $this->core->getOutput()->renderVue(
88+
'UserDetails',
89+
[
90+
'user_id' => $user->getUserId(),
91+
'favorite_color' => $user->getFavoriteColor()
92+
]
93+
);
94+
}
95+
```
96+
97+
To access the variables passed by the `renderVue` function in Vue, use [`inject`](https://vuejs.org/api/composition-api-dependency-injection.html#inject). The injection keys will be the same as the keys in the provided array. If the key provided to `inject` is not in the array passed to `renderVue`, it will return `undefined`.

0 commit comments

Comments
 (0)