oktatas:web:back-end_framework:leaf:minimalis
Tartalomjegyzék
Leaf minimális
- Szerző: Sallai András
- Copyright © 2024, Sallai András
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Projekt készítése
mkdir app01 cd app01
A leaf telepítése
Telepítjük az aktuális könyvtárba a Leaf-t a vendor könyvtárba.
composer require leafs/leaf
A parancs után létrejön egy vendor nevű könyvtár. A leaf ebbe könyvtárba kerül függőségként.
Szoftver
Szükségünk van egy $app objektumra, amivel létrehozhatjuk az útválsztást:
- index.php
<?php require __DIR__ . '/vendor/autoload.php'; $app = new Leaf\App; $app->get('/msg', function() use($app) { $app->response()->json(['msg' => 'Hi!']); }); $app->run();
Az $app objektum helyett használhatjuk az app() függvényt:
- index.php
<?php require __DIR__ . '/vendor/autoload.php'; app()->get('/msg', function() { response()->json(['msg' => 'Hi!']); }); app()->run();
Fejlesztői szerver
php -S localhost:8000 -t .
Tesztelés
Tesztelés HTTPie kliens segítségével:
http localhost:8000/msg
Controller
Hozzunk létre, például a projekt gyökérkönyvtárában egy EmplyoeeController.php fájlt:
- EmployeeController.php
<?php class EmployeeController { public function index() { response()->json('műkszik'); } }
- index.php
<?php require __DIR__ . '/vendor/autoload.php'; $app = new Leaf\App; require "EmployeeController.php"; $app->get('/employees', 'EmployeeController@index'); $app->run();
Külön routing
- index.php
<?php require __DIR__ . '/vendor/autoload.php'; require 'api.php'; app()->run();
- api.php
<?php require "EmployeeController.php"; $app = new Leaf\App; $app->get('/employees', 'EmployeeController@index');
- EmployeeController.php
<?php class EmployeeController { public function index() { response()->json('műkszik'); } }
Adatbázis
composer require leafs/db
SQLite
db()->connect([ 'dbtype' => 'sqlite', 'dbname' => 'db.sqlite', ]);
MariaDB
// syntax db()->connect('hostname', 'dbnev', 'user', 'titok', 'mysql');
Lekérdezés:
$emps = db()->query('SELECT * FROM employees')->all();
drop table if exists employees; create table employees ( id int unsigned not null primary key auto_increment, name varchar(50), city varchar(50), salary double, created_at timestamp default current_timestamp, updated_at timestamp default current_timestamp on update current_timestamp );
CRUD műveletek
Kontroller
Célszer a kontrollerek számára készíteni egy app/controllers könyvtárat. A TodoController osztályban a konstruktorban állítsuk be az SQLite-t:
- app/controllers/TodoController.php
<?php class TodoController { public function __construct() { db()->connect([ 'dbtype' => 'sqlite', 'dbname' => 'db.sqlite' ]); } public function index() { $todos = db()->select('todos')->all(); response()->json($todos); } public function create() { $res = db() ->insert('todos') ->params([request()->body()]) ->execute(); $id = db()->lastInsertId(); $todo = db()->select('todos')->where('id', $id)->first(); response()->json($todo); } public function update($id) { $res = db() ->update('todos') ->params(request()->body()) ->where('id', $id) ->execute(); $todo = db()->select('todos')->where('id', $id)->first(); response()->json($todo); } public function delete($id) { $res = db() ->delete('todos') ->where('id', $id) ->execute(); response()->json($res); } }
Útválasztás
- app/routes/api.php
<?php require "app/controllers/TodoController.php"; app()->get('/api/todos', 'TodoController@index'); app()->post('/api/todos', 'TodoController@create'); app()->put('/api/todos/{id}', 'TodoController@update'); app()->delete('/api/todos/{id}', 'TodoController@delete');
Azonosítás
Függőség telepítése
composer require leafs/auth
AuthController
- app/controllers/AuthController.php
<?php class AuthController { public function __construct() { auth()->connect('', 'db.sqlite', '', '', 'sqlite'); } public function login() { $data = auth()->login([ 'username' => request()->get('username'), 'password' => request()->get('password') ]); response()->json(['auth' => $data]); } public function register() { $data = auth()->register([ 'username' => request()->get('username'), 'password' => request()->get('password') ], ['username']); if(!$data) { $data = auth()->errors(); } response()->json(['auth' => $data]); } }
Köztes szoftver
- app/middlewares/Auth.php
<?php auth()->connect('', 'db.sqlite', '', '', 'sqlite'); app()->registerMiddleware('auth', function () { $id = auth()->id(); if (!$id) { response()->exit([ 'status' => 'error', 'message' => 'Not authorized' ], 401); } });
Útvonalak védelme
- app/routes/api.php
<?php require "app/controllers/TodoController.php"; require "app/controllers/AuthController.php"; require "app/middlewares/Auth.php"; app()->get('/api/todos', 'TodoController@index'); app()->post('/api/login', 'AuthController@login'); app()->post('/api/register', 'AuthController@register'); app()->group('/', ['middleware' => 'auth', function () { app()->post('/api/todos', 'TodoController@create'); app()->put('/api/todos/{id}', 'TodoController@update'); app()->delete('/api/todos/{id}', 'TodoController@delete'); }]);
Cors
composer require leafs/cors
vagy:
leaf install cors
- index.php
<?php require __DIR__ . '/vendor/autoload.php'; require 'app/routes/api.php'; app()->cors(); app()->run();
Beállítás:
app()->cors([ 'origin' => 'http://example.com', 'optionsSuccessStatus' => 200 ]);
oktatas/web/back-end_framework/leaf/minimalis.txt · Utolsó módosítás: 2024/09/16 23:20 szerkesztette: admin