Tartalomjegyzék
Laravel REST API kezdés
- Szerző: Sallai András
- Copyright © 2023, Sallai András
- Web: https://szit.hu
Projekt létrehozása
Hozzuk létre a projektet:
composer create-project laravel/laravel app01
Projekt indítása
Lépjünk be könyvtárba, majd indítsuk el a szervert:
cd app01 php artisan serve
Adatbázis
MariaDB/MySQL
Hozzuk létre az adatbázis:
create database emp character set utf8 collate utf8_hungarian_ci; grant all privileges on emp.* to emp@localost identified by 'titok';
Szerkesszük a .env fájlt. Állítsuk be az adatbázishoz tartozó adatokat:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
SQLite
Vegyük fel az sqlite beállítást, tegyük megjegyzésbe a mysql adatbázis bejegyzést:
DB_CONNECTION=sqlite # DB_CONNECTION=mysql # DB_HOST=127.0.0.1 # DB_PORT=3306 # DB_DATABASE=laravel # DB_USERNAME=root # DB_PASSWORD=
Hozzunk létre a database könyvtárban egy database.sqltie üres állományt.
- database/database.sqlite
Model, migráció és kontroller
Model, migrációs fájl és a kontroller létrehozása:
php artisan make:model Employee --migration --controller --api
A --api hatására létrehozza a következő metódusokat:
- index()
- store(Request $request)
- show(Employee $employee)
- update(Request $request, Employee \$employee)
- destroy(Employee $employee)
Model, migrációs fájl és kontroller létrehozása rövid kapcsolókkal.
php artisan make:model Employee -mc --api
Migrációs fájl
Függvénnyel megadható mezők rövid listája:
- binary()
- id()
- char()
- year()
- double()
- float()
- integer()
- date()
- string()
- text()
- time()
- timestamp()
- tinyText()
- boolean()
- dateTime()
- tinyInteger()
$table->increments('id'); $table->string('name', 50); $table->string('city', 50)->nullable(); $table->double('salary')->nullable(); $table->date('birth')->nullable(); $table->integer('rank_id')->unsigned()->nullable(); $table->binary('image')->nullable();
Az összes mezőtípus elérhető itt
Migrációs fájl kiegészítése
Tegyük fel, hogy egy ilyen fájl jön létre:
- database/migrations/2022_04_16_152020_create_employees_table.php
Szerkesszük a fájlt.
public function up() { Schema::create('employees', function (Blueprint $table) { $table->id(); $table->timestamps(); }); }
Az up() függvény:
public function up() { Schema::create('employees', function (Blueprint $table) { $table->increments('id'); $table->string('name', 50); $table->string('city', 50); $table->decimal('salary', 5, 2); $table->timestamps(); }); }
Készítsük el az adatbázist:
php artisan migrate
Kész táblák frissítése
php artisan migrate:refresh
A parancs törli a meglévő adatokat.
Ha szeretnénk megőrizni az adatokat, akkor külön migrációs fájlba írjuk le a változásokat és csak azt hajtsuk végre.
Migráció visszavonása
Utolsó migráció visszavonás
php artisan migrate:rollback
Összes migráció visszavonása:
php artisan migrate:reset
Fillable
Biztonsági okokból alapértelmezetten minden mező kitöltése tiltott. Engedélyezzük a kitöltendő mezőket a modellben. Nélküle nem lehetséges műveletek: create, update.
Szerkesszük:
- app/Http/Models/Employee.php
Szúrjuk be a következő sort:
protected $fillable = ['name', 'city', 'salary'];
A teljes Employee.php:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Employee extends Model { use HasFactory; protected $fillable = [ 'name', 'city', 'salary' ]; }
A kontroller fejlesztése
A következő fájlt kell szerkeszteni:
- app/Http/Controllers/EmployeeController.php
Eredeti
public function index() { } public function store(Request $request) { } public function show(Employee $employee) { } public function update(Request $request, Employee $employee) { } public function destroy(Employee $employee) { }
Fejlesztés
Vegyük használatba az Employee modellt. Az Employee model segítségével elvégezhetők a CRUD műveletek.
//... use App\Models\Employee; //... public function index() { return Employee::all(); } public function store(Request $request) { return Employee::create($request->all()); } public function show($id) { return Employee::find($id); } public function update(Request $request, $id) { $employee = Employee::find($id); $employee->update($request->all()); return $employee; } public function destroy($id) { return Employee::destroy($id); }
A response() függvény
Ajánlott a visszaadott értéket a response() függvénybe zárni:
public function index() { return response(Employee::all()); }
Így visszaadhatunk visszatérési kódot, beállíthatjuk a visszatérés típusát.
public function index() { return response(Employee::all(), 200) ->header('Content-Type', 'application/json'); }
Használhatjuk a setStatusCode() függvényt is:
public function index() { $employees = Employee::all(); return response()->json([ 'success' => true, 'employees' => $employees ])->setStatusCode(200); }
Külön változó:
public function index() { $employees = Employee::all(); $response = [ 'success' => true, 'employees' => $employees ]; return response() ->json($response) ->setStatusCode(200); }
Link:
JSON
public function index() { $employees = Employee::all(); return response()->json($employees); }
public function index() { $employees = Employee::all(); return response()->json($employees, 200); }
public function index() { $employees = Employee::all(); return response()->json([ 'success' => true, 'employees' => $employees ], 200); }
Router
use App\Http\Controllers\EmployeeController; //... Route::get('employees', [EmployeeController::class, 'index']); Route::post('employees', [EmployeeController::class, 'store']); Route::get('employees/{id}', [EmployeeController::class, 'show']); Route::put('employees/{id}', [EmployeeController::class, 'update']); Route::delete('employees/{id}', [EmployeeController::class, 'destroy']);
Validation
public function store(Request $request) { $request->validate([ 'name' => 'required', 'city' => 'required', 'salary' => 'required' ]); $employee = new Employee; $employee->name = $request->name; $employee->city = $request->city; $employee->salary = $request->salary; $employee->save(); return response($employee, 201); }
Validációs lehetőségek itt
Cors
A Cors következő helyen állítható:
- config/cors.php
Alapértelmezetten minden engedélyezve van.
Admin felhasználó
Seeder használata
php artisan make:seeder AdminSeeder
A database/seeders/AdminSeeder.php fájlban:
use App\Models\User; //... public function run() { User::create([ 'name' => 'admin', 'email' => 'admin@zold.lan', 'email_verified_at' => now(), 'password' => bcrypt('titok') ]); } //...
A Seeder futtatása:
php artisan db:seed --class=AdminSeeder
is_admin mező esetén
use App\Models\User; //... public function run() { User::create([ 'name' => 'admin', 'email' => 'admin@zold.lan', 'email_verified_at' => now(), 'is_admin' => 1, 'password' => bcrypt('titok') ]); } //...
Tinker használata
Indítsuk el a tinkert:
php artisan tinker
Másoljuk be:
User::create(['name' => 'admin', 'email' => 'admin@zold.lan', 'email_verified_at' => now(), 'password' => bcrypt('titok')]);
Felhasználó keresése:
App\Models\User::find(1);
Az összes lekérdezése:
App\Models\User::all();
Felhasználó törlése:
App\Models\User::find(2)->delete();