Etykiety

linux (14) php (14) Laravel (9) mysql (9) Hardware (8) Windows (6) sieci (5) PowerShell (4) software (4) MariaDB (3) apache (3) html (3) Microsoft (2) bezpieczeństwo LAN (2) cygwin (2) Akcesoria (1) CMS (1) Laptop (1) Open Office (1) drupal 7 (1) gpg (1) hosting (1) jquery (1) sieci LAN (1) xml (1) zabezpieczenie sieci LAN (1)

sobota, 2 grudnia 2017

Laravel od Podstaw: kompozytor widoku

W poprzedniej części szkolenia p.t. Szablony widoków i style CSS nauczyliśmy się pracować ze złożonymi szablonami widoków. Zobaczyliśmy jak uprościć sobie pracę w przypadku widoków złożonych z wielu sekcji, takich jak menu nawigacyjne, boczna kolumna, stopka, zawartość główna. W tej części szkolenia zaprezentuję kolejną ważną ciekawostkę ułatwiającą pracę z widokami, a mowa będzie o Laravel View Composer, czyli o kompozytorze widoków.

Czym jest Laravel View Compser? Otóż wyobraźmy sobie że zawartość naszej szkoleniowej prawej kolumny widoku powinna być dynamiczna. Niech to będzie przykładowo lista najnowszych postów. Załóżmy, że taka lista powinna się wyświetlać w prawej kolumnie w każdym widoku witryny. Pamiętając część szkolenia dotyczącą sposobu przekazywania wartości zmiennych do widoków, teoretycznie moglibyśmy do każdego z widoków, który zawiera prawą boczną kolumnę, przekazać tego typu listę postów, uzyskaną za pomocą przygotowanej w tym celu metody naszej klasy Post. To by zadziałało, ale nie było by to najlepsze rozwiązanie zadania, ponieważ powielanie kodu nie należy do dobrych praktyk programistycznych. W rzeczywistości wyglądało by to paskudnie, gdyby w każdej z funkcji zwracającej widok mielibyśmy się powtarzać:
 public function index() {

   $posts = Post::all();

   $newest = Post::newest(5);

   return view('posts.index', compact('posts', 'newest'));

 }

public function create() {

    $newest = Post::newest(5);

    return view('posts.create', compact('newest'));

}

Na szczęście jest na to lepsze rozwiązanie, a kod powyższych metod można uprościć:
 public function index() {

   $posts = Post::all();

   return view('posts.index', compact('posts'));

 }

public function create() {

    return view('posts.create');

}

Zanim jednak przejdę do najważniejszej części tego tematu, przedstawię metodę Post::newest(), czyli funkcję zwracającą żądaną ilość najnowszych postów. Metoda znajdująca się wewnątrz ciała klasy Post, czyli w pliku app/Post.php wygląda następująco:
 public static function newest($n) {

    return static::latest('created_at')->take($n)->get();

 }

Powyższa funkcja typu static zwraca listę postów uporządkowanych malejąco według ich czasu utworzenia, czyli na samej górze listy znajdują się najnowsze posty. Lista zawiera ostatnie $n postów. W parametrze $n możemy zapodać limit listy postów.

Zakładając, że w miejscu :n wstawimy wartość $n, efekt zastosowanych w naszej funkcji metod Eloquent'a jest taki sam jak w przypadku zapytania SQL:
SELECT * from posts order by created_at desc limit :n

Gdy projektujemy tego typu metodę warto ją sobie przetestować interaktywnie w php artisan tinker. Zobaczmy jak działa metoda Post::newest():



Modyfikujemy szablon widoku prawej kolumny


Aby lista najnowszych postów mogła się prawidłowo wyświetlać w prawej kolumnie widoku, należy odpowiednio dopasować nasz szkoleniowy szablon widoku. Dostosujmy więc omówiony w poprzednim szkoleniu szablon kolumny bocznej do następującego stanu:
<aside class="col-sm-3 ml-sm-auto blog-sidebar">

  <div class="sidebar-module">

        <h4>Najnowsze posty</h4>

        <ol class="list-unstyled">

                @foreach ($newest as $post)

                <li><a href="{{asset('/posty/'.$post->id)}}">{{$post->title}}</a></li>

                @endforeach

        </ol>

  </div>

</aside><!-- /.blog-sidebar -->

Kompozytor widoku


Funkcje kompozytora widoku to wywołania zwrotne lub metody klasy wywoływane podczas renderowania widoku. Jeśli masz dane, które chcesz powiązać z widokiem za każdym razem, gdy widok jest renderowany, kompozytor widoku może pomóc uporządkować tę logikę w jednym miejscu. Aby w naszym szkoleniowym przykładzie wywoływanie metody Post::newest() nie było konieczne z osobna dla każdego widoku w skład którego wchodzi nasza szkoleniowa lista postów, z pomocą przychodzi nam Laravel View Composer. Zobaczmy jak to działa w praktyce! Wewnątrz metody boot() w pliku
app/Providers/AppServiceProvider.php
należy umieścić następującą funkcję, która ma za zadanie przekazać do widoku bocznej kolumny listę najnowszych pięciu postów, uzyskaną poprzez metodę Post::newest():
view()->composer('layouts.aside', function($view) {

    $view->with('newest', Post::newest(5));

 });

Nie zapomnijmy na samej górze pliku, przed deklaracją klasy, umieścić
use App\Post;

Zobaczmy teraz jakie efekty przyniosła nasza praca:

Nasz szkoleniowy widok listy postów
Nasz szkoleniowy widok listy postów


Nasz szkoleniowy widok zawartości posta
Nasz szkoleniowy widok zawartości posta


Nasz szkoleniowy widok tworzenia nowego posta

Nasz szkoleniowy widok tworzenia nowego posta


Podsumowanie


W tej części szkolenia poznaliśmy kompozytor widoku, którego stosowanie ułatwia nam pisanie czystego i niepowielającego się kodu. W kolejnej części szkolenia mam zamiar opisać podstawowe mechanizmy uwierzytelniania w Laravel.

11 komentarzy:

  1. Hej, kiedy dalsza część? :)

    OdpowiedzUsuń
  2. Potrzebuję pomocy, chciałbym się czegoś dowiedziec na jeden temat a mianowicie czym jest zarządzanie projektami informatycznymi oraz jak to robic?

    OdpowiedzUsuń
  3. Bardzo przydatna rzecz, na pewno wykorzystam w najbliższym czasie:) Dziękuję i czekam na dalsze części poradnika.
    __________
    Andpol

    OdpowiedzUsuń
  4. Ale to proste! Myślałem że będę się tego uczył godzinami czy nawet całymi dniami a tu niespodzianka! Po artykule na http://targowisko-wiedzy.pl/ miałem zupełnie inne wrażenie :)

    OdpowiedzUsuń
  5. Sądziłem że to o wiele trudniejsze zadanie, laravel to stosunkowo młody i trudny język. Chociaż jak dla mnie lepiej propozycje widoku sobie zamówić np u firmy Altaria i pójść standardowymi językami do efektu końcowego.

    OdpowiedzUsuń
  6. Te języki robią się coraz łatwiejsze. Z jednej strony to dobrze ale z drugiej zmneijsza próg wejścia w ten temat. I to może być złym zjawiskiem.
    __
    Memorabbit

    OdpowiedzUsuń
  7. Łatwiejszy sposób na wykonanie tego możecie zobaczyć na http://odkrywcyswiata.pl/. Korzystam z tych poradników bardzo często i stwierdzam że to najlepsze co mogło powstać!

    OdpowiedzUsuń
  8. Po roku pracy z laravelem stwierdzam że przyniósł więcej problemów niż nowatorskich rozwiązań. Żałuję że poświęcałam czas na to. Mogłam postawić na coś bardziej sprawdzonego i pewnego na rynku pracy niż umiejętności z larawela.

    OdpowiedzUsuń
  9. Według struktury języka wydaje mi się że język laravel jest łatwy w zastosowaniu. Nie sprawiło by mi dużej trudności w nauce tego języka. Firmy Morfeusz wykonuje podobne kody.

    OdpowiedzUsuń
  10. Przyszli informatycy uczcie się! Na pewno sama szkoła jest bardzo ważna, ale to co robicie poza nią jest równie ważne! Sprawdźcie sobie tu ofertę od https://www.cb.szczecin.pl/kierunek-studiow/informatyka/ Znajdziecie tu studia informatyczne.

    OdpowiedzUsuń
  11. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń

Dodaj komentarz