Стани премиум член и добиј попуст на 2000+ производи и куп други бенефити!

Туторијал RESTful API со Laravel 12

Fatal1ty_

Großmeister
28 февруари 2008
23.841
34.031
roka.mk
Здраво на сите, Во два дела ќе се обидам да склопам комплетен водич како да креирате RESTful API со Laravel 12. Материјалот ќе го поминуваме чекор по чекор, од основите па се до тестирање на Rest API-то што ќе го изработиме. При изработката на овој Rest API исто така ќе го поминеме и чекорот за прикачуваме слики во Laravel.

Освен тоа, ќе ја искористиме и вградената функционалност на Laravel наречена API Resources. Со користење на API Resources можеме многу лесно и брзо да ги трансформираме податоците од Моделот во JSON формат.

Чекор 1: Инсталација на Composer

За да го инсталирате Composer, може да ги следите чекорите што се дадени на официјалната веб-страница, односно на:

  1. Windows: Упатство за инсталација
  2. Linux / Unix / macOS: Упатство за инсталација
Откако ќе го завршите процесот на инсталација, можеме да провериме дали се е во ред во терминалот/CMD со внесување на следнава команда.

Код:
composer

Ако сe е успешно, ќе се појави резултат како на сликата.
Screenshot_1.jpg

Чекор 2: Креирање на Laravel 12 проект

Откако Composer е успешно инсталиран, сега можеме да започнеме со креирање на Laravel 12 проектот. Влезете во папката каде што сакате да го зачувате проектот, а потоа извршете ја следнава команда во терминалот/CMD.

Код:
composer create-project --prefer-dist laravel/laravel:^12.0 laravel12-api

Горенаведената команда ќе создаде нов Laravel проект со верзија 12, а името на проектот што ќе се користи е laravel12-api.

Почекајте процесот на инсталација да заврши и осигурете се дека сте поврзани на интернет.

Чекор 3: Стартување на Laravel 12 проектот

Сега ќе научиме како да го стартуваме Laravel 12 проектот што штотуку го создадовме. Извршете ја следнава команда во терминалот/CMD.

Код:
cd laravel12-api

Откако успешно ќе влезете во папката на проектот, сега извршете ја следнава команда во терминалот/CMD.

Код:
php artisan serve

Горенаведената команда се користи за стартување на Laravel серверот. Ако се помине успешно, нашиот проект ќе се стартува на localhost со порта 8000.

Може да го отворите во прелистувачот со внесување на http://localhost:8000, и ако се е во ред, ќе се прикаже резултат како следниов.
Screenshot_2.jpg

Чекор 4: Конфигурација на File System драјверот

Следен чекор е даконфигурираме File System во Laravel 12. Оваа конфигурација е важна затоа што ќе прикачуваме слики. Со соодветна конфигурација, прикачената датотека ќе се зачува во папката storage со јавен пристап.

Отворете ја датотеката .env, а потоа побарајте го следниов код.

FILESYSTEM_DISK=local

Потоа сменете го за да изгледа вака.

FILESYSTEM_DISK=public

Со оваа промена на кодот го менуваме стандардниот драјвер што го користи file system-от од local во public.

што значи, ако го користиме драјверот local, прикачената датотека ќе оди во папката storage/app/private, па нема да можеме директно да и пристапиме.

Затоа го менувам драјверот во public, за да може прикачената датотека да се зачува во storage/app/public и лесно да и пристапуваме.

Чекор 5 Стартување: на Storage Link

Storage Link се користи за да се направи symlink, односно да се поврзе одредена папка во Laravel проектот. Во Laravel може да пристапуваме само до датотеките што се наоѓаат во папката public, додека датотеките што ќе ги прикачуваме ќе се наоѓаат во папката storage.

Поради тоа мора да ја поврземе папката storage со папката public. На тој начин ќе можеме да пристапуваме до прикачените датотеки преку папката public.

Извршете ја следнава команда во терминалот/CMD и осигурете се дека се наоѓате во Laravel проектот.

Код:
php artisan storage:link

Креирање на Модел и Migration

Чекор 1: Конфигурација на конекцијата кон базата на податоци


Пред да создадеме Модел и Migration, секако прво мора да ја конфигурираме конекцијата кон базата на податоци во Laravel.

Конфигурирањето на базата во Laravel е доста лесно. Отворете ја датотеката .env, а потоа побарајте го следниов код.

Код:
.env

DB_CONNECTION=sqlite

# DB_HOST=127.0.0.1

# DB_PORT=3306

# DB_DATABASE=laravel

# DB_USERNAME=root

# DB_PASSWORD=

Потоа сменете го за да изгледа вака.

Код:
.env

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=db_laravel12_api

DB_USERNAME=root

DB_PASSWORD=

Погоре, најпрво го менуваме драјверот на конекцијата од sqlite во mysql. Потоа за DB_DATABASE ставаме db_laravel12_api.

Што се однесува до DB_USERNAME, го пополнуваме со root, а DB_PASSWORD оставете го празно (доколку користите XAMPP).

Чекор 2: Креирање на Модел и Migration

Откако успешно ја конфигуриравме конекцијата кон базата во Laravel 12, можеме да продолжиме со учењето како да создадеме Модел и Migration.

Извршете ја следнава команда во терминалот/CMD и осигурете се дека се наоѓате во Laravel проектот.

Код:
php artisan make:model Product -m

Ако се помине успешно, ќе добиеме 2 нови датотеки што се наоѓаат во папките:

  • app/Models/Product.php
  • database/migrations/2026_06_26_012027_create_products_table.php
Важно: името на migration датотеката ќе биде случајно, според датумот на нејзиното создавање.

Чекор 3: Додавање на полиња/колони во Migration

Сега ќе продолжиме со додавање на полиња или колони во migration датотеката. Отворете ја следнава датотека database/migrations/2026_06_26_012027_create_products_table.php, а потоа во function up сменете го кодот за да изгледа вака.

database/migrations/2026_06_26_012027_create_products_table.php

PHP:
public function up(): void

{

Schema::create('products', function (Blueprint $table) {

$table->id();

$table->string('image');

$table->string('title');

$table->text('description');

$table->bigInteger('price');

$table->integer('stock')->default(0);

$table->timestamps();

});

}

Со оваа промена на кодот додаваме 5 полиња, а тоа се:
Screenshot_3.jpg

Чекор 4: Конфигурација на Mass Assignment

Mass Assignment
е функционалност во Laravel што ни овозможува да пополниме повеќе колони во базата истовремено користејќи низа од податоци. Ова е многу корисно во процесите на креирање и ажурирање, особено при користење на Eloquent Model.

Отворете ја датотеката app/Models/Product.php, а потоа сменете го целиот код за да изгледа вака.

PHP:
<?php

namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model

{

/**

* fillable

*

* @var array

*/

protected $fillable = [

'image',

'title',

'description',

'price',

'stock',

];

}

Со оваа промена на кодот го додаваме својството $fillable. Ова својство се користи за да се одреди кои полиња/колони смеат да се пополнуваат.

Чекор 5: Стартување на Migration

Извршете ја следнава команда во терминалот/CMD и осигурете се дека се наоѓате во Laravel проектот.

Код:
php artisan migrate

Ако се појави излез како следниов, тоа значи дека се уште немаме база во MySQL со името db_laravel12_api и не прашува дали сакаме да ја создадеме. Изберете Yes и притиснете ENTER.

WARN The database 'db_laravel12_api' does not exist on the 'mysql' connection.
┌ Would you like to create it? ────────────────────────────────┐

│ ● Yes / ○ No │
Screenshot_4.jpg
Ако проверите во PhpMyAdmin на http://localhost/phpmyadmin, ќе видите дека табелите се успешно генерирани заедно со полињата во нив.

Screenshot_5.jpg

Чекор 6: Додавање на Accessor во Моделот

Accessor ни овозможува да ја смениме вредноста кога се пристапува до одредено поле. За да дефинираме Accessor, можеме да создадеме метод во Моделот со кој ќе го одредиме полето до кое ќе се пристапува.

Сега ќе создадеме Accessor во Моделот за полето image, па затоа отворете ја датотеката app/Models/Product.php, а потоа сменете го кодот за да изгледа вака.
PHP:
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;

class Product extends Model

{

/**

* fillable

*

* @var array

*/

protected $fillable = [

'image',

'title',

'description',

'price',

'stock',

];



/**

* image

*

* @return Attribute

*/

protected function image(): Attribute

{

return Attribute::make(

get: fn ($image) => url('/storage/products/' . $image),

);

}

}

Со оваа промена на кодот, најпрво го импортираме Cast Attribute.

PHP:
use Illuminate\Database\Eloquent\Casts\Attribute;

Потоа создаваме нов метод со името image(). Во овој метод правиме return на полето image за да генерира целосна URL патека од папката storage.

Значи, кога ќе го повикаме полето image, автоматски ќе се генерира излез како следниов.

Код:
domain.com/storage/products/ime_na_datoteka_slika.webp

Креирање на API Resources

Што е API Resources?


API Resources во Laravel е функционалност што се користи за претворање на податоците од Eloquent Моделот во поструктуиран и полесно управлив JSON формат. Ова е корисно при градење на API, бидејќи ни овозможува да контролираме како податоците се испраќаат до клиентот.

Зошто да користиме API Resources?

  1. Одвојување на логиката од презентацијата на податоците - API Resources ни помага да контролираме кои податоци се испраќаат до клиентот без да го менуваме моделот или контролерот.
  2. Безбедност на податоците - Спречува чувствителните податоци (како лозинки) ненамерно да бидат испратени до клиентот.
  3. Конзистентност на форматот на одговорот - Му олеснува на frontend-от да прима податоци во јасен формат.
Чекор 1: Креирање на API Resources

Извршете ја следнава команда во терминалот/CMD и осигурете се дека се наоѓате во Laravel проектот.

Код:
php artisan make:resource ProductResource

Ако горенаведената команда се изврши успешно, ќе добиеме 1 нова датотека што се наоѓа во папката app/Http/Resources/ProductResource.php.

Чекор 2: Прилагодување на одговорот

Всушност, стандардно генерираниот API Resource може веднаш да се користи, но бидејќи сакаме да го прилагодиме саканиот JSON формат, потребно е да направиме мала модификација во таа датотека.

Отворете ја датотеката app/Http/Resources/ProductResource.php, а потоа сменете го целиот код за да изгледа вака.

PHP:
<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class ProductResource extends JsonResource

{

//define properties

public $status;

public $message;

public $resource;



/**

* __construct

*

* @param mixed $status

* @param mixed $message

* @param mixed $resource

* @return void

*/

public function __construct($status, $message, $resource)

{

parent::__construct($resource);

$this->status = $status;

$this->message = $message;

}



/**

* toArray

*

* @param mixed $request

* @return array

*/

public function toArray(Request $request): array

{

return [

'success' => $this->status,

'message' => $this->message,

'data' => $this->resource

];

}

}

Со оваа промена на кодот, најпрво додаваме 3 својства, а тоа се:

PHP:
//define properties

public $status;

public $message;

public $resource;

Овие својства се користат за складирање на статусот, пораката и податоците што ќе се испратат во JSON одговорот.

Потоа создаваме method _construct што прима 3 параметри, а тоа се $status, $message и $resource. Овој конструктор ќе се повика за да ги иницијализира вредностите на својствата $status и $message со вредностите што подоцна ќе ги достави контролерот.

PHP:
public function __construct($status, $message, $resource)

{

parent::__construct($resource);

$this->status = $status;

$this->message = $message;

}

Потоа, во методот toArray го менуваме делот со return, со цел да враќа JSON формат што одговара на нашите потреби.

Значи, целта на овој ProductResource е да ги претвори податоците од Моделот Product во JSON формат што одговара на потребите, вклучувајќи додавање на одредена информација за статусот и пораката.

Прикажување на податоци од базата

Чекор 1: Креирање на Product контролер


Сега, извршете ја следнава команда во терминалот/CMD и осигурете се дека се наоѓате во Laravel проектот.

Код:
php artisan make:controller Api/ProductController

Ако горенаведената команда се изврши успешно, ќе добиеме нова датотека што се наоѓа во папката app/Http/Controllers/Api/ProductController.php.

Отворете ја таа датотека, а потоа сменете го целиот код за да изгледа вака.

PHP:
<?php

namespace App\Http\Controllers\Api;

//import model Product

use App\Models\Product;

use App\Http\Controllers\Controller;

//import resource ProductResource

use App\Http\Resources\ProductResource;

class ProductController extends Controller

{

/**

* index

*

* @return void

*/

public function index()

{

//get all products

$products = Product::latest()->paginate(5);



//return collection of products as a resource

return new ProductResource(true, 'List Data Products', $products);

}

}

Со оваа промена на кодот, најпрво го импортираме Моделот Product.

PHP:
 //import model Product

use App\Models\Product;

Потоа, го импортираме и API Resource-от што претходно го создадовме, односно ProductResource.

PHP:
 //import resource ProductResource

use App\Http\Resources\ProductResource;

Во класата ProductController додаваме нов метод со името index.

PHP:
public function index()

{



//...



}

Во тој метод преземаме податоци од базата преку Моделот Product.

PHP:
 //get all products

$products = Product::latest()->paginate(5);

Потоа само ја парсираме горенаведената променлива $products во ProductResource.

PHP:
 //return collection of products as a resource

return new ProductResource(true, 'List Data Products', $products);


Чекор 2: Креирање на Route за Rest API

Извршете ја следнава команда во терминалот/CMD и осигурете се дека се наоѓате во Laravel проектот.

Код:
php artisan install:api

Кога ќе се изврши горенаведената команда, автоматски ќе се преземе библиотеката наречена sanctum, но засега нема да ја користиме таа библиотека.

Сега route-от за Rest API е достапен во папката routes/api.php. Отворете ја таа датотека и сменете го кодот за да изгледа вака.

PHP:
<?php

use Illuminate\Support\Facades\Route;

//import controller ProductController
use App\Http\Controllers\Api\ProductController;

//products

Route::apiResource('/products', ProductController::class);

Со оваа промена на кодот, најпрво го импортираме product контролерот.

PHP:
//import controller ProductController

use App\Http\Controllers\Api\ProductController;

Потоа создаваме конфигурација за route од типот apiResource, така што Laravel автоматски создава 5 вградени route-и за CRUD на products.

За да ја видите целосната листа на создадените route-и, извршете ја следнава команда во терминалот/CMD.

Код:
php artisan route:list

Излезот што ќе се појави во терминалот/CMD.

Screenshot_6.jpg

Чекор 3: Тестирање на RESTful API


ПРЕЗЕМЕТЕ POSTMAN: Download Postman | Get Started for Free

Сега, отворете ја апликацијата Postman, а потоа внесете ја следнава URL адреса , а за методот изберете GET.

Откако сте готови, кликнете на Send, и ако сè помине успешно, ќе го добиете следниов резултат.
Код:
{
  "success": true,
  "message": "List Data Products",
  "data": {
    "current_page": 1,
    "data": [],
    "first_page_url": "http://localhost:8000/api/products?page=1",
    "from": null,
    "last_page": 1,
    "last_page_url": "http://localhost:8000/api/products?page=1",
    "links": [
      {
        "url": null,
        "label": "&laquo; Previous",
        "active": false
      },
      {
        "url": "http://localhost:8000/api/products?page=1",
        "label": "1",
        "active": true
      },
      {
        "url": null,
        "label": "Next &raquo;",
        "active": false
      }
    ],
    "next_page_url": null,
    "path": "http://localhost:8000/api/products",
    "per_page": 5,
    "prev_page_url": null,
    "to": null,
    "total": 0
  }
}

Screenshot_7.jpg

Погоре се уште не прикажуваме никакви податоци, бидејќи се уште немаме податоци во базата. Она што се прикажува е празна низа.

Код:
data: []

Во следниот пост работа со живи податоци
 

Fatal1ty_

Großmeister
28 февруари 2008
23.841
34.031
roka.mk
Внесување на податоци во базата

Чекор 1: Додавање на методот Store

Тука ќе додадеме 1 нов метод во контролерот ProductController, а тоа е store. Овој метод подоцна ќе се користи за процесот на внесување на податоци во базата.

Отворете ја датотеката app/Http/Controllers/Api/ProductController.php, а потоа сменете го кодот за да изгледа вака.

PHP:
<?php

namespace App\Http\Controllers\Api;

//import model Product

use App\Models\Product;

use App\Http\Controllers\Controller;

//import resource ProductResource

use App\Http\Resources\ProductResource;

//import Http request

use Illuminate\Http\Request;



//import facade Validator

use Illuminate\Support\Facades\Validator;

class ProductController extends Controller

{

/**

* index

*

* @return void

*/

public function index()

{

//get all products

$products = Product::latest()->paginate(5);



//return collection of products as a resource

return new ProductResource(true, 'List Data Products', $products);

}



/**

* store

*

* @param mixed $request

* @return void

*/

public function store(Request $request)

{

//define validation rules

$validator = Validator::make($request->all(), [

'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',

'title' => 'required',

'description' => 'required',

'price' => 'required|numeric',

'stock' => 'required|numeric',

]);



//check if validation fails

if ($validator->fails()) {

return response()->json($validator->errors(), 422);

}



//upload image

$image = $request->file('image');

$image->storeAs('products', $image->hashName());



//create product

$product = Product::create([

'image' => $image->hashName(),

'title' => $request->title,

'description' => $request->description,

'price' => $request->price,

'stock' => $request->stock,

]);



//return response

return new ProductResource(true, ‘Податоците за производот се успешно додаден!', $product);

}

}

Со оваа промена на кодот, најпрво го импортираме Http request-от од Laravel. Ова се користи за да може контролерот да го прима request-от што го испраќа корисникот.

PHP:
//import Http request

use Illuminate\Http\Request;



Бидејќи ќе има процес на внесување на податоци во базата, потребно е да ставиме валидација на податоците што ќе се внесуваат. Поради тоа, го импортираме Facade-от Validator од Laravel.

PHP:
 //import facade Validator

use Illuminate\Support\Facades\Validator;



Во класата ProductController создаваме нов метод со името store.

PHP:
public function store(Request $request)

{



//...



}

Во тој метод, најпрво пишуваме код за валидација на request-от што пристигнува.

PHP:
//define validation rules

$validator = Validator::make($request->all(), [

'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',

'title' => 'required',

'description' => 'required',

'price' => 'required|numeric',

'stock' => 'required|numeric',

]);

Ако request-от не одговара на горенаведената валидација, тогаш ќе направиме return во JSON формат со статус код 422 и ќе дадеме информација поврзана со грешката при валидацијата.

PHP:
//check if validation fails

if ($validator->fails()) {

return response()->json($validator->errors(), 422);

}

Но ако сите барања од request-от се во согласност со очекуваното, тогаш првата работа што ја правиме е прикачување на сликата користејќи го методот storeAs.

PHP:
//upload image

$image = $request->file('image');

$image->storeAs('products', $image->hashName());



Погоре, сликата што ќе се прикачи ќе биде сместена во storage папката на Laravel, која се наоѓа во storage/app/public/products. Ако проверите во моментов, таа папка се уште не постои, бидејќи ќе се генерира дури кога подоцна ќе има прикачена датотека.

Откако прикачувањето на сликата е успешно завршено, следниот чекор е процесот на внесување на податоците во базата користејќи го Моделот.

PHP:
//create product

$product = Product::create([

'image' => $image->hashName(),

'title' => $request->title,

'description' => $request->description,

'price' => $request->price,

'stock' => $request->stock,

]);

Ако процесот на внесување на податоците е успешно завршен, тогаш ќе го повикаме ProductResource за да прикажеме порака за успех и да ги прикажеме податоците за производот што се внесени, во JSON формат.

PHP:
//return response

return new ProductResource(true, ‘Податокот за производот е успешно додаден!', $product);

Чекор 2: Тестирање на Rest API за внесување

Сега, отворете ја апликацијата Postman, а потоа внесете ја следнава URL адреса http://localhost:8000/api/products, а за методот изберете POST.

Потоа, влезете во табот Body и изберете form-data, а потоа внесете ги следниве key и value.

image, title, description, price, stock

Откако сте готови, кликнете на Send, и ако се помине успешно, ќе го добиете следниов резултат.
Screenshot_8.jpg

Прикажување на детали за податокот според ID

Чекор 1: Додавање на методот Show

Отворете го контролерот во датотеката app/http/Controllers/Api/ProductController.php, а потоа сменете го целиот код за да изгледа вака.

PHP:
<?php

namespace App\Http\Controllers\Api;

//import model Product

use App\Models\Product;

use App\Http\Controllers\Controller;

//import resource ProductResource

use App\Http\Resources\ProductResource;

//import Http request

use Illuminate\Http\Request;



//import facade Validator

use Illuminate\Support\Facades\Validator;



class ProductController extends Controller

{

/**

* index

*

* @return void

*/

public function index()

{

//get all products

$products = Product::latest()->paginate(5);



//return collection of products as a resource

return new ProductResource(true, 'List Data Products', $products);

}

/**

* store

*

* @param mixed $request

* @return void

*/

public function store(Request $request)

{

//define validation rules

$validator = Validator::make($request->all(), [

'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',

'title' => 'required',

'description' => 'required',

'price' => 'required|numeric',

'stock' => 'required|numeric',

]);



//check if validation fails

if ($validator->fails()) {

return response()->json($validator->errors(), 422);

}



//upload image

$image = $request->file('image');

$image->storeAs('products', $image->hashName());



//create product

$product = Product::create([

'image' => $image->hashName(),

'title' => $request->title,

'description' => $request->description,

'price' => $request->price,

'stock' => $request->stock,

]);



//return response

return new ProductResource(true, 'Податокот за производот е успешно додаден

!', $product);

}



/**

* show

*

* @param mixed $id

* @return void

*/

public function show($id)

{

//find product by ID

$product = Product::find($id);



//return single product as a resource

return new ProductResource(true, 'Детали за производот!', $product);

}

}

Со оваа промена на кодот додаваме нов метод со името show, а во неговиот параметар ја ставаме променливата $id. Таа променлива подоцна ќе биде динамична и ќе ја презема вредноста од URL адресата.

PHP:
public function show($id)

{



//...



}

Во тој метод преземаме податоци од базата користејќи го Моделот Product со методот find, на кој му го задаваме параметарот $id.

PHP:
//find product by ID

$product = Product::find($id);

Ако податокот е пронајден, тогаш правиме return користејќи го ProductResource, испраќајќи ги податоците за производот што ги презедовме погоре.

PHP:
//return single product as a resource

return new ProductResource(true, 'Detail Data Product!', $product);

Чекор 2: Тестирање на Rest API

Отворете ја апликацијата Postman, а потоа внесете ја следнава URL адреса http://localhost:8000/api/products/1, а за методот изберете GET.

Погоре даваме пример за преземање со ID 1.

Откако сте готови, кликнете на Send, и ако се помине успешно, ќе го добиете следниов резултат.
Screenshot_9.jpg

Ажурирање на податоци во базата

Чекор 1: Додавање на методот Update

Сега, отворете ја датотеката на контролерот ProductController што се наоѓа во папката app/Http/Controllers/Api/ProductController.php, а потоа додадете го кодот за да изгледа вака.

PHP:
public function update(Request $request, $id)

{

//define validation rules

$validator = Validator::make($request->all(), [

'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',

'title' => 'required',

'description' => 'required',

'price' => 'required|numeric',

'stock' => 'required|numeric',

]);



//check if validation fails

if ($validator->fails()) {

return response()->json($validator->errors(), 422);

}



//find product by ID

$product = Product::find($id);



//check if image is not empty

if ($request->hasFile('image')) {



//delete old image

Storage::delete('products/' . basename($product->image));



//upload image

$image = $request->file('image');

$image->storeAs('products', $image->hashName());



//update product with new image

$product->update([

'image' => $image->hashName(),

'title' => $request->title,

'description' => $request->description,

'price' => $request->price,

'stock' => $request->stock,

]);



} else {



//update product without image

$product->update([

'title' => $request->title,

'description' => $request->description,

'price' => $request->price,

'stock' => $request->stock,

]);

}



//return response

return new ProductResource(true, 'Податоците се ажурирани!', $product);

}



Со оваа промена на кодот, најпрво го импортираме Facade-от Storage од Laravel. Него ќе го користиме, меѓу другото, за бришење на датотеката со сликата од серверот.

PHP:
//import facade Storage

use Illuminate\Support\Facades\Storage;

Потоа, во класата ProductController додаваме нов метод со името update, а во тој метод примаме 2 параметри, а тоа се $request и $id.

Параметарот $request ќе ги содржи податоците што ги испраќа корисникот, како што се податоците за сликата, насловот или описот. Додека параметарот $id ќе го содржи ID-то на податокот за производот што ќе се ажурира.

PHP:
public function update(Request $request, $id)

{



//...



}

Во тој метод, првата работа што ја правиме е да создадеме валидација на request-от што пристигнува.

PHP:
//define validation rules

$validator = Validator::make($request->all(), [

'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048',

'title' => 'required',

'description' => 'required',

'price' => 'required|numeric',

'stock' => 'required|numeric',

]);

Од горенаведеното додавање на валидацијата, следува целосното објаснување.

Ако request-от што пристигнува не одговара на горенаведената валидација, тогаш ќе направиме return во JSON формат со информација за грешката при валидацијата.

PHP:
//check if validation fails

if ($validator->fails()) {

return response()->json($validator->errors(), 422);

}

Потоа преземаме податоци за производот од базата преку Моделот Product со методот find, врз основа на параметарот $id.

PHP:
//find product by ID

$product = Product::find($id);

Потоа создаваме услов за да провериме дали постои request со датотека наречена image.

PHP:
//check if image is not empty

if ($request->hasFile('image')) {



//избриши ја старата слика



//прикачи ја новата слика



//ажурирај го производот со новата слика



} else {



//ажурирај го производот без слика



}

Погоре, ако постои request image, тоа значи дека ќе правиме промена на сликата, а првата работа што се прави е бришење на старата слика.

PHP:
//delete old image

Storage::delete('products/' . basename($product->image));

Потоа прикачување на новата слика.

PHP:
//upload image

$image = $request->file('image');

$image->storeAs('products', $image->hashName());

И ажурирање на податоците за производот со новата слика.

PHP:
//update product with new image

$product->update([

'image' => $image->hashName(),

'title' => $request->title,

'description' => $request->description,

'price' => $request->price,

'stock' => $request->stock,

]);

Додека пак, ако request image е празен или null, тогаш само ги ажурираме податоците за производот без слика.

PHP:
//update product without image

$product->update([

'title' => $request->title,

'description' => $request->description,

'price' => $request->price,

'stock' => $request->stock,

]);

Потоа резултатот го враќаме користејќи го ProductResource за да биде форматиран во JSON.

PHP:
//return response

return new ProductResource(true, ‘Податоците се ажурирани', $product);

Чекор 2: Тестирање на Rest API

Отворете ја апликацијата Postman, а потоа внесете ја следнава URL адреса http://localhost:8000/api/products/1, а за методот изберете POST.

Погоре даваме пример за ажурирање со ID 1.

Потоа изберете го табот Body и изберете form-data, а потоа внесете ги следниве key и value.

Погоре, го додаваме key-от _method со вредност PUT, што укажува дека ова е процес на ажурирање на податоци.

Откако сте готови, кликнете на Send, и ако ср помине успешно, ќе го добиете следниов резултат.

Screenshot_10.jpg


Бришење на податоци од базата

Чекор 1: Додавање на методот Destroy

Отворете ја датотеката на контролерот app/Http/Controllers/Api/ProductController.php, а потоа додадете го кодот:

PHP:
public function destroy($id)

{

//find product by ID

$product = Product::find($id);

//delete image

Storage::delete('products/'.basename($product->image));

//delete product

$product->delete();

//return response

return new ProductResource(true, 'Производот е избришан!', null);

}

Погоре додаваме нов метод со името destroy, а во неговиот параметар ја задаваме вредноста $id. Таа вредност ќе биде динамична и нејзината вредност ќе се презема од URL адресата.

PHP:
public function destroy($id)

{



//...



}

Внатре во него преземаме податоци за производот врз основа на $id користејќи го Моделот.

PHP:
//find product by ID

$product = Product::find($id);

Ако податокот е успешно преземен, следниот чекор е бришење на датотеката со сликата од серверот користејќи го Facade-от Storage.

PHP:
//delete image

Storage::delete('products/'.basename($product->image));

Потоа го бришеме податокот за производот користејќи го методот delete().

PHP:
//delete product

$product->delete();

На крајот, правиме return користејќи го ProductResource за податоците да се прикажат во JSON формат.

PHP:
//return response

return new ProductResource(true, 'Производот е избришан!', null);

Чекор 2: Тестирање на Rest API

Сега, отворете ја апликацијата Postman, а потоа внесете ја следнава URL адреса http://localhost:8000/api/products/1, а за методот изберете DELETE.

Откако сте готови, кликнете на Send, и ако се помине успешно, ќе добиеме JSON одговор што горе-долу изгледа вака.

Screenshot_11.jpg

Неколку зборови за крај

Имајте на ум дека ова е само школски пример како се прави сето тоа, за посериозни проекти освен овие основни работи, ќе ви биде потребно и авторизација, генерирање на токени, request limits и уште доста работи за да направите една стабилна бекенд врска.

До следното читање.
 
Последна промена:
членови онлајн
мислења
теми
членови

Последни огласи

IT.mk/market понуда

Бесплатна достава на 3000 производи
На врв Дно