⚔️CRUD ოპერაციები
რა არის CRUD ოპერაციები
CRUD არის აკრონიმი, და ის გულისხმობს 4 ოპერაციას, რომლებიც აუცილებელია ყოველი აპლიკაციისთვის რომელიც მონაცემთა ბაზებთან ან რაიმე სახის storage-თან მუშაობს. ეს ოთხი ოპერაცია არის შემდეგი: create, read, update, delete. ამ სტატიაში განხილულია ლარაველის კონვენციები CRUD ოპერაციებთან დაკავშირებით. კონკრეტულად თუ როგორი ფორმატით უნდა გვეწეროს შესაბამისი როუტები და რა მეთოდები უნდა გააჩნდეთ შესაბამის კონტროლერებს. მოდი შევქმნათ ძალიან მარტივი აპლიკაცია, რომელსაც შეეძლება პოსტების ბაზიდან წამოღება, ჩაწერა, განახლება, და წაშლა. ჩვენ გვაქვს Post მოდელი და შესაბამისი მიგრაცია. Post-ს გააჩნია მხოლოდ 2 პარამეტრი 'title' და 'body'. რომლის შესაბამისი მიგრაციაც და მოდელიც შემდეგნაირად გამოიყრება:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
protected $guarded = ['id'];
}
Webის როუტებთან დაკავშირებული კონვენციები
როუტები და კონტროლერის მეთოდები სტანდარტულ აპლიკაციასში, სადაც ვაბრუნებთ გარკვეულ View ებს და ასევე აღვწერთ ბაზასთან მუშაობის ლოგიკას.
ამ შემთხვევაში როუტების აღსაწერად ჩვენ ვმუშაობთ web.php ფაილში, და კონტროლერებს ვქმით app/Http/Controllers/ - დირექტორიაში
<?php
use App\Http\Controllers\PostController;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group that
| contains the "web" middleware group. Now create something great!
|
*/
Route::group(['controller' => PostController::class], function () {
Route::get('/posts', 'index')->name('posts.index');
Route::get('/posts/{post}', 'show')->name('posts.show');
Route::get('/posts/create', 'create')->name('posts.create');
Route::post('/posts', 'store')->name('posts.store');
Route::get('/posts/{post}/edit', 'edit')->name('posts.edit');
Route::put('/posts/{post}', 'update')->name('posts.update');
Route::delete('/posts/{post}', 'destroy')->name('posts.destroy');
});
// PostController-ში აღწერილია თუ რომელი როუტი აბრუნებს View-ს
// და არომელი როუტი ასრულებს გარკვეულ ფუნქციონალს
API-ის როუტებთან დაკავშირებული კონვენციები
წინა მაგალითისაგან განსხვავებით როდესაც ჩვენ გვინდა მხოლოდ API-ს შექმნა, ამჟამად უკვე აღარ გვიწევს View ების დაბრუნება და ჩვენს API-ის ექნება შემდეგი სახე:
ამ შემთხვევაში როუტების აღსაწერად ჩვენ ვმუშაობთ api.php ფაილში, და კონტროლერებს ვქმით app/Http/Controllers/Api - დირექტორიაში
<?php
use App\Http\Controllers\PostController;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::group(['controller' => ProductController::class], function () {
Route::get('/posts', 'index')->name('posts.index');
Route::get('/posts/{post}', 'get')->name('posts.get');
Route::post('/posts', 'store')->name('posts.store');
Route::put('/posts/{post}', 'update')->name('posts.update');
Route::delete('/posts/{post}', 'destroy')->name('posts.destroy');
});
ეს სტატია ეხება მხოლოდ ქრუდ ოპერაციებს, ანუ ოეპრაციებს რომელიც უშუალოდ დაკავშირებულია მონაცემის ბაზაში ჩაწერის, წაკითხვის, განახლებისა და წაშლის ფუნქციონალთან. შესაბამისად სხვა სახის ლოგიკის იმპლემენტაციისას მაგალითად როგორიც არის ავტორიზაცია რეგისტრაცია და ლოგაუთი არ არის საჭირო, და პირიქით ცუდიც კია რო კონტროლერის მეთოდებს დავარქვათ ასეთი სახელები
// [!] არასწორი ვარიანტი
class AuthController extends Controller
{
public function index(){}
public function store(){}
public function destroy(){}
}
// [!] სწორი ვარიანტი
class AuthController extends Controller
{
public function login(){}
public function register(){}
public function logout(){}
}
Last updated