Taskx mittels Laraknife: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „= Links = * Laraknife * Laravel = Zielsetzung = Es soll eine minimale Web-Applikation mit den Werkzeugen Laravel und Laraknife erstellt werden: Eine Verwaltung von Notizen. = Name = Eine Verballhornung des Wortes "Tasks": Die schwäbische Aussprache spricht ein x am Ende. == Eigenschaften == * Benutzerverwaltung: nur angemeldete Benutzer können Applikation nutzen * Rechteverwaltung mittels Rollen * Verwaltung von Notizen: Titel, Text, Kategori…“) |
|||
(89 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
* [[Laraknife]] | * [[Laraknife]] | ||
* [[Laravel]] | * [[Laravel]] | ||
* [[LaraKnife Kochbuch]] | |||
* [[Deployment Laraknife Projekt]] | |||
= Zielsetzung = | = Zielsetzung = | ||
Zeile 12: | Zeile 14: | ||
* Benutzerverwaltung: nur angemeldete Benutzer können Applikation nutzen | * Benutzerverwaltung: nur angemeldete Benutzer können Applikation nutzen | ||
* Rechteverwaltung mittels Rollen | * Rechteverwaltung mittels Rollen | ||
* Verwaltung von Notizen: Titel, Text, Kategorie | * Verwaltung von Notizen: Titel, Text, Kategorie, Status: offen, erledigt | ||
= Installation = | = Installation = | ||
* php muss installiert sein! [[PHP einrichten]] php-sqlite3 | |||
* mariadb muss installiert sein: [[mysql]] | |||
* als normaler Benutzer (nicht root): | * als normaler Benutzer (nicht root): | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo apt install php- | PROJ=taskx | ||
SCRIPT=/var/tmp/CreateLaraProj.sh | |||
wget "https://public.hamatoma.de/public/CreateLaraProj.sh" -O $SCRIPT | |||
chmod +x $SCRIPT | |||
PASSW=topsecret | |||
BASE=/home/ws/php | |||
sudo apt update | |||
sudo apt install composer -y | |||
$SCRIPT $PROJ "$PASSW" "$BASE" | |||
</syntaxhighlight> | |||
* Am Ende wird dazu aufgefordert, das Script /tmp/IncludeLara.sh zu starten: | |||
<syntaxhighlight lang="bash"> | |||
# wget https://public.hamatoma.de/public/IncludeLara.sh -O /tmp/IncludeLara.sh | |||
# chmod +x /tmp/IncludeLara.sh | |||
/tmp/IncludeLara.sh $BASE/$PROJ local | |||
# oder | |||
/tmp/IncludeLara.sh $BASE/$PROJ git | |||
</syntaxhighlight> | |||
== Restliche Installation == | |||
<syntaxhighlight lang="bash"> | |||
cd $BASE/$PROJ | |||
larascripts/laraknife-tool.sh rest | |||
./Own.sh all | |||
</syntaxhighlight> | |||
Das folgende sind die einzelnen Schritte, '''normalerweise nicht''' erforderlich: | |||
<syntaxhighlight lang="bash"> | |||
# Links erstellen/auffrischen: | |||
larascripts/laraknife-tool.sh build-links [--force] | |||
# Mehrsprachigkeit | |||
larascripts/laraknife-tool.sh init-i18n | |||
# Die neuen Übersetzungen müssen in resources/lang/sources/taskx.de.json eingetragen werden. | |||
# Roles und SProperties füllen | |||
larascripts/laraknife-tool.sh fill-db | |||
# Laraknife-Module anpassen | |||
larascripts/laraknife-tool.sh adapt-modules | |||
# Layout erstellen | |||
larascripts/laraknife-tool.sh create-layout | |||
# Homepage einrichten | |||
larascripts/laraknife-tool.sh create-home | |||
</syntaxhighlight> | |||
= Entwicklungsumgebung starten = | |||
<syntaxhighlight lang="bash"> | |||
cd /home/ws/php/taskx | |||
./Build | |||
# In einem ANDEREN Terminal: | |||
php artisan serve | |||
</syntaxhighlight> | |||
= Modul Device erstellen = | |||
== Tabellenbeschreibung erstellen == | |||
* Konvention: Tabelle wird kleingeschrieben, im Plural | |||
<syntaxhighlight lang="bash"> | |||
TABLE=devices | |||
php artisan make:migration create_${TABLE}_table | |||
</syntaxhighlight> | |||
* Es wird die Datei database/migrations/2023_12_29_180821_create_devices_table.php erzeugt, wobei Datum/Uhrzeit bei jeder Generierung anders ist. | |||
* Diese Datei anpassen: | |||
<pre> | |||
Schema::create('devices', function (Blueprint $table) { | |||
$table->id(); | |||
$table->timestamps(); | |||
$table->string('name'); | |||
$table->text('description'); | |||
$table->integer('devicegroup_scope'); | |||
$table->foreignId('owner_id')->nullable()->references('id')->on('users'); | |||
}); | |||
} | |||
</pre> | |||
* Syntax für Feldänderungen: [[Datenbank-Laravel#Feld%C3%A4nderungen]] | |||
== Modul erzeugen == | |||
<syntaxhighlight lang="bash"> | |||
php artisan migrate | |||
./Lara create:module database/migrations/*_create_${TABLE}_table.php | |||
# oder, wenn das Modul nicht automatisch gebildet werden kann: | |||
./Lara create:module database/migrations/*_create_${TABLE}_table.php --module=device | |||
php artisan migrate | |||
</syntaxhighlight> | |||
== Database Seeder == | |||
Um Tabellen mit sinnvollen Daten vorzubelegen, werden '''Database Seeder''' verwendet. | |||
<syntaxhighlight lang="bash"> | |||
php artisan make:seeder DeviceSeeder | |||
</syntaxhighlight> | |||
Die entstehende Datei database/seeders/DeviceSeeder.php anpassen: Icons in https://icons.getbootstrap.com | |||
<pre> | |||
public function run(): void | |||
{ | |||
SProperty::insertIfNotExists(2001, 'devicegroup', 'Computer', 10, 'C'); | |||
SProperty::insertIfNotExists(2002, 'devicegroup', 'Router', 20, '$'); | |||
Menuitem::insertIfNotExists('articles', 'bi bi-journals'); | |||
Module::insertIfNotExists('Article'); | |||
} | |||
</pre> | |||
Aktivieren: | |||
<syntaxhighlight lang="bash"> | |||
php artisan db:seed --class=DeviceSeeder | |||
</syntaxhighlight> | |||
== Routing einrichten == | |||
* In Datei routes/web.php einfügen: | |||
<syntaxhighlight lang="php"> | |||
... | |||
DeviceController::routes(); | |||
... | |||
</syntaxhighlight> | |||
* Die Klasse NodeController ist unterstrichen: mit Strg-Alt-I Klassen einbinden. | |||
== Starten, Registrieren, Login == | |||
* Den Webserver starten: | |||
<syntaxhighlight lang="bash"> | |||
./Build | |||
# in einem anderen Terminal: | |||
php artisan serve | |||
</syntaxhighlight> | |||
* Im Brower aufrufen: http://localhost:8000 | |||
* Oben rechts: Register | |||
* Felder ausfüllen | |||
* Oben rechts: Login | |||
== In Homepage einfügen == | |||
* resources/views/home.blade.php: | |||
<pre> | |||
<li><a href="/device-index">Geräte</a></li> | |||
</pre> | |||
== Controller und Views anpassen == | |||
=== Übersicht (index) === | |||
* Datei app/Http/Controllers/DeviceController.php | |||
<syntaxhighlight lang="php"> | |||
public function index() | |||
{ | |||
} | |||
</syntaxhighlight> | |||
* Datei resources/views/device/index.blade.php | |||
<syntaxhighlight lang="html"> | |||
<form id="device-index" action="/device-index" method="POST"> | |||
@csrf | |||
</syntaxhighlight> | |||
=== Anlegen (create) === | |||
* Datei app/Http/Controllers/DeviceController.php | |||
* Die drei Methoden '''ersetzen''': | |||
<syntaxhighlight lang="php"> | |||
</syntaxhighlight> | |||
* Datei resources/views/device/create.blade.php | |||
<syntaxhighlight lang="html"> | |||
</syntaxhighlight> | |||
* Übersetzungen in resources/lang/sources/taskx.de.json | |||
<pre> | |||
"Devices": "Geräte", | |||
</pre> | |||
* Aktivieren: | |||
<syntaxhighlight lang="bash"> | |||
./Join | |||
</syntaxhighlight> | |||
=== Ändern (edit) === | |||
* Datei app/Http/Controllers/DeviceController.php | |||
<syntaxhighlight lang="php"> | |||
public function edit(Device $device) | |||
{ | |||
} | |||
public function update(Device $device, Request $request) | |||
{ | |||
$rc = null; | |||
return $rc; | |||
} | |||
</syntaxhighlight> | |||
* Datei resources/views/device/edit.blade.php | |||
<syntaxhighlight lang="html"> | |||
</syntaxhighlight> | |||
* Übersetzungen in resources/lang/sources/taskx.de.json | |||
<pre> | |||
"Change of a Device": "Ändern eines Gerätes", | |||
</pre> | |||
* Aktivieren: | |||
<syntaxhighlight lang="bash"> | |||
./Join | |||
</syntaxhighlight> | |||
=== Anzeigen (show/delete) === | |||
* Datei app/Http/Controllers/DeviceController.php | |||
<syntaxhighlight lang="php"> | |||
public function show(Device $device) | |||
{ | |||
} | |||
</syntaxhighlight> | |||
* Datei resources/views/device/show.blade.php | |||
<syntaxhighlight lang="html"> | |||
</syntaxhighlight> | |||
* Übersetzungen in resources/lang/sources/taskx.de.json | |||
<pre> | |||
"A Device" : "Ein Gerät", | |||
"Deletion of a Device": "Löschen eines Gerätes", | |||
</pre> | |||
* Aktivieren: | |||
<syntaxhighlight lang="bash"> | |||
./Join | |||
</syntaxhighlight> | |||
= Neue Instanz von taskx einrichten = | |||
* Lokal: | |||
<syntaxhighlight lang="bash"> | |||
PROJ=taskx | |||
BASE=/home/ws/php | |||
cd $BASE | |||
git clone ssh://git@git.hamatoma.de:/home/git/repo/$PROJ.git | |||
cd $PROJ | |||
scripts/InitApp.sh | |||
</syntaxhighlight> | |||
* auf einem Server: | |||
<syntaxhighlight lang="bash"> | |||
PROJ=taskx | PROJ=taskx | ||
DOMAIN=$PROJ.hamatoma.de | |||
BASE=/ | BASE=/srv/www | ||
cd $BASE | cd $BASE | ||
sudo -u www-data git config --global --add safe.directory /home/git/repo/$PROJ.git | |||
sudo -u www-data git clone /home/git/repo/$PROJ.git | |||
mv $PROJ $DOMAIN | |||
cd $DOMAIN | |||
sudo -u www-data git checkout main | |||
../laraknife/scripts/InstallInitApp.sh | |||
echo "DEV_USER=www-data" >.env.user | |||
./Own.sh all | |||
cp .env.example .env | |||
vi .env | |||
bash scripts/InitApp.sh | |||
sudo -u www-data ./Build prod | |||
sudo -u www-data ./artisan key:generate | |||
sudo | |||
</syntaxhighlight> | </syntaxhighlight> |
Aktuelle Version vom 3. Januar 2025, 21:21 Uhr
Links
Zielsetzung
Es soll eine minimale Web-Applikation mit den Werkzeugen Laravel und Laraknife erstellt werden: Eine Verwaltung von Notizen.
Name
Eine Verballhornung des Wortes "Tasks": Die schwäbische Aussprache spricht ein x am Ende.
Eigenschaften
- Benutzerverwaltung: nur angemeldete Benutzer können Applikation nutzen
- Rechteverwaltung mittels Rollen
- Verwaltung von Notizen: Titel, Text, Kategorie, Status: offen, erledigt
Installation
- php muss installiert sein! PHP einrichten php-sqlite3
- mariadb muss installiert sein: mysql
- als normaler Benutzer (nicht root):
PROJ=taskx
SCRIPT=/var/tmp/CreateLaraProj.sh
wget "https://public.hamatoma.de/public/CreateLaraProj.sh" -O $SCRIPT
chmod +x $SCRIPT
PASSW=topsecret
BASE=/home/ws/php
sudo apt update
sudo apt install composer -y
$SCRIPT $PROJ "$PASSW" "$BASE"
- Am Ende wird dazu aufgefordert, das Script /tmp/IncludeLara.sh zu starten:
# wget https://public.hamatoma.de/public/IncludeLara.sh -O /tmp/IncludeLara.sh
# chmod +x /tmp/IncludeLara.sh
/tmp/IncludeLara.sh $BASE/$PROJ local
# oder
/tmp/IncludeLara.sh $BASE/$PROJ git
Restliche Installation
cd $BASE/$PROJ
larascripts/laraknife-tool.sh rest
./Own.sh all
Das folgende sind die einzelnen Schritte, normalerweise nicht erforderlich:
# Links erstellen/auffrischen:
larascripts/laraknife-tool.sh build-links [--force]
# Mehrsprachigkeit
larascripts/laraknife-tool.sh init-i18n
# Die neuen Übersetzungen müssen in resources/lang/sources/taskx.de.json eingetragen werden.
# Roles und SProperties füllen
larascripts/laraknife-tool.sh fill-db
# Laraknife-Module anpassen
larascripts/laraknife-tool.sh adapt-modules
# Layout erstellen
larascripts/laraknife-tool.sh create-layout
# Homepage einrichten
larascripts/laraknife-tool.sh create-home
Entwicklungsumgebung starten
cd /home/ws/php/taskx
./Build
# In einem ANDEREN Terminal:
php artisan serve
Modul Device erstellen
Tabellenbeschreibung erstellen
- Konvention: Tabelle wird kleingeschrieben, im Plural
TABLE=devices
php artisan make:migration create_${TABLE}_table
- Es wird die Datei database/migrations/2023_12_29_180821_create_devices_table.php erzeugt, wobei Datum/Uhrzeit bei jeder Generierung anders ist.
- Diese Datei anpassen:
Schema::create('devices', function (Blueprint $table) { $table->id(); $table->timestamps(); $table->string('name'); $table->text('description'); $table->integer('devicegroup_scope'); $table->foreignId('owner_id')->nullable()->references('id')->on('users'); }); }
- Syntax für Feldänderungen: Datenbank-Laravel#Feldänderungen
Modul erzeugen
php artisan migrate
./Lara create:module database/migrations/*_create_${TABLE}_table.php
# oder, wenn das Modul nicht automatisch gebildet werden kann:
./Lara create:module database/migrations/*_create_${TABLE}_table.php --module=device
php artisan migrate
Database Seeder
Um Tabellen mit sinnvollen Daten vorzubelegen, werden Database Seeder verwendet.
php artisan make:seeder DeviceSeeder
Die entstehende Datei database/seeders/DeviceSeeder.php anpassen: Icons in https://icons.getbootstrap.com
public function run(): void { SProperty::insertIfNotExists(2001, 'devicegroup', 'Computer', 10, 'C'); SProperty::insertIfNotExists(2002, 'devicegroup', 'Router', 20, '$'); Menuitem::insertIfNotExists('articles', 'bi bi-journals'); Module::insertIfNotExists('Article'); }
Aktivieren:
php artisan db:seed --class=DeviceSeeder
Routing einrichten
- In Datei routes/web.php einfügen:
...
DeviceController::routes();
...
- Die Klasse NodeController ist unterstrichen: mit Strg-Alt-I Klassen einbinden.
Starten, Registrieren, Login
- Den Webserver starten:
./Build
# in einem anderen Terminal:
php artisan serve
- Im Brower aufrufen: http://localhost:8000
- Oben rechts: Register
- Felder ausfüllen
- Oben rechts: Login
In Homepage einfügen
- resources/views/home.blade.php:
<li><a href="/device-index">Geräte</a></li>
Controller und Views anpassen
Übersicht (index)
- Datei app/Http/Controllers/DeviceController.php
public function index()
{
}
- Datei resources/views/device/index.blade.php
<form id="device-index" action="/device-index" method="POST">
@csrf
Anlegen (create)
- Datei app/Http/Controllers/DeviceController.php
- Die drei Methoden ersetzen:
- Datei resources/views/device/create.blade.php
- Übersetzungen in resources/lang/sources/taskx.de.json
"Devices": "Geräte",
- Aktivieren:
./Join
Ändern (edit)
- Datei app/Http/Controllers/DeviceController.php
public function edit(Device $device)
{
}
public function update(Device $device, Request $request)
{
$rc = null;
return $rc;
}
- Datei resources/views/device/edit.blade.php
- Übersetzungen in resources/lang/sources/taskx.de.json
"Change of a Device": "Ändern eines Gerätes",
- Aktivieren:
./Join
Anzeigen (show/delete)
- Datei app/Http/Controllers/DeviceController.php
public function show(Device $device)
{
}
- Datei resources/views/device/show.blade.php
- Übersetzungen in resources/lang/sources/taskx.de.json
"A Device" : "Ein Gerät", "Deletion of a Device": "Löschen eines Gerätes",
- Aktivieren:
./Join
Neue Instanz von taskx einrichten
- Lokal:
PROJ=taskx
BASE=/home/ws/php
cd $BASE
git clone ssh://git@git.hamatoma.de:/home/git/repo/$PROJ.git
cd $PROJ
scripts/InitApp.sh
- auf einem Server:
PROJ=taskx
DOMAIN=$PROJ.hamatoma.de
BASE=/srv/www
cd $BASE
sudo -u www-data git config --global --add safe.directory /home/git/repo/$PROJ.git
sudo -u www-data git clone /home/git/repo/$PROJ.git
mv $PROJ $DOMAIN
cd $DOMAIN
sudo -u www-data git checkout main
../laraknife/scripts/InstallInitApp.sh
echo "DEV_USER=www-data" >.env.user
./Own.sh all
cp .env.example .env
vi .env
bash scripts/InitApp.sh
sudo -u www-data ./Build prod
sudo -u www-data ./artisan key:generate