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
$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ő [[https://laravel.com/docs/9.x/migrations#available-column-types|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:
===== 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.
Ü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:
* https://laravel.com/docs/10.x/responses (2023)
===== 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 [[https://laravel.com/docs/9.x/validation#available-validation-rules|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();
===== Függelék =====
==== Segítség ====
A kontrollerben információk kiíratása:
echo "";
print_r($request->file());
dd($request);