Tartalomjegyzék

< Laravel REST API

Laravel REST API kezdés

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.

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:

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:

$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:

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:

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:

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.

Ügyeljünk arra, hogy az Employee modellben a $fillable tömb legyen kitöltve.
//...
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ó:

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

Függelék

Segítség

A kontrollerben információk kiíratása:

echo "<pre>";
print_r($request->file());
dd($request);