<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juraj Chovan</title>
    <description>The latest articles on DEV Community by Juraj Chovan (@jurajchovan).</description>
    <link>https://dev.to/jurajchovan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F929484%2F60e454c9-c2e3-4351-8a85-8b50ed9b9c91.jpg</url>
      <title>DEV Community: Juraj Chovan</title>
      <link>https://dev.to/jurajchovan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jurajchovan"/>
    <language>en</language>
    <item>
      <title>Laravel: autentifikačný package JetStream a odosielanie verifikačného mailu</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Mon, 09 Dec 2024 13:28:26 +0000</pubDate>
      <link>https://dev.to/jurajchovan/laravel-autentifikacny-package-jetstream-a-odosielanie-verifikacneho-mailu-2onn</link>
      <guid>https://dev.to/jurajchovan/laravel-autentifikacny-package-jetstream-a-odosielanie-verifikacneho-mailu-2onn</guid>
      <description>&lt;p&gt;Ak v Laravel aplikácii používam na správu používateľa (tj.registráciu, prihlásenie sa, odhlásenie, a pod.) autentifikačný package "JetStream", je možné tento nakonfigurovať tak, aby pri registrácii nového pouźívateľa odoslal verifikačný mail. Až po jeho potvrdení je registrovaný používateľ právoplatný a schopný sa korektne prihlásiť (a odhlásiť).&lt;/p&gt;

&lt;p&gt;0.) predpokladám, že mám vytvorenú základnú kostru Laravel aplikácie "LaravelApp" a táto je umiestnená v adresári "..\LaravelApp\".&lt;br&gt;
Tiež mám k dispozícii pripravenú MySQL databázu "db01", ktorú budem s touto aplikáciou používať.&lt;/p&gt;

&lt;p&gt;1.) najprv si nastavím v Laravel aplikácii "LaravelApp" použitie tejto databáze. V súbore ".env" si nastavím:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=****
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.) teraz si do aplikácie zinštalujem package "JetStream" - v aplikačnom/projektovom adresári spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/jetstream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čím sa tento package zinštaluje&lt;/p&gt;

&lt;p&gt;3.) je potrebné ešte spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan jetstream:install livewire
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo vytvorí migračné skripty, zinštaluje package "livewire/livewire" a (aktualizuje) niektoré ďalšie package, vypublikuje asset-y a vybuild-uje "vite v5.4.11" (12/2024) (pre produkciu)&lt;/p&gt;

&lt;p&gt;4.) pred spustením samotnej migrácie je potrebné ešte upraviť v súbore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\app\Providers\AppServiceProvider.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kód takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
use Illuminate\Support\Facades\Schema;
...
    public function boot(): void    {
        Schema::defaultStringLength(191);
    }
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a v konfiguračnom súbore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\config\database.php

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;upraviť kód:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;'connections' =&amp;gt; [
    ...
    'mysql' =&amp;gt; [
        ...
        'engine' =&amp;gt; 'InnoDB',
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to je preventívna oprava, lebo inak je pri migrácii vypisovaná chyba databázových štruktúr a dát:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5.) v prípade ak si potrebujem ešte zmeniť názov db-tabuľky do ktorej sa budú zapisovať registrovaní (a prihlásovaní) používatelia - viď postup uvedený v "&lt;a href="https://dev.to/jurajchovan/laravel-pristup-viacerych-aplikacii-na-rovnaku-databazu-7ml"&gt;Laravel: Prístup viacerých aplikácii na rovnakú databázu&lt;/a&gt;" v sekcii "C.) Tretia aplikácia "LaravelApp03" využivajúca JetStream package na autentifikáciu a manažovanie používateľa" (od bodu 5.)&lt;/p&gt;

&lt;p&gt;6.) a teraz je možné už spustiť migračné skripty, príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čím sa v databáze "db01" je vytvorená požadovaná db-tabuľka/y&lt;/p&gt;

&lt;p&gt;7.) a teraz je čas, nastaviť si/nakonfigurovať package "JetStream" tak aby odosielal verifikačné maily pri registrácii nového používateľa.&lt;br&gt;
V súbore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\config\fortify.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;si najprv odkomentovať vlastnosť "emailVerification()":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
    'features' =&amp;gt; [
        Features::registration(),
        Features::resetPasswords(),
        Features::emailVerification(),
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8.) a v súbore modelu "User":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\app\Models\User.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tiež pridať/odkomentovať použitie "MustVerifyEmail" a pridať do definície class-u:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
...
class User extends Authenticatable implements MustVerifyEmail   {
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9.) samozrejme musím mať v tejto Laravel aplikácii nastavené parametre na odosielanie mailov - napr.cez nejaký externý SMTP server/službu.&lt;br&gt;
Toto nastavenie bude definované v konfiguračnom súbore ".env", napr.ak používam službu "MailTrap.io" to môže byť niečo také:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=NejakyUcetNaMailTrapSluzbe
MAIL_PASSWORD=*****
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="NejakyMail@laravelapp.to"
MAIL_FROM_NAME="${APP_NAME}"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;10.) ak teraz spustím v aplikácii developovací server príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a spustiť v prehliadači URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;zobrazí sa bežiaca Laravel aplikácia, kde mám k dispozícii aj "Login" a "Register".&lt;br&gt;
Ak zaregistrujem nového používateľa, zobrazí sa na stránke info:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgwqepwum1ju4dsdwx2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgwqepwum1ju4dsdwx2c.png" alt="Image description" width="800" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;po verifikácii registrácie sa v db-tabuľke (pre info o registrovaných používateľoch) aktualizuje hodnota stlpca "email_verified_at", a registrovaný používateľ sa už vie priamo prihlásiť do tejto Laravel aplikácie.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>jetstream</category>
    </item>
    <item>
      <title>Laravel: Prístup viacerých aplikácii na rovnakú databázu</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Wed, 04 Dec 2024 17:13:35 +0000</pubDate>
      <link>https://dev.to/jurajchovan/laravel-pristup-viacerych-aplikacii-na-rovnaku-databazu-7ml</link>
      <guid>https://dev.to/jurajchovan/laravel-pristup-viacerych-aplikacii-na-rovnaku-databazu-7ml</guid>
      <description>&lt;p&gt;V prípade, že potrebujem na rovnakú databázu (v príklade nižšie používaná - MySQL) pristupovať z viacerých Laravel aplikácii, a to tak, aby každá z nich mala vlastnú db-tabuľku používateľov a vlastný autentifikačný mechanizmus (nezávislý od druhej aplikácie) tu je návod ako to urobiť.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A.) Prvá aplikácia "LaravelApp01" využivajúca JetStream autentifikáciu a manažovanie používateľa&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;1.) Najprv si vytvorím prvú Laravel aplikáciu, spustením príkazu&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer create-project laravel/laravel LaravelApp01
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a v podadresári "LaravelApp01" je vytvorená základná štruktúra Laravel aplikácie.&lt;/p&gt;

&lt;p&gt;2.) predpokladajme, že potrebnú MySQL databázu už mám vytvorenú (a volá sa "db01".&lt;/p&gt;

&lt;p&gt;3.) túto databázu si nastavím/pripojím na ňu aplikáciu "LaravelApp01", a to skonfigurovaním aplikačného/konfiguračného súboru ".env", kde si nastavím:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=****
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4.) táto prvá Laravel aplikácia bude používať autentifikáciu, registráciu a prihlasovanie cez package "JetStream", takže je potrebné si zinštalovať tento package do aplikácie "LaravelApp01" - v aplikačnom/projektovom adresári spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/jetstream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čím sa tento package zinštaluje&lt;/p&gt;

&lt;p&gt;5.) ak si teraz spustím developovací server príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a v prehliadači si zobrazím URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tj.úvodnú stránku aplikácie "LaravelApp01", vidím tam už aj "Log in" a "Register" odkaz, ale tieto ešte nefungujú. Aplikácia nevie nájsť "auth.login", resp."auth.register"&lt;/p&gt;

&lt;p&gt;6.) je potrebné ešte spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan jetstream:install livewire
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo vytvorí potrebné migračné skripty, zinštaluje sa package "livewire/livewire" a aktualizujú sa niektoré ďalšie package, a vypublikujú sa potrebné asset-y a vybuild-uje sa aplikácia&lt;/p&gt;

&lt;p&gt;7.) je potrebné spustiť migráciu, tj.vytvorenie potrebných db-tabuliek a modelov, príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a v databáze "db01" sú vytvorené db-tabuľky (6ks):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;failed_jobs&lt;/li&gt;
&lt;li&gt;migrations&lt;/li&gt;
&lt;li&gt;password_reset_tokens&lt;/li&gt;
&lt;li&gt;personal_access_tokens&lt;/li&gt;
&lt;li&gt;sessions&lt;/li&gt;
&lt;li&gt;users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;8.) ak teraz znovu spustím developovací server a URL aplikácie, už budú fungovať aj odkazy "Login" a "Register" a aj funkcionalita skrývajúca sa za nimi, tj.viem sa zaregistrovať a následne prihlásiť (a potom aj odhlásiť z aplikácie).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B.) Druhá aplikácia "LaravelApp02" využivajúca Bootstrap/UI autentifikáciu a manažovanie používateľa&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;1.) opäť podobným spôsobom vytvorím aj druhú Laravel aplikáciu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer create-project laravel/laravel LaravelApp02
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a v podadresári "LaravelApp02" je vytvorená základná štruktúra Laravel aplikácie.&lt;/p&gt;

&lt;p&gt;2.) aplikácia "LaravelApp02" bude tiež napojená na rovnakú databázu, takže nastavenie v súbore ".env" bude tiež:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=***
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.) táto druhá Laravel aplikácia "LaravelApp02" bude na autentifikáciu a manažovanie používateľov používať package "bootstrap/ui"&lt;/p&gt;

&lt;p&gt;4.) ale ešte pred tým, je potrebné si premenovať názov db-tabuľky, do ktorej si bude táto druhá aplikácia ukladať svojích používateľov (prvá aplikácia "LaravelApp01" má pre tento účel zriadenú default-nú db-tabuľku "users").&lt;br&gt;
Pre druhú aplikáciu si zvolíme napr.názov "admins".&lt;/p&gt;

&lt;p&gt;5.) nájsť si súbor migrácie pre "users":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\database\migrations\2014_10_12_000000_create_users_table.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a tu zeditovať kód takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
return new class extends Migration  {
    public function up(): void    {
        Schema::create('admins', function (Blueprint $table) {
            $table-&amp;gt;id();
            $table-&amp;gt;string('name');
            $table-&amp;gt;string('email')-&amp;gt;unique();
            $table-&amp;gt;timestamp('email_verified_at')-&amp;gt;nullable();
            $table-&amp;gt;string('password');
            $table-&amp;gt;rememberToken();
            $table-&amp;gt;timestamps();
        });
    }
    public function down(): void    {
        Schema::dropIfExists('admins');
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6.) prípadne - ak potrebujem, môžem doplniť nejaké ďalšie atribúty/stlpce, napr.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
    $table-&amp;gt;string('BusinessName');
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7.) a ešte, kvôli konzistencii je potrebné vhodne premenovať aj tento súbor, tj.pôvodný názov:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\database\migrations\2014_10_12_000000_create_users_table.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;zmeniť na:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\database\migrations\2014_10_12_000000_create_admins_table.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8.) teraz je čas zinštalovať package "bootstrap/ui" do aplikácie "LaravelApp02" - v aplikačnom/projektovom adresári spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a následne spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan ui bootstrap --auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a na koniec ešte odporúčajú spustiť:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install &amp;amp;&amp;amp; npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9.) a teraz spustiť migračné súbory príkazom:&lt;br&gt;
php artisan migrate&lt;br&gt;
a v databáze "db01" sú vytvorené iba dve nové db-tabuľky:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;admins&lt;/li&gt;
&lt;li&gt;password_resets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;db-tabuľka "admins" bude slúžiť na správu používateľov Laravel aplikácie "LaravelApp02"&lt;/p&gt;

&lt;p&gt;10.) ešte je potrebné zmeniť/doplniť v modeli "User":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\app\Models\User.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kód takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
class User extends Authenticatable  {
    use HasApiTokens, HasFactory, Notifiable;
    protected $table = 'admins';
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;11.) a ak som v migrácii (viď krok 6.) doplňal nejaký nový atribút, je potrebné ho doplniť aj tu v modeli:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
    protected $fillable = [
        'name',
        'email',
        'password',
        'BusinessName',
    ];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;12.) doplniť ešte do súboru:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\config\auth.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;takýto kód:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
return [
    'table' =&amp;gt; 'admins',
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;13.) a aby fungovali zápisy vkladaných hodnôt pri registrácii, je potrebné ešte zeditovať v súbore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\app\Http\Controllers\Auth\RegisterController.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kód takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
    protected function validator(array $data)    {
        return Validator::make($data, [
            'name' =&amp;gt; ['required', 'string', 'max:255'],
            'email' =&amp;gt; ['required', 'string', 'email', 'max:255', 'unique:admins'],
            'password' =&amp;gt; ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;14.) ak teraz v tejto druhej Laravel aplikácii "LaravelApp02" spustím developovací server a dám si zobraziť úvodnú stránku aplikácie, tj.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;mám na stránke odkazy "Login" a "Register" a funkcionalita pod nimi funguje, viem sa zaregistrovať a prihlásiť (a aj odhlásiť) a údaje o registrovanom používateľovi sa zapisujú do db-tabuľky "admins"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C.) Tretia aplikácia "LaravelApp03" využivajúca JetStream package na autentifikáciu a manažovanie používateľa&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;A vytvorím si ešte aj tretiu Laravel aplikáciu "LaravelApp03", ktorá bude používať (rovnako ako package "LaravelApp01") "JetStream" package na autentifikáciu používateľa.&lt;/p&gt;

&lt;p&gt;1.) vytvorím si tretiu aplikáciu príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer create-project laravel/laravel LaravelApp03
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.) v súbore ".env" si nastavím potrebnú databázu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=***
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.) v databáze "db01" mám v tomto momente už vytvorené db-tabuľky:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;admins        (používatelia pre druhú aplikáciu "LaravelApp02")&lt;/li&gt;
&lt;li&gt;failed_jobs&lt;/li&gt;
&lt;li&gt;migrations&lt;/li&gt;
&lt;li&gt;password_resets   (resetovanie hesiel pre druhú aplikáciu "LaravelApp02")&lt;/li&gt;
&lt;li&gt;password_reset_tokens&lt;/li&gt;
&lt;li&gt;personal_access_tokens&lt;/li&gt;
&lt;li&gt;sessions&lt;/li&gt;
&lt;li&gt;users     (používatelia pre prvú aplikáciu "LaravelApp01")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;a tretia Laravel aplikácia "LaravelApp03" bude mať samostatnú db-tabuľku pre svojích používateľov, napr."members"&lt;/p&gt;

&lt;p&gt;4.) v tretej aplikácii si zinštalovať package "JetStream" príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/jetstream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nasleduje príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan jetstream:install livewire
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo vytvorí migračné skripty, zinštaluje package "livewire/livewire" a (aktualizuje) niektoré ďalšie package, a vypublikuje asset-y a vybuild-uje aplikáciu.&lt;/p&gt;

&lt;p&gt;5.) v existujúcom migračnom skripte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\database\migrations\2014_10_12_000000_create_users_table.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;si upraviť kód - zmena názvu db-tabuľky z "users" na "members":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
return new class extends Migration  {
    public function up(): void    {
        Schema::create('members', function (Blueprint $table) {
            $table-&amp;gt;id();
            $table-&amp;gt;string('name');
            $table-&amp;gt;string('email')-&amp;gt;unique();
            $table-&amp;gt;timestamp('email_verified_at')-&amp;gt;nullable();
            $table-&amp;gt;string('password');
            $table-&amp;gt;rememberToken();
            $table-&amp;gt;foreignId('current_team_id')-&amp;gt;nullable();
            $table-&amp;gt;string('profile_photo_path', 2048)-&amp;gt;nullable();
            $table-&amp;gt;timestamps();
        });
    }
    public function down(): void    {
        Schema::dropIfExists('members');
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6.) a kvôli konzistencii si premenovať aj tento migračný súbor, tj.z:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\database\migrations\2014_10_12_000000_create_users_table.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;premenovať na:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\database\migrations\2014_10_12_000000_create_members_table.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7.) teraz možno spustiť samotnú migráciu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a v databáze "db01" je vytvorená nová db-tabuľka "members"&lt;/p&gt;

&lt;p&gt;8.) ešte je potrebné zmeniť/doplniť v modeli "User":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\app\Models\User.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;doplniť názov db-tabuľky s ktorou má pracovať:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
class User extends Authenticatable  {
    use HasApiTokens;
    use HasFactory;
    ...
    protected $table = 'members';
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;9.) a doplniť ešte do súboru:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\config\auth.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;odkaz/referenciu na používanú db-tabuľku:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php
return [
    'table' =&amp;gt; 'members',
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;10.) ak teraz spustím developovací server v rámci tretej aplikácie "LaravelApp03" a v prehliadači URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;viem sa registrovať (a následne aj prihlásiť) do tejto Laravel aplikácie, a data sa zapisujú do db-tabuľky "members"&lt;/p&gt;

&lt;p&gt;11.) mám takto vytvorené tri nezávislé aplikácie "LaravelApp01", "LaravelApp02" a "LaravelApp03", každá z nich má vlastný autentifikačný systém ("LaravelApp01" a "LaravelApp03" majú package "JetStream" a "LaravelApp02" má "bootstrap/ui") a každá z nich si svojích používateľov uchováva v samostatnej db-tabuľke ("LaravelApp01" v db-tabuľke "users", "LaravelApp02" v db-tabuľke "admins" a "LaravelApp03" v db-tabuľke "members"). Zároveň ostatné db-tabuľky (a data) môžem rovnocenne použiť vo všetkých troch aplikáciách.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>jetstream</category>
    </item>
    <item>
      <title>Build-ovanie Ionic (ver.6) aplikácie pre Google Store</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Wed, 22 Feb 2023 11:33:28 +0000</pubDate>
      <link>https://dev.to/jurajchovan/build-ovanie-ionic-ver6-aplikacie-pre-google-store-5al2</link>
      <guid>https://dev.to/jurajchovan/build-ovanie-ionic-ver6-aplikacie-pre-google-store-5al2</guid>
      <description>&lt;p&gt;V nasledujúcom postupe je ukázané ako vybuild-ovať Ionic (ver.6) aplikáciu až do podoby vhodnej na publikovanie v Google PlayStore.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Príprava Ionic aplikácie a nastavení:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Projekt Ionic aplikácie mám fyzicky umiestnený v nejakom lokálnom adresári, napr.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Projects\Ionic\Ionic6App_(verX)\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte5yys1kgqu0cf2r7jft.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fte5yys1kgqu0cf2r7jft.PNG" alt=" " width="537" height="326"&gt;&lt;/a&gt;&lt;br&gt;
V tejto Ionic aplikácii (nejakým spôsobom) využívam Capacitor geolokačný plugin.&lt;/p&gt;

&lt;p&gt;Prvým krokom je pridanie príslušnej platformy (android, ios, ...) do projektu Ionic aplikácie. Vykonať to spustením príkazu (v prípade pridania platformy "android"):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic capacitor add android
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi69c5bc1uo68jntsq6yi.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi69c5bc1uo68jntsq6yi.PNG" alt=" " width="800" height="410"&gt;&lt;/a&gt;&lt;br&gt;
Zbehnutím tohto príkazu je vytvorený v projekte nový adresár "android" s príslušným obsahom:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzddks127v25o44f8d8c.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzddks127v25o44f8d8c.PNG" alt=" " width="524" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ak si potrebujem zistiť aké verzie jednotlivých nástrojov a knižníc aktuálne v projekte používam, spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic info
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjopbk000srj51griuqoq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjopbk000srj51griuqoq.PNG" alt=" " width="800" height="554"&gt;&lt;/a&gt;&lt;br&gt;
zistiť verziu knižnice Cordova (rovnako ako novší "Capacitor" sprostredkúva natívne funkcionality mobilného zariadenia):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cordova -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na build-ovanie Ionic aplikácie potrebujem mať zinštalovaný IDE "Android Studio" a tiež nástroj "Gradle" a (samozrejme) Javu.&lt;br&gt;
Zistím si ešte verziu aktuálne dostupného "Gradle" nástroja:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gradle -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a verziu Javy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java -version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj61kf20vrye2x0zqd9fs.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj61kf20vrye2x0zqd9fs.PNG" alt=" " width="743" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ďalším krokom je nastavenie vyžiadania povolení vo vybuild-ovanej aplikácii (to je to, ak si spustím potom hotovú, nainštalovanú aplikáciu už na mobilnom zariadení, tak ma požiada o povolenie využívať napr.polohu zariadenia, prístup na galériu, fotoaparát, atď.). Toto nastavenie musim doplniť v súbore projektu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...\android\app\src\main\AndroidManifest.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;kde je potrebné v časti "Permissions" pridať nasledujúce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ...
    &amp;lt;!-- Geolocation API --&amp;gt;
    &amp;lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&amp;gt;
    &amp;lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&amp;gt;
    &amp;lt;uses-feature android:name="android.hardware.location.gps" /&amp;gt;
    &amp;lt;!-- Network API --&amp;gt;
    &amp;lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&amp;gt;
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teraz si nastaviť verziu kódu aplikácie - každý ďalší release, ktorý publikujem na Google Store/Play musí mať rozdielný kód kódu. Toto nastaviť/zeditovať v súbore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...\android\app\build.gradle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;asi takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    defaultConfig {
        applicationId "eu.bigoo.pocasicko"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 5
        versionName "4.1"
        ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;parameter "versionName" je informácia, ktorá sa zobrazí pre používateľov aplikácie, a parameter "versionCode" je interné číslo pre release manažment v Google.&lt;/p&gt;

&lt;p&gt;Posledným nastavením je zmena parametrov "minSdkVersion", "compileSdkVersion", "targetSdkVersion" a "cordovaAndroidVersion" opäť v súbore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...\android\app\build.gradle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;resp.v súbore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...\android\variables.gradle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;asi takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ext {
    minSdkVersion = 26
    compileSdkVersion = 33
    targetSdkVersion = 33
    ...
    cordovaAndroidVersion = '10.1.1'
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poznámka: Info o tom akú verziu použiť možno nájsť na &lt;a href="https://apilevels.com/" rel="noopener noreferrer"&gt;tu&lt;/a&gt; resp.&lt;a href="https://cordova.apache.org/docs/en/11.x/guide/platforms/android/" rel="noopener noreferrer"&gt;tu&lt;/a&gt;.&lt;br&gt;
Týmto by sme mali mať všetko pripravené na spustenie procesu build-ovania Ionic aplikácie.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build-ovanie aplikácie:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Spusiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic capacitor build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;je potrebné vybrať platformu, pre ktorú chcem vybuild-ovať aplikáciu (v mojom prípade je to "android"):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F898y0ctg5o5yzelyvh8v.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F898y0ctg5o5yzelyvh8v.PNG" alt=" " width="597" height="129"&gt;&lt;/a&gt;&lt;br&gt;
build-ovaním projektu, vytvorí sa ďalší nový adresár "www":&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihykb867v8259kfiwhgx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihykb867v8259kfiwhgx.PNG" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;br&gt;
a spustí sa "Android Studio" do ktorého sa naload-uje projektová adresárova štruktúra aj s celým obsahom:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e462uh5lsfif8oluoax.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e462uh5lsfif8oluoax.PNG" alt=" " width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;V "Android Studio" sa cez menu "SDK Manager" v zobrazenom okne "Settings", v záložke "SDK Platforms" pozrieť aké verzie/platformy android-u mám k dispozícii (a prípadne si doinštalovať ďalšie potrebné):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjic7xq7d12u4nbeqtv3i.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjic7xq7d12u4nbeqtv3i.PNG" alt=" " width="800" height="457"&gt;&lt;/a&gt;&lt;br&gt;
a v záložke "SDK Tools", ktoré nástroje mám:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkyjeb729bkfgxvuk1cs.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkyjeb729bkfgxvuk1cs.PNG" alt=" " width="800" height="464"&gt;&lt;/a&gt;&lt;br&gt;
Teraz si v "Android Studio" cez menu "File - Project structure", v zobrazenom dialogu "Project structure" v časti "Modules" pozrieť v záložke "Properties", prípadne ešte nastaviť parametre "Compile Sdk Version", "Source compatibility", "Target compatibility" (ktoré sme už nastavovali predtým v konfiguračnom súbore):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2i2yhn8746xa4xuresrl.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2i2yhn8746xa4xuresrl.PNG" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;br&gt;
a v záložke "Default config" skontrolovať/nastaviť parametre verzie kódu a ďalšie:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb74bacy47ru1a00scufa.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb74bacy47ru1a00scufa.PNG" alt=" " width="800" height="416"&gt;&lt;/a&gt;&lt;br&gt;
A teraz spustiť samotný build-ovací proces - cez menu "Build - Generate Signed Bundle/APK ..." a otvorí sa dialog "Generate Signed Bundle or APK", kde v prvom kroku vybrať verziu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Android App Bundle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo je formát, ktorý je najnovšie podporovaný samotným Google Store/Play deployment manažmentom.&lt;br&gt;
V ďalšom kroku nastaviť požadované parametre:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4zk4tsljaods7ohekvn.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo4zk4tsljaods7ohekvn.PNG" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
Nasleduje výber vybuild-ovanej varianty aplikácie:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7moj518rlwwzzd838v2.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7moj518rlwwzzd838v2.PNG" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;br&gt;
a konečne spustiť build-ovací proces cez [Create].&lt;br&gt;
Po nejakej chvíli, a ak všetko zbehne v poriadku:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff57thxddfiooxxzjn80i.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff57thxddfiooxxzjn80i.PNG" alt=" " width="800" height="587"&gt;&lt;/a&gt;&lt;br&gt;
a v adresári:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...\android\app\release\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;sa objaví súbor "app-release.aab", ktorý odporúčam premenovať na názov aplikácie, napr."Ionic6App.aab".&lt;br&gt;
Tento súbor je pripravený na vypublikovanie na GoogleStore/Play.&lt;br&gt;
...&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>Problém s build-ovaním Ionic (ver.5 s použitím Cordova) aplikácie</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Wed, 18 Jan 2023 08:58:52 +0000</pubDate>
      <link>https://dev.to/jurajchovan/problem-s-build-ovanim-ionic-ver5-s-pouzitim-cordova-aplikacie-1ck</link>
      <guid>https://dev.to/jurajchovan/problem-s-build-ovanim-ionic-ver5-s-pouzitim-cordova-aplikacie-1ck</guid>
      <description>&lt;p&gt;Ak v Ionic (ver.5) používam pluginy frameworku Cordova (napr.geolokačný plugin), narazil som na problém s následným vybuild-ovaním celého projektu do "*.apk" súboru.&lt;br&gt;
Príkaz na pridanie platformy "android" do projektu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic cordova platform add android
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;zbehol bez problémov:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W8cNSW7L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cx0jtgggkdw4kcptm34c.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W8cNSW7L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cx0jtgggkdw4kcptm34c.PNG" alt="Image description" width="510" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mza4HYZ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7hqi4ti8stav4dg9bkbo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mza4HYZ8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7hqi4ti8stav4dg9bkbo.PNG" alt="Image description" width="743" height="634"&gt;&lt;/a&gt;&lt;br&gt;
Ale nasledujúci príkaz, na vybuild-ovanie takéhoto Ionic projektu do *.apk súboru:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic cordova build android
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nebol úspešný:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fW3jmjgP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5nzqfw67h6cvqom9cjc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fW3jmjgP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e5nzqfw67h6cvqom9cjc.PNG" alt="Image description" width="757" height="195"&gt;&lt;/a&gt;&lt;br&gt;
Len pre úplnosť doplním verzie jednotlivých framework-ov a nástrojov používaných v tomto projekte:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dRfZKTUc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nrswmu6k0aemiqu5mtk8.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dRfZKTUc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nrswmu6k0aemiqu5mtk8.PNG" alt="Image description" width="348" height="193"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Riešenie tohto problému je trochu zlozitejšie, ale skúsim ho popísať.&lt;/p&gt;

&lt;p&gt;1.) je potrebné mať zinštalované JDK (Java Development Kit) (použil som veriu 1.8.0 (01/2023), build-ovací nástroj "Gradle" a odporúčam mať (pre jednoduchšiu správu Android SDK verzii a nástrojov) aj "Android Stuio".&lt;br&gt;
2.) pokiaľ tieto veci už nemáme zinštalované, tak postupovať takto:&lt;br&gt;
zo &lt;a href="https://www.oracle.com/java/technologies/downloads/#java8-windows"&gt;stránky&lt;/a&gt; si stiahnúť (pre Windows 64bit) súbor "jdk-8u351-windows-x64.exe".&lt;br&gt;
Poznámka: je potrebné mať na Oracle nejaký účet, aby sa dali sťahovať nejaké súbory.&lt;br&gt;
3.) spustiť inštaláciu, tento súbor "jdk-8u351-windows-x64.exe" a ja som si nastavil cieľový adresár:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Program Files\Java\jdk1.8.0_351\
C:\Program Files\Java\jre1.8.0_351\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4.) overiť správnosť inštalácie, spustením príkazu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java -version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo vypíše verziu Java: 1.8.0_35&lt;br&gt;
5.) teraz si zinštalovať build-ovací nástroj "Gradle", ktorý si stiahnem zo &lt;a href="https://gradle.org/install/"&gt;stránky&lt;/a&gt;.&lt;br&gt;
Inštalácia spočíva iba v rozbalení balika do vhodného adresára, ja som si to dal do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Gradle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;6.) teraz si zinštalovať "Android Studio", resp.aspoň SDK Platform komponenty a nástroje. Asi najjednoduchšie sa tieto komponenty pridávajú a manažujú práve cez "Android Studio", takže moja voľba padla práve na "Android Studio" (v 01/2023 to bol súbor "android-studio-2022.1.1.19-windows.exe").&lt;br&gt;
"Android Studio" si stiahnúť zo &lt;a href="https://developer.android.com/about/versions/11/setup-sdk"&gt;stránky&lt;/a&gt;, resp.priamo zo &lt;a href="https://developer.android.com/studio"&gt;stránky&lt;/a&gt;.&lt;br&gt;
V inštalácii som zaškrtol komponenty "Android Studio" a "Android Virtual Device" (to budem neskôr používať pri ladení Ionic aplikácii cez android emulátor).&lt;/p&gt;

&lt;p&gt;7.) po zinštalovaní "Android Studio" si cez ikonku "SDK Manager" nastaviť (v záložke "SDK Platform" ktoré android verzie budem chcieť používať):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yxqq_SzP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09hfdgh9al0bx60g5ifd.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yxqq_SzP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09hfdgh9al0bx60g5ifd.PNG" alt="Image description" width="880" height="661"&gt;&lt;/a&gt;&lt;br&gt;
8.) a v záložke "SDK Tools" si zase vybrať požadované nástroje (je potrebné vybrať aj "Android SDK Build-Tools, ver.30.0.3"):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--50Q8Tl6Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ll78q83uskim9omvjpdv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--50Q8Tl6Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ll78q83uskim9omvjpdv.PNG" alt="Image description" width="880" height="672"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;9.) odporúčam tiež prekontrolovať nastavenia pre javu vo Windows systémových premenných:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jTz0PMTa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p5pzmtn1un1ydbrde2xa.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jTz0PMTa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p5pzmtn1un1ydbrde2xa.PNG" alt="Image description" width="629" height="592"&gt;&lt;/a&gt;&lt;br&gt;
tj.nastavenie premennej "JAVA_HOME" a potom nastavenie v "Path":&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--McLo10iZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57yas8qwev9m3jvwea8c.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--McLo10iZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/57yas8qwev9m3jvwea8c.PNG" alt="Image description" width="636" height="719"&gt;&lt;/a&gt;&lt;br&gt;
10.) teraz poďme naspäť do Ionic projektu - je potrebné spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @ionic/cordova-builders
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;11.) a v Ionic projektovom súbore "angular.json" doplniť nasledujúce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "app": {
      "projectType": "application",
      "schematics": {},
      "root": "",
      "sourceRoot": "src",
      "prefix": "app",
      "architect": {
     // ... TOTO DOPLNIŤ na koniec sekcie "architect": 
        "ionic-cordova-build": {
          "builder": "@ionic/cordova-builders:cordova-build",
          "options": {
            "browserTarget": "app:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "app:build:production"
            }
          }
        },
        "ionic-cordova-serve": {
          "builder": "@ionic/cordova-builders:cordova-serve",
          "options": {
            "cordovaBuildTarget": "app:ionic-cordova-build",
            "devServerTarget": "app:serve"
          },
          "configurations": {
            "production": {
              "cordovaBuildTarget": "app:ionic-cordova-build:production",
              "devServerTarget": "app:serve:production"
            }
          }
        } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;12.) ešte spustiť príkaz, ktorý prekontroluje požiadavky, ktoré má framework "Cordova":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cordova requirements
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--igrL-pvR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yu2nq8b35jcihs0cobmk.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--igrL-pvR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yu2nq8b35jcihs0cobmk.PNG" alt="Image description" width="512" height="135"&gt;&lt;/a&gt;&lt;br&gt;
13.) a teraz už je možné (opäť) spustiť príkaz na vybuild-ovanie Ionic projektu do android APK súboru:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic cordova build android
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo by už malo zbehnúť:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fsC8_0fq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wj1z51mbgsg1s1xn8aj.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fsC8_0fq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8wj1z51mbgsg1s1xn8aj.PNG" alt="Image description" width="848" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kECQF_AW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmr7rsjt7t12pt41envh.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kECQF_AW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vmr7rsjt7t12pt41envh.PNG" alt="Image description" width="855" height="674"&gt;&lt;/a&gt;&lt;br&gt;
14.) po úspešnom vykonaní, je vytvorený (konečne) súbor APK, tj.vybuild-ovaná Ionic (ver.5) aplikácia (používajúca Cordova pluginy) - tento súbor nájdeme v adresári projektu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;..\platforms\android\app\build\outputs\apk\debug\
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hgTGVBwm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/anq70df8i85tpsv0qy4s.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hgTGVBwm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/anq70df8i85tpsv0qy4s.PNG" alt="Image description" width="478" height="123"&gt;&lt;/a&gt;&lt;br&gt;
...&lt;/p&gt;

</description>
      <category>ionic</category>
      <category>cordova</category>
      <category>build</category>
    </item>
    <item>
      <title>Ako v Ionic (ver.5) pridať funkciu zistenia vlastnej polohy (geolokácia) (elegantnejšie)</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Fri, 06 Jan 2023 09:06:47 +0000</pubDate>
      <link>https://dev.to/jurajchovan/ako-v-ionic-ver5-pridat-funkciu-zistenia-vlastnej-polohy-geolokacia-elegantnejsie-4577</link>
      <guid>https://dev.to/jurajchovan/ako-v-ionic-ver5-pridat-funkciu-zistenia-vlastnej-polohy-geolokacia-elegantnejsie-4577</guid>
      <description>&lt;p&gt;V &lt;a href="https://dev.to/jurajchovan/ako-v-ionic-ver5-pridat-funkciu-zistenia-vlastnej-polohy-geolokacia-3bc"&gt;predchádzajúcom článku&lt;/a&gt; je popísanie implementácie geolokačného pluginu Cordova do Ionic (ver.5) aplikácie.&lt;br&gt;
Teraz popíšem malú úpravu - presunutie tejto funkcionality z konkrétnej stránky do servisu. Výhodou je samozrejme to, že ak potrebujeme zisťovať GPS polohu cez tento Cordova plugin z viacerých stránok aplikácie, nie je potrebné opakovať tento kód v každej z týchto stránok, ale iba urobiť volanie funkcie zo servisu.&lt;br&gt;
Inštalácia knižníc a plugin-ov je rovnaká (ak to ešte nemáme v aplikácii, projekte nainštalované) ako je popísané v predchádzajúcom článku.&lt;br&gt;
Takisto je potrebné, rovnako - doplniť potrebnú referenciu a provider aj do súboru "app.module.ts".&lt;br&gt;
Zmena prichádza až v tomto bode.&lt;/p&gt;

&lt;p&gt;Ak už mám vytvorený v aplikácii nejaký servis použijem ho (ak nie vytvorím si servis nový, viď napr.&lt;a href="https://dev.to/jurajchovan/pridanie-servisu-do-ionic-aplikacie-4o5d"&gt;článok&lt;/a&gt;).&lt;br&gt;
V súbore tohto servisu doplniť nasledujúci kód:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ...
import { Geolocation } from '@ionic-native/geolocation/ngx';
    locationCordinates = Array();
        ...
  constructor(
    ...
    private geolocation: Geolocation
  ) { }
  // zisti aktualnu polohu (pomocou cordova geolocation pluginu):
  async getUserCoordinates() {
    await this.geolocation.getCurrentPosition().then(
      (resp) =&amp;gt; {
        // naplni pole hodnot, ktore bude odovzdavat naspat:
        this.locationCordinates.push(resp.coords['latitude']);
        this.locationCordinates.push(resp.coords['longitude']);
      }
    ).catch(
      (error) =&amp;gt; {
        console.log('Error getting location', error);
      }
    );
    return this.locationCordinates;
  }
        ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a na stránke, kde chceme využiť túto funkcionalitu, napr.na stránke "home", tj.v súbore "home.page.ts" je potrebné doplniť:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ...
import { PozadovanyService } from 'src/app/services/weather.service';
        ...
export class HomePage implements OnInit {
  locationCordinates: any;
  latCoords: number = 48.659052;  // default-na hodnota GPS latitude: Bohdanovce 369
  lngCoords: number = 21.399222;  // default-na hodnota GPS longitude: Bohdanovce 369
  pageContent = null;
        ...
  constructor(
    private weatherService: WeatherService,
  ) {}
  // inicializacia stranky:
  ngOnInit()  {
    this.getLocation();
  }
  // tlacitko [Get location] - zisti aktualnu polohu pouzivatela (cez servis):
  getLocation() {
    this.locationCordinates = this.weatherService.getUserCoordinates().then(
      (result) =&amp;gt; {
        // console.log('getLocation: result: '+result);
        this.latCoords = result[0];
        this.lngCoords = result[1];
        console.log('getLocation: lat/lng: '+this.latCoords+'/'+this.lngCoords);
      }
    ).catch(
      (error) =&amp;gt; {
        console.log('Error getting location', error);
      }
    );
  }
        ...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Funkcionalita je vykonaná s načítaním (inicializáciou stránky), ale tiež je možné túto funkciu "getLocation()" volať aj pri stisnutí tlačítka na stránke (tj."home.page.html" mám niekde definované tlačítko):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ...
&amp;lt;ion-button color="primary" shape="round" (click)="getLocation()"&amp;gt;Get location&amp;lt;/ion-button&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...&lt;/p&gt;

</description>
      <category>ionic</category>
      <category>cordova</category>
    </item>
    <item>
      <title>Ako v Ionic (ver.5) pridať funkciu zistenia vlastnej polohy (geolokácia)</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Wed, 04 Jan 2023 08:30:55 +0000</pubDate>
      <link>https://dev.to/jurajchovan/ako-v-ionic-ver5-pridat-funkciu-zistenia-vlastnej-polohy-geolokacia-3bc</link>
      <guid>https://dev.to/jurajchovan/ako-v-ionic-ver5-pridat-funkciu-zistenia-vlastnej-polohy-geolokacia-3bc</guid>
      <description>&lt;p&gt;V nasledujúcom je popísaný (asi najjednoduchší) spôsob, ako do Ionic (ver.5) aplikácie pridať geolokáciu (tj.zistenie vlastnej GPS polohy.&lt;br&gt;
Buď už mám nejakú existujúcu Ionic aplikáciu, alebo si ju vytvorím, príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic start Test004 blank --type=angular
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;V pracovnom adresári tejto Ionic aplikácie je teraz potrebné spustiť príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic cordova platform add android
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo pridá (do našej aplikácie) možnosť využitia frameworku "cordova" (je to knižnica, ktorá sprístupňuje niektoré nízkoúrovňové operácie, napr.kameru, senzory lokácie, ... v mobilnom zariadení).&lt;br&gt;
Týmto si pripravíme používanie "cordova" platformy a nasleduje inštalácia geolokačného pluginu, inŠtalujeme ho príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic cordova plugin add cordova-plugin-geolocation --save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ešte spustiť ďalší príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --save @ionic-native/geolocation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;resp.ak vypisuje nejaké chyby v závislostiach (zvyčajne na knižnici "rxjs", tak to spustiť opakovane s parametrom "--force":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --save @ionic-native/geolocation --force
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tým sme zinštalovali všetky potrebné doplňujúce knižnice.&lt;br&gt;
Možno teraz spustiť samotnú Ionic aplikáciu, príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a v prehliadači uvidíme:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BpOQDagF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g9t51mj60np2yvhj070e.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BpOQDagF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g9t51mj60np2yvhj070e.PNG" alt="Image description" width="567" height="298"&gt;&lt;/a&gt;&lt;br&gt;
A teraz nasleduje samotné kódovanie (nebude ho veľa). V tomto testovacom prípade si iba ukážeme ako na hlavnej stránke tejto Ionic aplikácie bude tlačítko, po ktorého stlačení sa vypíše v konzole informácia z geolokačného cordova plugin-u - aj s GPS súradnicami.&lt;br&gt;
Do aplikačného súboru "app.module.ts" doplniť import triedy "Geolocation" z knižnice "@ionic-native/geolocation/ngx" a pridanie tejto triedy medzi "providers", tj.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';

import { Geolocation } from '@ionic-native/geolocation/ngx';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
  providers: [
    Geolocation,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
    ],
  bootstrap: [AppComponent],
})
export class AppModule {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A teraz v súboroch stránky "home" doplniť potrebné - najprv si upraviť v súbore layout-u stránky, tj.v "home.page.html" tlačítko s volaním funkcie:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
&amp;lt;ion-content [fullscreen]="true"&amp;gt;
  ...
  &amp;lt;div id="container"&amp;gt;
    &amp;lt;ion-button expand="full" color="primary" shape="round" (click)="getLocation()"&amp;gt;Refresh location info&amp;lt;/ion-button&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/ion-content&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A v súbore logiky stránky, tj.v "home.page.ts" doplniť:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Component } from '@angular/core';

import { Geolocation ,GeolocationOptions ,Geoposition ,PositionError } from '@ionic-native/geolocation/ngx'; 

@Component({
  selector: 'app-home',
  templateUrl: 'home.page.html',
  styleUrls: ['home.page.scss'],
})
export class HomePage {

  locationCordinates: any;

  constructor(
    private geolocation : Geolocation
  ) {  }
  // click na tlacitko [Refresh location info]:
  getLocation() {
    this.getLatLng();
  }
  // zisti GPS polohu:
  getLatLng() {
    // this.loadingLocation = true;
    this.geolocation.getCurrentPosition().then((resp) =&amp;gt; {
      console.log(resp);
      this.locationCordinates = resp.coords;
      // this.loadingLocation = false;
    }).catch((error) =&amp;gt; {
      // this.loadingLocation = false;
      console.log('Error getting location', error);
    });
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ak si zobrazím v prehliadači túto stránku:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l2Ld8MKM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iz3m09kzsndoqkzux6jq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l2Ld8MKM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iz3m09kzsndoqkzux6jq.PNG" alt="Image description" width="699" height="569"&gt;&lt;/a&gt;&lt;br&gt;
a po kliknutí na tlačítko [Refresh location info] sa aktivuje cordova geolokačný plugin, cez ktorý sú načítané údaje, a tie sa objavia vo výpise v konzole:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lwu6N80H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09helxfsi46x7u0my75k.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lwu6N80H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09helxfsi46x7u0my75k.PNG" alt="Image description" width="880" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Poznámka: V prípade reálnej Ionic aplikácie som použil rovnaký postup, ale (už) pri pokuse deklarovať v stránke, v konštruktore triedu "geolocation" mi vypisovalo chybu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R8MN0_WL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tgx0sbo66rek6l14z36b.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R8MN0_WL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tgx0sbo66rek6l14z36b.PNG" alt="Image description" width="807" height="367"&gt;&lt;/a&gt;&lt;br&gt;
Riešením na tento problém je doplniť deklaráciu providera do súboru modulu stránky "home.module.ts":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
import { Geolocation } from '@ionic-native/geolocation/ngx';

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    HomePageRoutingModule,
  ],
  providers: [
    Geolocation,
  ],
  declarations: [HomePage]
})
export class HomePageModule {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ionic</category>
      <category>cordova</category>
    </item>
    <item>
      <title>V Ionic (ver.5) odovzdať parametre zo stránky na ďalšiu stránku</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Tue, 13 Dec 2022 16:12:29 +0000</pubDate>
      <link>https://dev.to/jurajchovan/v-ionic-ver5-odovzdat-parametre-zo-stranky-na-dalsiu-stranku-26kn</link>
      <guid>https://dev.to/jurajchovan/v-ionic-ver5-odovzdat-parametre-zo-stranky-na-dalsiu-stranku-26kn</guid>
      <description>&lt;p&gt;V nasledujúcom postupe je ukázané ako v Ionic (ver.5) aplikácii možno odovzdať parametre (hodnoty) z jednej stránky na ďalšiu stránku.&lt;br&gt;
V aplikácii mám stránku "page01", v ktorej zobrazujem nejaký zoznam položiek. Po kliknutí na konkrétnu položku v tomto zozname chcem zobraziť stránku "page02" kde budú detaily (alebo nejaké ďalšie informácie) o vybratej položke. Pred zobrazením "page02" odovzdám zo stránky "page01" niektoré parametre.&lt;br&gt;
Layout stránky "page01.page.html" je napr.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;ion-header&amp;gt;
  &amp;lt;ion-toolbar color="primary"&amp;gt;
    &amp;lt;ion-buttons slot="start"&amp;gt;
      &amp;lt;ion-menu-button&amp;gt;&amp;lt;/ion-menu-button&amp;gt;
    &amp;lt;/ion-buttons&amp;gt;
    &amp;lt;ion-title&amp;gt;accepted buddies ({{ pageContent?.Rows }})&amp;lt;/ion-title&amp;gt;
    &amp;lt;ion-buttons slot="end"&amp;gt;
      &amp;lt;ion-button (click)="previousPage()"&amp;gt;&amp;lt;ion-icon name="arrow-back"&amp;gt;&amp;lt;/ion-icon&amp;gt;&amp;lt;/ion-button&amp;gt;
    &amp;lt;/ion-buttons&amp;gt;
  &amp;lt;/ion-toolbar&amp;gt;
&amp;lt;/ion-header&amp;gt;

&amp;lt;ion-content&amp;gt;
  &amp;lt;ion-card *ngFor="let User of pageContent?.Users"&amp;gt;
    &amp;lt;ion-item&amp;gt;
      &amp;lt;ion-avatar slot="start" (click)="showPosition(User.AcID,User.FirstName,User.LastName,User.DistanceFromUser,User.Lat,User.Lng)"&amp;gt;
        &amp;lt;img alt="{{ User.FirstName }} {{ User.LastName }}" 
        src="http://.../{{ User.Location }}/{{ User.FileName }}" /&amp;gt;
      &amp;lt;/ion-avatar&amp;gt;
      &amp;lt;ion-label (click)="showPosition(User.AcID,User.FirstName,User.LastName,User.DistanceFromUser,User.Lat,User.Lng)"&amp;gt;
        &amp;lt;h2&amp;gt;&amp;lt;strong&amp;gt;{{ User.FirstName }} {{ User.LastName }}&amp;lt;/strong&amp;gt; ({{ User.AcID }})&amp;lt;/h2&amp;gt;
        &amp;lt;h3&amp;gt;&amp;lt;strong&amp;gt;{{ User.DistanceFromUser }}&amp;lt;/strong&amp;gt; ({{ User.updated_at }})&amp;lt;/h3&amp;gt;
      &amp;lt;/ion-label&amp;gt;
    &amp;lt;/ion-item&amp;gt;
   ...
&amp;lt;/ion-content&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tj.po kliknutí na avatar, resp.po kliknutí na informáciu o mene položky sa volá funkcia "showPosition()" s niekoľkými parametrami (AcID, FirstName, LastName, DistanceFromUser, Lat, Lng).&lt;br&gt;
Súbor logiky tejto stránky, tj."page01.page.ts" má približne tento kód:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { NavigationExtras } from '@angular/router';
export class Page01Page implements OnInit {
   ...
showPosition(BuddyID,BuddyFirstName,BuddyLastName,BuddyDistanceFromUser,BuddyLat,BuddyLng)  {
    const navParams: NavigationExtras = {
      queryParams: {
        BuddyID: JSON.stringify(BuddyID),
        BuddyName: BuddyFirstName+' '+BuddyLastName,
        BuddyDistanceFromUser: '('+BuddyDistanceFromUser+')',
        BuddyLat: BuddyLat,
        BuddyLng: BuddyLng
      }
    };
    this.navCtrl.navigateForward(['page02'], navParams);
  }
  ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tj.je tu definovaná funkcia "showPosition()", v ktorej definujem odovzdávané parametre (a ich hodnoty) cez "navParams", a túto sadu potom odovzdávam vo volaní stránky "page02".&lt;br&gt;
V stránke "page02" mám potom v súbore logiky stránky "page02.page.ts" približne tento kód:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { ActivatedRoute } from "@angular/router";
...
export class Page02Page implements OnInit {
  BuddyID = null;
  NextParameter = null;
  BuddyName: string;
  BuddyDistanceFromUser = null;
  BuddyLat = null;
  BuddyLng = null;
  ...
  constructor(
    private navCtrl: NavController,
    private route: ActivatedRoute
  ) { }
  ngOnInit() {
    this.route.queryParams.subscribe(params=&amp;gt;{
      this.BuddyID = JSON.parse(params['BuddyID']);
      this.BuddyName = params['BuddyName'];
      this.BuddyDistanceFromUser = params['BuddyDistanceFromUser'];
      this.BuddyLat = params['BuddyLat'];
      this.BuddyLng = params['BuddyLng'];
    });
    this.displayMap();
  }
  ...
  displayMap()  {
    // nejaká funkcia, ktorá na stránke zobrazi mapu s určenou polohou
    ...
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tj.v inicializácii (volanej) stránky "page02" sa prevezmú parametre (a ich hodnoty) z predchádzajúcej (volajúcej) stránky "page01", a tieto sa priradia do interných premenných tejto stránky. Ďalej sa volá funkcia "displayMap()", ktorá zobrazí mapu a v nej vyznačí informácie, ktoré sú prevzaté z "page01".&lt;br&gt;
A ešte pre úplnosť layout stránky "page02.page.html" vypadá asi takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;ion-header&amp;gt;
  &amp;lt;ion-toolbar color="primary"&amp;gt;
    &amp;lt;ion-buttons slot="start"&amp;gt;
      &amp;lt;ion-menu-button&amp;gt;&amp;lt;/ion-menu-button&amp;gt;
    &amp;lt;/ion-buttons&amp;gt;
    &amp;lt;ion-title&amp;gt;{{ BuddyName }} &amp;lt;small&amp;gt;{{ BuddyDistanceFromUser }}&amp;lt;/small&amp;gt;&amp;lt;/ion-title&amp;gt;
    &amp;lt;ion-buttons slot="end"&amp;gt;
      &amp;lt;ion-button (click)="previousPage()"&amp;gt;&amp;lt;ion-icon name="arrow-back"&amp;gt;&amp;lt;/ion-icon&amp;gt;&amp;lt;/ion-button&amp;gt;
    &amp;lt;/ion-buttons&amp;gt;
  &amp;lt;/ion-toolbar&amp;gt;
&amp;lt;/ion-header&amp;gt;

&amp;lt;ion-content fullscreen="true" slot="fixed"&amp;gt;
  &amp;lt;div class="ion-padding"&amp;gt;

    &amp;lt;div id="profile-container1" style="text-align:center;"&amp;gt;
      &amp;lt;div id="mapContainer" style="width:100%;height:600px;"&amp;gt;&amp;lt;/div&amp;gt;
      &amp;lt;small&amp;gt;GPS: {{ BuddyLat }} / {{ BuddyLng }}&amp;lt;/small&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;

&amp;lt;/ion-content&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tj.na stránke "page02" sú zobrazené prevzaté informácie z "page01".&lt;br&gt;
...&lt;/p&gt;

</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>V Ionic (ver.5) pridať toast alert informovanie</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Fri, 02 Dec 2022 10:09:44 +0000</pubDate>
      <link>https://dev.to/jurajchovan/v-ionic-ver5-pridat-toast-alert-informovanie-2ci3</link>
      <guid>https://dev.to/jurajchovan/v-ionic-ver5-pridat-toast-alert-informovanie-2ci3</guid>
      <description>&lt;p&gt;V Ionic (ver.5) aplikácii je vhodné pridať funkcionalitu zobrazovania tzv.toast-u (ti.krátkodobo zobrazenej informácie o tom, že sa vykonala/vykonáva nejaká akcia).&lt;br&gt;
Pre toto si v aplikácii vytvorím samostatný servis "alert", príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic generate service services/alert
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;vo vytvorenom súbore "alert.service.ts" doplniť kód:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Injectable } from '@angular/core';
import { ToastController } from '@ionic/angular';

@Injectable({
  providedIn: 'root'
})
export class AlertService {

  constructor(
    private toastController: ToastController
  ) { }
  // zobrazenie toast informacnyho alert-u:
  async presentToast(message: any) {
    const toast = await this.toastController.create({
      message: message,
      duration: 2000,
      position: 'bottom',
      color: 'success'
    });
    toast.present();
  }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Úlohou tohto servisu bude zobraziť "toast" s požadovaným textom/informáciou.&lt;br&gt;
A teraz na stránke, kde vykonávam nejakú operáciu a chcem tam zobraziť tento toast/alert, napr.v súbore "mytags.page.ts" doplniť takýto kód:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Component, OnInit } from '@angular/core';
import { ApiService } from '../../services/api.service';
import { NavController } from '@ionic/angular';
import { AlertService } from '../../services/alert.service';

@Component({
  selector: 'app-mytags',
  templateUrl: './mytags.page.html',
  styleUrls: ['./mytags.page.scss'],
})

export class MytagsPage implements OnInit {
  pageContent = null;
  constructor(
    private api: ApiService,
    private navCtrl: NavController,
    private alertService: AlertService
  ) { }
        ...
  ngOnInit() {
    // ToDo: ID prihlaseneho user-a:
    const loggedUserID = 3;
    this.api.getUserTags(loggedUserID).subscribe((response) =&amp;gt; {
      console.log(response);
      this.pageContent = response;
    });
  }

  // naspat na predchadzajucu stranku:
  previousPage()  {
    this.navCtrl.back();
  }
  // zmaze vybraty tag:
  deleteTag(TagID)  {
    // ToDo: ID prihlaseneho user-a:
    const loggedUserID = 3;
    this.api.deleteTag(TagID).subscribe((response) =&amp;gt; {
      console.log('tag ID: '+TagID);
      this.pageContent = response;
      console.log(response);
      this.alertService.presentToast('tag (ID: '+TagID+') successfully deleted');
      // a znovu nacitaj/refreshni stranku:
      this.ngOnInit();
    });
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tj.je tu pridaná referencia na tento servis, a pri vykonávaní funkcie "deleteTag()" sa volá zobrazenie toast-u (alertu) v ktorom bude informácia (že sa tag s daným ID úspešne vymazal).&lt;br&gt;
...&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Naspäť na predchádzajúcu stránku v Ionic (ver.5) aplikácii</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Wed, 23 Nov 2022 17:01:42 +0000</pubDate>
      <link>https://dev.to/jurajchovan/naspat-na-predchadzajucu-stranku-v-ionic-ver5-aplikacii-2cad</link>
      <guid>https://dev.to/jurajchovan/naspat-na-predchadzajucu-stranku-v-ionic-ver5-aplikacii-2cad</guid>
      <description>&lt;p&gt;Ak potrebujem v Ionic (ver.5) aplikácii pridať na stránku funkcionalitu návratu na predchádzajúcu stránku možno to urobiť aj nižšie popísaným spôsobom.&lt;br&gt;
V Ionic aplikácii mám vytvorenú nejakú stránku, napr.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8100/removed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mCDVDtbe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ik3s5sp8821hdg0s9e18.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mCDVDtbe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ik3s5sp8821hdg0s9e18.JPG" alt="Image description" width="430" height="270"&gt;&lt;/a&gt;&lt;br&gt;
a na tejto stránke chcem v jej záhlaví (v pravej časti, lebo v ľavej už mám ikonku na zobrazenie aplikačného side-menu) umiestniť ikonku šípky, kliknutím na ktorú sa vrátim na predchádzajúcu stránku aplikácie (stránku z ktorej som tu prišiel).&lt;br&gt;
Súbor s layout-om stránky, tj.HTML kód v súbore "removed.page.html" upravím/doplním takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;ion-header&amp;gt;
  &amp;lt;ion-toolbar color="primary"&amp;gt;
    &amp;lt;ion-buttons slot="start"&amp;gt;
      &amp;lt;ion-menu-button&amp;gt;&amp;lt;/ion-menu-button&amp;gt;
    &amp;lt;/ion-buttons&amp;gt;
    &amp;lt;ion-title&amp;gt;Removed buddies ({{ pageContent?.Rows }})&amp;lt;/ion-title&amp;gt;
    &amp;lt;ion-buttons slot="end"&amp;gt;
      &amp;lt;ion-button (click)="previousPage()"&amp;gt;&amp;lt;ion-icon name="arrow-back"&amp;gt;&amp;lt;/ion-icon&amp;gt;&amp;lt;/ion-button&amp;gt;
    &amp;lt;/ion-buttons&amp;gt;
  &amp;lt;/ion-toolbar&amp;gt;
&amp;lt;/ion-header&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a ešte v súbore logiky stránky, tj.v "removed.page.ts" je potrebné doplniť volanú funkciu "previousPage()", ako aj použitie "NavController", ktorý zabezpečuje samotnú navigáciu v Ionic aplikácii. Upravený/doplnený kód vyzerá asi takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Component, OnInit } from '@angular/core';
import { NavController } from '@ionic/angular';
@Component({
  selector: 'app-removed',
  templateUrl: './removed.page.html',
  styleUrls: ['./removed.page.scss'],
})
export class RemovedPage implements OnInit {
  pageContent = null;
  constructor(
    private navCtrl: NavController,
  ) { }

  ngOnInit() {
    ...
  }

  // naspat na predchadzajucu stranku:
  previousPage()  {
    this.navCtrl.back();
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stránka teraz bude vyzerať:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--roWYhrP4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ej2tr5woovlkn9jy7c13.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--roWYhrP4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ej2tr5woovlkn9jy7c13.JPG" alt="Image description" width="406" height="249"&gt;&lt;/a&gt;&lt;br&gt;
a po kliknutí na ikonku šípky ma to vráti na predchádzajúcu stránku v aplikácii.&lt;/p&gt;

</description>
      <category>ionic</category>
    </item>
    <item>
      <title>Pridanie autentifikácie do Laravel (ver.9) aplikácie</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Fri, 28 Oct 2022 16:27:56 +0000</pubDate>
      <link>https://dev.to/jurajchovan/pridanie-autentifikacie-do-laravel-ver9-aplikacie-2e61</link>
      <guid>https://dev.to/jurajchovan/pridanie-autentifikacie-do-laravel-ver9-aplikacie-2e61</guid>
      <description>&lt;p&gt;V nasledujúcom postupe ukážem, ako implementovať do vytvorenej (základnej kostry) Laravel aplikácie (vo verzii 9) autentifikáciu (tj.registráciu, prihlásenie a odhlásenie) s využitím package-u "Jetstream".&lt;/p&gt;

&lt;p&gt;Najprv je potrebné mať pripravenú nejakú databázu, ktorá bude slúžiť na uchovávanie údajov pre túto Laravel aplikáciu.&lt;br&gt;
Mám vytvorenú na lokálnom MySQL servri databázu s názvom "test". Na túto databázu je potrebné sa napojiť s našou Laravel aplikáciou.&lt;br&gt;
Urobí sa to jednoducho, nastavením potrebných údajov do konfiguračného súboru ".env" v aplikácii:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;prístupový účet k databáze je "root" a heslo nie je nastavené žiadne.&lt;br&gt;
Je potrebné mať teraz spustený tento MySQL server - ja ho mám v rámci zinštalovaného "WAMP servra", takže ak spustím "WAMP server" spustí sa mi automaticky aj MySQL server. Overím si to spustením prehliadača s URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost/phpmyadmin/index.php
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo mi zobrazí:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1RMXimVP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/luby04cyn1332bjwhidh.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1RMXimVP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/luby04cyn1332bjwhidh.JPG" alt="Image description" width="871" height="560"&gt;&lt;/a&gt;&lt;br&gt;
po prihlásení (zalogovaní) sa dostanem na utilitu "PHPMyAdmin", kde vidím aj aktuálne vytvorené databázy.&lt;/p&gt;

&lt;p&gt;Teraz je čas zinštalovať do Laravel aplikácie package "Jetstream", ktorý rieši autentifikáciu používateľa (tj.registráciu, prihlásenie a odhlásenie).&lt;br&gt;
Na inštaláciu package-u je potrebné mať zinštalovaný nastroj "Composer", ak ho máme spustiť (v adresári našej Laravel aplikácie) príkaz:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require laravel/jetstream
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Následne spustiť príkaz, kde nastaviť inštaláciu stack-u "livewire" pre frontend (je založený na známej Laravel technológii "blade"), a tiež ak chceme rozšírenie "teams", ktorým možno priradzovať používateľov do skupín (teamov), použiť syntax príkazu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan jetstream:install livewire --teams
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nakoniec dokončiť túto inštaláciu príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;V prípade ak chýba utilita "npm" (manažér package-ov), tak ešte predtým spustiť jeho inštaláciu, príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inštalácia package-u "Jetstream" vytvorila aj migračné skripty, ktoré služia na vytvorenie potrebných databázových tabuliek.&lt;/p&gt;

&lt;p&gt;Spustiť vykonanie týchto migračných skriptov (podmienkou na úspešné vykonanie je, že je potrebné mať už predtým spustený MySQL server - viď info vyššie a musíme mať v MySQL vytvorenú požadovanú databázu - viď tiež info vyššie, a samozrejme musíme mať túto Laravel aplikáciu napojenú, cez konfiguračný súbor ".env" na túto databázu), vykonať príkazom (je to štandartný príkaz pre Laravel, ktorým zbehneme migračné skripty):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poznámka:&lt;br&gt;
V prípade ak nám spustenie týchto skriptov vypisujú nejakú takúto chybu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;je potrebné urobiť drobnú úpravu v súbore (v adresári tejto Laravel aplikácie) "\app\Providers\AppServiceProvider.php":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
use Illuminate\Support\Facades\Schema;
...
    public function boot() {
      Schema::defaultStringLength(191);
    }
...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ak vypísalo túto chybu, vymazať z databázy skriptami vytvorené db-tabuľky, urobiť túto úpravu a znovu spustiť príkaz na migráciu (viď vyššie).&lt;/p&gt;

&lt;p&gt;Vo výsledku (po úspešnom zbehnutí migrácie) by mali byť v databáze vytvorené nasledujúce db-tabuľky:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    failed_jobs
    migrations
    password_resets
    personal_access_tokens
    sessions
    team_invitations
    team_user
    users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Teraz si spustiť (v adresári tejto Laravel aplikácie, cez "DOS Prompt" developovací server, príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CiyNsfc---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dkrt071lqm6xt0tjgd56.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CiyNsfc---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dkrt071lqm6xt0tjgd56.JPG" alt="Image description" width="630" height="206"&gt;&lt;/a&gt;&lt;br&gt;
a v prehliadači si spustiť adresu/URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čo zobrazí domovskú stránku aplikácie:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cfB8_WLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kmeyudrn228wtf2lwuhy.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cfB8_WLI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kmeyudrn228wtf2lwuhy.JPG" alt="Image description" width="880" height="522"&gt;&lt;/a&gt;&lt;br&gt;
kde sa už na domovskej stránke Laravel aplikácie zobrazia odkazy na prihlásenie a na registráciu používateľa.&lt;br&gt;
Po kliknutí na "Login" (prihlásenie) sa presmeruje Laravel aplikácia na prihlasovací formulár:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:8000/login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tFZAEdsW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/znd298qo08375nw5gb3k.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tFZAEdsW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/znd298qo08375nw5gb3k.JPG" alt="Image description" width="811" height="657"&gt;&lt;/a&gt;&lt;br&gt;
resp.po kliknutí na "Register" (registrácia nového používateľa) sa presmeruje na registračný formulár:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:8000/register
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1uZowPYs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k25hbnd6u0kt61eqvb87.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1uZowPYs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k25hbnd6u0kt61eqvb87.JPG" alt="Image description" width="841" height="717"&gt;&lt;/a&gt;&lt;br&gt;
Takto viem zaregistrovať nového používateľa a potom sa pod jeho účtom prihlásiť do Laravel aplikácie a dostanem sa na demo stránku  "Dashboard", ktorú má prístupnú iba úspešne prihlásený používateľ.&lt;/p&gt;

&lt;p&gt;...&lt;/p&gt;

</description>
      <category>laravel</category>
    </item>
    <item>
      <title>Vytvorenie kostry aplikácie v Laravel framework (ver.9)</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Thu, 27 Oct 2022 15:27:13 +0000</pubDate>
      <link>https://dev.to/jurajchovan/vytvorenie-kostry-aplikacie-v-laravel-framework-ver9-3ncn</link>
      <guid>https://dev.to/jurajchovan/vytvorenie-kostry-aplikacie-v-laravel-framework-ver9-3ncn</guid>
      <description>&lt;p&gt;V nasledujúcom postupe je ukázané ako si vytvoriť kostru (resp.úplne najzákladnejšiu) aplikáciu vo framework-u Laravel (vo verzii 9).&lt;/p&gt;

&lt;p&gt;Vytvorím si kostru aplikácie v Laravel, príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer create-project laravel/laravel NazovLaravelAplikacie
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;čím je vytvorený podadresár "NazovLaravelAplikacie" v adresári, z ktorého som spustil tento príkaz, a v ňom je vytvorená potrebná štruktúra súborov Laravel projektu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8_JT9oy---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kp15zpzgeily5o3893a8.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8_JT9oy---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kp15zpzgeily5o3893a8.JPG" alt="Image description" width="487" height="472"&gt;&lt;/a&gt;&lt;br&gt;
V tomto adresári, kde mám vytvorenú túto základnú (prázdnu) Laravel aplikáciu, spustiť príkaz na štart developovacieho servra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yblD2o3p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d80mhaf930zbp8acg8a1.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yblD2o3p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d80mhaf930zbp8acg8a1.JPG" alt="Image description" width="777" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A v prehliadači si teraz spustiť URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://127.0.0.1:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;a zobrazí sa základná Laravel aplikácia:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cZA5ZnYw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqbtd5ph324o8grpxpwm.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cZA5ZnYw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqbtd5ph324o8grpxpwm.JPG" alt="Image description" width="880" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;dole, v aplikácii vidím použitú verziu framework-u Laravel (ver.9.7.0) a tiež verziu PHP.&lt;/p&gt;

</description>
      <category>laravel</category>
    </item>
    <item>
      <title>Autentifikácia v Ionic (ver.5) aplikácii cez REST API (5.časť) - prístup na stránky pomocou guard</title>
      <dc:creator>Juraj Chovan</dc:creator>
      <pubDate>Sat, 01 Oct 2022 07:44:21 +0000</pubDate>
      <link>https://dev.to/jurajchovan/autentifikacia-v-ionic-ver5-aplikacii-cez-rest-api-5cast-pristup-na-stranky-pomocou-guard-56b5</link>
      <guid>https://dev.to/jurajchovan/autentifikacia-v-ionic-ver5-aplikacii-cez-rest-api-5cast-pristup-na-stranky-pomocou-guard-56b5</guid>
      <description>&lt;p&gt;V tomto postupe ukážem obmedzenie/povolenie prístupu k určeným stránkam Ionic (ver.5) aplikácie pomocou funkcionality/konceptu "guard".&lt;br&gt;
Mám vytvorenú Ionic aplikáciu s funkcionalitou registrácie nového používateľa (popísané v &lt;a href="https://dev.to/jurajchovan/autentifikacia-v-ionic-ver5-aplikacii-cez-rest-api-2cast-15j3"&gt;druhej časti&lt;/a&gt;), prihlásenia existujúceho používateľa (popísané v &lt;a href="https://dev.to/jurajchovan/autentifikacia-v-ionic-ver5-aplikacii-cez-rest-api-3cast-463l"&gt;tretej časti&lt;/a&gt;) a odhlásenia prihláseného používateľa (popísané vo &lt;a href="https://dev.to/jurajchovan/autentifikacia-v-ionic-ver5-aplikacii-cez-rest-api-4cast-odhlasenie-53cb"&gt;štvrtej časti&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Teraz si vytvorím v tejto aplikácii nejaké ďalšie stránky, na ktorých prístup potom použijem "guard".&lt;br&gt;
Vytvoriť si dve nové stránky príkazmi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic generate page pages/profile
ionic generate page pages/portfolios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tieto stránky ponechám prázdne (pre otestovanie to stačí).&lt;/p&gt;

&lt;p&gt;Vytvoriť si teraz požadovaný "guard", príkazom:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ionic generate guard guard/auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pri vytváraní potvrdiť implementovaný interface typu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CanActivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sú vytvorené v samostatnom adresári "guard" dva súbory:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcqpuhf0gfnzdadpge39.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcqpuhf0gfnzdadpge39.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
V súbore "auth.guard.ts" doplniť/upraviť takto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Injectable } from '@angular/core';
RouterStateSnapshot, UrlTree } from '@angular/router';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(
    private router: Router,
  ) {}
  canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot ): 
    Observable&amp;lt;boolean&amp;gt; | Promise&amp;lt;boolean&amp;gt; | boolean {
      // const currentUser = this.authService.isLoggedIn;
      const currentUser = localStorage.getItem('token');
      if (currentUser) {
          // ak je pouzivatel autorizovany, prihlaseny:
          return true;
      }
      // ak nie je pouzivatel prihlaseny, presmeruje na "home":
      this.router.navigate(['/home']);
      return false;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;na overenie, či je používateľ prihlásený načítavam hodnotu "token" z lokálnej Storage aplikácie.&lt;br&gt;
A nakoniec ešte upraviť/doplniť v súbore "app-routing.module.ts" kód na prístup k jednotlivým stránkam:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ...
  {
    path: 'profile',
    loadChildren: () =&amp;gt; import('./pages/profile/profile.module').then( m =&amp;gt; m.ProfilePageModule), canActivate: [AuthGuard]
  },
  {
    path: 'portfolios',
    loadChildren: () =&amp;gt; import('./pages/portfolios/portfolios.module').then( m =&amp;gt; m.PortfoliosPageModule)
  },
        ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;tj.pre stránku, ktorú chcem chrániť pre neautentifikovaným prístupom doplniť "canActivate: [AuthGuard]".&lt;br&gt;
Ak teraz spustím túto Ionic aplikáciu a chcem ísť na stránku:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8100/profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pokiaľ nie som prihlásený používateľ (akýkoľvek) tak sa na ňu nedostanem a presmeruje ma na default-nú stránku aplikácie.&lt;br&gt;
Zatiaľ čo prístup na stránku:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8100/portfolios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nie je chránený a dostane sa na ňu aj neprihlásený (anonymný) používateľ aplikácie.&lt;br&gt;
...&lt;/p&gt;

</description>
      <category>ionic</category>
    </item>
  </channel>
</rss>
