7ebe772f
Name Last commit Last update
docker Update docker/DockerfilePHP
src Update src/composer.json
.gitignore new
README.md new
docker-compose.yml new

Laravel Logo

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".

Path mapping

Import do nového projektu krok 2

Zde vybereme "Repo by URL.

Path mapping

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

Path mapping

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');