Laravel template
Laravel je open-source PHP framework vytvořený Taylorem Otwellem za účelem vývoje webových aplikací založených na principu architektury model-view-controller (MVC). Výhody které Laravel nabízí, jsou různé knihovny, různé způsoby pro přístup k relačním databázím. Laravel má velkou komunitu.
Tento template je vhodné si naklonovat rovnou už v GitLabu, protože projekt už bude mít pojmenování podle vašeho přání. Součástí template je i konfigurace DOCKERU.
Import do nového projektu krok 1
Zde vybereme "Import projekt".
Import do nového projektu krok 2
Zde vybereme "Repo by URL.
Import do nového projektu krok 3
Vyplnění údajů pro import template do vašeho nového projektu:
1, Git repository URL - URL zdrojového repozitáře (můj template)
2, Username (optional) - vaše přihlašovací jméno
3, Password (optional) - vaše přihlašovací heslo
4, Project name - jméno nového projektu
5, Visibility Level - viditelnost projektu
Základní příkazy pro konfiguraci kontejnerů
Build image
docker-compose build
Toto by melo stahnout a nastavit vše potřebné
Sestaveni a spustení kontejnerů
docker-compose up -d nebo
docker-compose up -d --build
V tuto chvili by mel byt docker projekt ready na http://localhost:84 viz soubor docker-compose.yml, kde to jde i změnit. --build používáme pro přegenerování image kontejneru.
http://localhost:84
ukončení kontejnerů
docker-compose down
Potom je možné i na stejný port spustit jiný kontejner.
SQL databáze a adminer
Součásti konfigurace je SQL databáze a adminer. Najdeme jí na url:
http://localhost:84/adminer
Databáze mezi kontejnery je na portu 3306 viz soubor docker-compose.yml. Není potřeba psát do připojení k databázi IP a port. Stačí název service ze souboru docker-compose.yml vč. jména root a hesla.
mysqldb nebo laravel-mariadb-10.9.3
Neukládejte na Gitlab soubory DB, pouze sql dump. Jedná se o adresář ./data/database, který musí zůstat git ignore. Je možné si databázi přes adminer zálohovat a uložit do projektu jako soubor sql pro případ budoucího obnovení.
Seznam kontejnerů v aplikaci
Nginx
konfigurační soubor dockerfile
DockerfileNGINX
Webový server s reverzní proxy s otevřeným zdrojovým kódem. Pracuje s protokoly HTTP (HTTPS).
PHP
konfigurační soubor dockerfile
DockerfilePHP
PHP (rekurzivní zkratka PHP: Hypertext Preprocessor, česky „PHP: Hypertextový preprocesor“, původně Personal Home Page) je skriptovací programovací jazyk. Je určený především pro programování dynamických internetových stránek a webových aplikací například ve formátu HTML, XHTML či WML. PHP lze použít i k tvorbě konzolových a desktopových aplikací. Pro desktopové použití existuje kompilovaná forma jazyka.
MySQL - MariaDB
konfigurační soubor dockerfile
DockerfileMYSQL
MariaDB je relační databáze, která je komunitou vyvíjenou nástupnickou větví (tzv. „forkem“) MySQL. Hlavním důvodem k vytvoření této větve bylo udržení licence svobodného softwaru GNU GPL. Iniciativa, díky které tato větev vznikla, pochází od původních vývojářů MySQL, kteří se obávali o další osud a směřování tohoto softwaru po jeho odkoupení společností Oracle.[
Redis
konfigurační soubor dockerfile
DockerfileREDIS
Redis je úžasně jednoduché a při tom velmi mocné NoSQL in-memory key-value úložiště. Potřebujete akcelerovat vaší aplikaci jednoduše a při tom využít distribuované zdroje a současně mít redundanci nebo transakční ochranu? Tohle je úkol pro Redis.
Meilisearch
konfigurační soubor dockerfile
DockerfileMELISEARCH
Popisují se jako „otevřený zdroj, neuvěřitelně rychlý a hyperrelevantní vyhledávač, který zlepší váš zážitek z vyhledávání. Aktuální alternativy – Elasticsearch a Algolia.
Selenium Standalone Chrome - Selenium Docker
konfigurační soubor dockerfile
DockerfileCHROME
Spouštění testů Selenium v kontejnerech Docker podporuje provádění kontrol kódu agilnější rychlostí s kódem konvenčnější kvality. Výsledkem je produkt vynikající kvality.
MailHog
konfigurační soubor dockerfile
DockerfileMAILHOG
Potřebujete slepý vývojový SMTP server, který zachytí maily z aplikace či webu, ale už je nepředá dále? Pak vyzkoušejte MailHog. Funguje prakticky všude, je zadarmo a má webové rozhraní pro prohlížení zachycených zpráv.
Nastavení xdebug
Nastavení debug a portů:
Nastavení cesty k projektu a uvnitř kontejneru:
Routing
VŠE SPOUŠTÍME UVNITŘ KONTEJNERU.
Výpis rout v projektu
@laravel-php:/var/www/html$ php artisan route:list
Konfigurace routování
Výpis směrovací tabulky (router)
@laravel-php:/var/www/html$ php artisan route:list
Nastavení se provádí v adrrsáři routes.
/routes pro web /routes/web.php
Příklady nastavení routování web.php
1, přiklad automatického generování controlleru
Route::resource('/test', 'TestController')->only(['index', 'store', 'edit', 'update', 'destroy']);
nebo
Route::resource('/test', 'TestController')->except(['create', 'show']);
2, při vlastním nastavení jednotlivých akcí controlleru
/** controller homepage */
Route::get('/', 'App\Http\Controllers\HomepageController@default')->name('homepage_default');
Route::get('/detail/{id?}', 'App\Http\Controllers\HomepageController@detail')->name('homepage_detail');
Mazání cache
php artisan config:cache
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan view:cache
Vytvoření Controlleru
Samostatný Controller
php artisan make:controller HomepageController
Příklad vrácení šablony v Controlleru v akci např. default:
/**
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function detail(Request $request)
{
return view('homepage.detail', array(); // parametry předáváme jako pole, název šablony adresář.soubor bez blade.php
}
Controller vč. předdefinovaných metod
php artisan make:controller HomepageController --resource
Nastavení globálních proměnných
globalni variable AppServiceProvider
Šablonovací systém "Blade"
Šablony jsou v adresáři resources/views a pojmenování má formát nazevsablony.blade.php. Při volání šablon vynecháváme .blade.php. Když je šablona v podadresáří, voláme nazevadresare.nazevsablony bez blade a přípony.
dědění layoutové šablony:
@extends('nazevlayoutu')
označení bloku html contentu, co se includuje podle příslušné akce controlleru do layoutu:
@section('content')
// nejaké html pro content
@endsection
příklad vložení contentu jednotlivých stránek do layoutu:
@yield('content')
pro případ vložení nějakého js nebo css konkrétní stránky do layoutu:
@section('stylesheets')
@endsection
@section('javascripts')
@endsection
příklad výpisu proměnné v layoutu:
{{ $id }}
příklad generování odkazu na pojmenovanou routu, kterou vložíme třeba do href html tagu a pod:
{{ route('homepage_detail') }}
vložení js nebo css z příslušné šablony do layoutu:
@yield('javascripts')
@yield('stylesheets')
příklad podmínky v layoutu:
@if(is_iterable($data))
@endif
příklad cyklu v layoutu:
@foreach ($data as $key => $value)
{{$value.name}} // přístup v poli v cyklu
@if($loop->last) // v cyklu můžeme použít i iterátor.
<hr style="border: 1px solid red">
@endif
@endforeach
Databáze ORM
informace o databazi
php artisan db:show
informace o tabulce
php artisan db:table users
Vytvoří model src\app\models
php artisan make:model Product
Vytvoří model a migrační script src\app\models src\database\migrations
php artisan make:model Product -m
Migrační script migrujeme do db
php artisan migrate
Při změně migračního scriptu
php artisan migrate:refresh
Pro vrácení poslední migrace máme příkaz
php artisan migrate:rollback
Pridání indexu
$table->index('email');
Pro přejmenování indexu můžete použít renameIndex()
$table->renameIndex('email', 'mobile_no');
Pro odstranění indexu můžete použít dropIndex()
$table->dropIndex('email', 'mobile_no');
Migraci a kontroler lze vytvořit i zvlášť.
php artisan make:model Article
php artisan make:migration --create=articles create_articles_table
php artisan make:controller --model=Article ArticleController
Chcete-li vrátit zpět poslední operaci migrace.
php artisan migrate:rollback
Můžete vrátit zpět více počet migrací.
php artisan migrate:rollback --step=5
Reset vrátí zpět všechny migrace vaší aplikace.
php artisan migrate:reset
Tvorba formulářů
Pro stavbu formulářů využíváme formuláře vytvořené v html. Doplníme akorát validátory a nastavení dat při editaci formulářů.
Metody odesílání dat z formulářů:
Při tvorbě HTML formuláře máme k dispozici dvě metody, jak odeslat data zpět serveru: POST a GET. Data odeslaná metodou GET se stanou součástí URL, doplní se za otazník a jsou tedy vidět v adresním řádku prohlížeče. Používají se zejména pro vahledávací formuláře. Naopak metoda POST data odesílá odděleně od URL.
V laravelu můžeme nechat URL akce formuláře vygenerovat na nejakou akci Controlleru. Je možné i přidat nějaké proměnné např. id při editaci záznamu tak, aby došlo k editaci správného záznamu.
<form name="add-blog-post-form" id="add-blog-post-form" method="post" action="{{url('form-add', ["id"=>$id])}}">
Ochrana před cross-site request forgery:
Cross-site request forgery je velmi nebezpečná technika, kdy útočník na své stránce nebo stránce trpící XSS (Cross-site scripting) vyvolá požadavek do nějaké webové aplikace, ve které je napadený příhlášen. (GMail, e-Banking, administrace blogu).
Laravel má ochranu.
@csrf // umístíme do stránky pod začátek formuláře, tag "<form>"
Formulářové elementy
Příklad nastavení formulářového elementu, název a typ elementu pro textový input. Pod elementem span class=text-danger, je nastylovaná error hláška při chybném vyplnění formuláře a odeslaní.
<label for="name" class="form-label mt-4">Jmeno</label>
{{Form::text("name", null, array("class"=>"form-control", "placeholder"=>"Vypln jmeno"))}}
<span class="text-danger">@error("name"){{$message}}@enderror</span>
Příklad použití elementu select.
<label for="cities" class="form-label mt-4">Mesto</label>
{{Form::select("cities_id", $dataSelect, null, array("placeholder"=>"--- Vyber mesto ----", "class"=>"form-select"))}}
<span class="text-danger">@error("cities_id"){{$message}}@enderror</span>
Příklad použití elementu radio.
<label for="cities" class="form-label mt-4">Pohlavi</label>
{{Form::checkbox("sex", 1)}}
{{Form::checkbox("sex", 2)}}
<span class="text-danger">@error("sex"){{$message}}@enderror</span>
Globální validační hlášky
Příklad výpisu, když chci mít všechny chybové hlášky na jednom místě.
@if($errors->any())
@foreach($errors->all() as $key => $err)
<div class="alert alert-danger alert-dismissible fade show">
{{$err}}
</div>
@endforeach
@endif
Editace dat ve formuláři
Když chci editovat nějaký záznam v databázi, předám řádek dat z tabulky přes Controller do šablony. Pro kontrolu předám i id záznamu. Form:model nám umožní předaná data nastavit do formuláře.
@if($id)
{{ Form::model($address, ['route'=>'homepage_form_add','method'=>'POST']) }}
@endif
Nastavení routy pro POST data v Controlleru
Routa určuje kam se budou směrovat POST data. Nastavíme to v souboru routes/web.php např.
Route::post('/form-add/{id?}', 'App\Http\Controllers\HomepageController@form')->name('homepage_form');
Validace dat v Controlleru
U každého formuláře budeme potřebovat data kontrolovat zda nedošlo k chybnému vyplnění nějakého formulářového elementu. V případě chyby se formulář neodešle, a uživateli se zobrazí chybová hláška. Do akce Controlleru, kam formulář odesíláme přidáme toto:
$request->validate(array(
"name" => "required | min:5", // nutno vyplnit a min počet znaků je 5
"surname" => "required | max:5", // nutno vyplnit a max počet znaků je 5
"cities_id" => "required", // nutno vyplnit
"email" => "required | email", // nutno vzplnit email
));
úptava dat po odeslání formuláře
$request->validate(array(
$data = $request->input(); // vytahneme odeslaná data z requestu
unset($data['_token'], $data['send']); // vyhodíme netřebné věci value tlačítka a pod.
Příklad uložení odeslaných dat
\DB::table('addresses')
->updateOrInsert(
['id' => null],
$data
);
Přesmérování na stránku mimo formulář
Po uložení dat do tabulky v databázi přesměrujeme na jinou stranku a zobrazíme flashMessages.
return redirect(route("homepage_default"))->with('success', 'Data ulozena');