CakePHP 3 elementy

Elementy to bloki kodu, które można utworzyć jednorazowo i korzystać z nich w wielu miejscach witryny, co ułatwia wprowadzanie zmian w jednym miejscu zamiast wyszukiwania wszystkich wystąpień tego samego kodu. Dla przykładu stworzymy element zawierający link do zalogowania lub wylogowania z aplikacji.

Utwórz plik Create src/Template/Element/login_logout.ctp
<div class="right"><?php
    $username = $this->request->Session()->read('Auth.User.username');
    if ($username == '') {
        echo $this->Html->link(__('Login'), ['controller' => 'users', 'action' => 'login']);
    } else {
        $full_name = $this->request->Session()->read('Auth.User.first_name') . ' ' . $this->request->Session()->read('Auth.User.last_name');
        echo 'Welcome ' . $this->Html->link($full_name, ['controller' => 'Users', 'action' => 'view', $this->request->Session()->read('Auth.User.id')]) . ' : ' . $this->Html->link(__('logout'), ['controller' => 'users', 'action' => 'logout']);
    }
?></div>
Zauważ, że nie możemy załadować wirtualnego pola full_name, ale możemy je odtworzyć ręcznie. Teraz wystarczy tylko załączyć nasz element w pliku src/Template/Layout/default.ctp. Załączamy go na wszystkich akcjach oprócz login.
<?php if ($this->request->params['action'] != 'login') { echo $this->element('login_logout'); } ?>
Do elementów można przekazywać również zmienne (spójrz na poniższy kod). Robimy to przekazując jaki drugi argument tablicę zmiennych.
echo $this->element('helpbox', [
    "helptext" => "Oh, this text is very helpful."
]);
Teraz wystarczy w pliku elementu src/Template/Element/helpbox.ctp odwołać się do zmiennej $helptext.
echo $helptext; // Outputs "Oh, this text is very helpful."
Jeśli potrzebujesz więcej logiki w swoim elemencie, takich jak dynamiczne źródła danych, rozważ użycie View Cells zamiast elementów. View Cells omówię w kolejnym artykule.