od Podstaw
5 godz. 56 min · PHP · Full-stack i Programowanie
Patryk WaluśBackend DeveloperZanim przejdziemy do omawiania możliwości Magento, przedstawię Ci w jaki sposób skonfigurować środowisko developerskie oraz jak zainstalować nowy projekt. Omówimy też polecenia i narzędzia, które są przydatne podczas pracy developerów.
Rozpoczniemy od przedstawienia oraz omówienia funkcji poszczególnych katalogów, które znajdują się w projekcie. Po wstępie stworzymy swój pierwszy moduł oraz przedstawię podstawowe techniki wykorzystywane przez Magento do zarządzania konfiguracjami czy modułami.
Magento wykorzystuje bardzo popularny wzorzec MVC, który składa się z trzech elementów. Aby z łatwością rozumieć jak system obsługuje żądania HTTP najpierw przestawię ogólne działanie MVC, a następnie jak to działa w Magento.
Szczegółowe omówienie wzorca MVC rozpoczniemy od literki C czyli Controller'a. W tym rozdziale dowiesz się jak zarejestrować w systemie nową ścieżkę, jak pobierać parametry oraz w jaki sposób zwrócić rezultat odpowiedni dla danego przypadku.
Gdy już zarejestrujemy nową stronę, konieczne będzie zdefiniowanie jej wyglądu. Dlatego też, przedstawię Ci jak to zrobić oraz jakie możliwości Magento udostępnia do manipulacji układem stron. Omówię różnice między kontenerem, a blokiem oraz pokaże jak modyfikować tagi w sekcji.
Aby wcześniej dodana strona była funkcjonalna, konieczna jest jej integracja z bazą danych. Do tego celu stworzymy m.in. Model, za pomocą którego będziemy komunikować się z MySQL. Przedstawię Ci też dobre praktyki, które pozwalają na tworzenie kodu wysokiej jakości.
W ostatnim rozdziale omówimy konfigurację nowego motywu w Magento. Pozwoli Ci to zrozumieć jak tworzyć różne wersje wyglądu dla sklepów internetowych.
Ten kurs w szczególności przyda się osobom, które chcą poznać podstawy framework'a Magento 2. Przedstawione w nim fundamentalne informacje pomogą zrozumieć sposób działania systemu, a także w jaki sposób można dodawać czy rozszerzać swój projekt o nowe funkcjonalności.
W poprzedniej lekcji odpowiedzieliśmy czym są serwisy kontrakt.
Natomiast teraz zajmiemy się stworzeniem interfejsu danych dla modelu marki.
Do tego celu przejdziemy do modułu Edu Brand.
Stworzymy nowy katalog o nazwie API i następnie kolejny katalog o nazwie data.
Następnie stworzymy nowy plik.
Tym razem będzie to interfejs który nazywamy Brand.
Interfejs dodamy też oczywiście najlepiej.
Następnie w interfejsie Brand interface
konieczne będzie zmienianie słowa kluczowego klas na
z racji że jest to interfejs i następnie dodamy metody które są dostępne z poziomu
tego interfejsu czyli klas które będą prezentować ten interfejs.
Z racji że ten interfejs ma odpowiadać
modelowi Brand konieczne będzie dodanie metod do pobierania oraz ustawiania
takich danych jak id name oraz uroki Mam skonfigurować.
Wybierz PiS Store listę prac które pomogą
mi na łatwiejsze wygenerowanie metod dla tego interfejsu.
Tobie polecam skopiować kod z lista.
Dodajmy więc pierwszą metodę do pobrania identyfikatora.
Następna metoda będzie służyła do pobrania oraz zapisu nazwy.
I ostatnia będzie służyła do zapisu oraz pobrania URL ki.
Możemy sobie tutaj trochę to
posprzątać czyli stałe przeniesiemy na górę naszego interfejsu.
Czyli w interfejsie znajdują się zarówno
metody do pobrania takie jak Get It oraz set it.
I dodatkowo mamy też możliwość wykorzystania stałych dzięki czemu np.
będziemy mogli odwoływać się w pewnych miejscach za pomocą data.
I nie przekazywać zwykłego Stinga tylko po prostu stałą z interfejsu interfejsu.
Następnie konieczne będzie zaimplementowane tego
interfejsu czyli stworzenie nowego obiektu który będzie przechowywał tylko i
wyłącznie te dane pobrane z bazy danych i teraz mamy do wyboru dwie możliwości
albo dodamy interfejs do modelu Brand dzięki czemu będziemy mieli zapewnione że
model Brand ma im prezentować interfejs interfejs.
Jednak mamy też drugą możliwość.
Możemy stworzyć całkowicie nowy obiekt
nową klasę która będzie prezentowała interfejs brat interfejs i będzie tylko i
wyłącznie przechowywał dane odnośnie marki.
Jeśli my skonfigurować interfejs interfejs
na modelu to nawet jeśli będziemy wykorzystywać w naszym kodzie interfejs
Brand interface a pod spodem będzie znajdował się model Brand to i tak
będziemy mogli wykorzystać metody takie jak sejf i lot ponieważ pod spodem
interfejsu brak interfejsu będzie obiekt modelu Brand.
Niestety w korze możemy znaleźć zarówno taką implementację jak i taką i.
Przejdźmy teraz do Fedora do katalogu marzeń to.
I następnie do modułu Customer.
Przejdziemy do folderu model
i następnie do modelu Customer który odpowiada za emocje klienta.
Możemy zauważyć że model Customer nie prezentuje żadnego interfejsu.
Natomiast jeśli przejdziemy wyżej.
Do folderu data będzie znajdowała się tutaj kasa Customer.
Która już komplementuje specjalny interfejs ma to Customer API data Customer
interface czyli właśnie ten interfejs serwis kontrakt.
Dzięki temu obiekt customer data przechowuje tylko i wyłącznie dane i
nie ma możliwości zapisu żadnej informacji do bazy danych czy też
pobrania z bazy danych czyli podczas ładowania modelu.
To jest model Customer pobierze wszystkie
wymagane informacje następnie przekaże je do obiektu data Customer i ten obiekt
Customer będzie przekazywany następnie w całym systemie.
Dzięki temu mamy pewność że
w szablon czy też w innych miejscach w systemie gdzie nie powinny być wykonywane
żadne operacje na bazie danych tych operacji nie będzie.
Natomiast jeśli przejdziemy do modułu katalog.
A następnie do folderu Modern zobaczymy model produkt.
To jest esencja produktu.
I w tym przypadku możemy zauważyć że
komplementuje on interfejs produkt interfejs który też zawiera stałe oraz
metody tak jak w poprzednim wykonanym przez nas interfejsie.
I co ważne to model produkt i prezentuje ten interfejs czyli zarówno jest on
modelem i ma wszystkie operacje dostępne metody sejf oraz LOT ale też prezentuje
interfejs interfejs więc po części prezentuje serwis kontrakt.
Niestety mimo to że produkt będzie
przekazywany jako serwis kontrakt w systemie to i tak pod spodem będzie
możliwość wykonania metod LOT czy sejf więc mamy do wyboru dwie opcje.
Zespół to nam nie pomaga wybraniu żadnej jednak kierując się zdrowym rozsądkiem i i
zasadą single response powinniśmy raczej wybrać stworzenie nowego
obiektu który komplementuje interfejs serwis kontrakty i stworzyć do niego nową
klasę która tylko i wyłącznie przechowuje dane.
I tak też zrobimy w naszym przypadku.
Wróćmy do.
Brat interfejs mamy już przygotowany całą strukturę która
ma zostać zaimplementowane w obiekcie Brand.
Dlatego też cofamy się do brand usuwamy słowo i ponieważ nie kończyliśmy
pisania nie będziemy nic z tym pliku zmieniać dodajemy sobie kolejny folder.
Data.
I w nim stworzymy nową klasę.
Brand.
To damy.
I następnie zaimplementowane interfejs brat interfejs.
Aby przechowywać informacje o marce możemy
dodać swoje własne atrybuty do klasy Brand natomiast możemy też wykorzystać.
Klasę data obiekt.
Która już była pokazywana wcześniej podczas omawiania bloków.
Ona zawiera takie metody jak data czy set data.
Dlatego też możemy wykorzystać dokładnie te metody do pobrania np.
identyfikatora.
Czy też zapisu identyfikatora.
Dla przyspieszenia lekcji przygotuje
zawartość tego pliku a ty go sobie z lista przygotowałem zawartość klasy Brand.
Dodatkowo zmieniłem też wartości tekstowe w Polak data oraz data na stałe z
interfejsu brat interfejs aby uniknąć powtarzania kodu.
Wtedy już tyle
udało nam się zaimplementowane data interfejs następnej lekcji pokaże
natomiast w jaki sposób zaimplementowane repozytorium.
BrandInterface.php · 1 min
<?php
declare(strict_types=1);
namespace Eduweb\Brand\Api\Data;
interface BrandInterface
{
const ID = 'id';
const NAME = 'name';
const URL_KEY = 'url_key';
/**
* @return int
*/
public function getId(): int;
/**
* @param int $id
* @return void
*/
public function setId(int $id): void;
/**
* @return string
*/
public function getName(): string;
/**
* @param string $name
* @return void
*/
public function setName(string $name): void;
/**
* @return string
*/
public function getUrlKey(): string;
/**
* @param string $urlKey
* @return void
*/
public function setUrlKey(string $urlKey): void;
}Brand.php - Klasa danych · 8 min
<?php
declare(strict_types=1);
namespace Eduweb\Brand\Model\Data;
use Eduweb\Brand\Api\Data\BrandInterface;
use Magento\Framework\DataObject;
class Brand extends DataObject implements BrandInterface
{
public function getId(): int
{
return $this->getData(self::ID);
}
public function setId(int $id): void
{
$this->setData(self::ID, $id);
}
public function getName(): string
{
return $this->getData(self::NAME);
}
public function setName(string $name): void
{
$this->setData(self::NAME, $name);
}
public function getUrlKey(): string
{
return $this->getData(self::URL_KEY);
}
public function setUrlKey(string $urlKey): void
{
$this->setData(self::URL_KEY, $urlKey);
}
}