TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #64 721
فصل دو - Controllers

بخش دوم - کنترلر های API و Dependency Injection


کنترلر های API:


کنترلرهای API به‌طور خاص برای مدیریت درخواست‌های API استفاده می‌شوند. در اینجا توضیحاتی درباره کنترلرهای API در لاراول ارائه می‌شود:

برای ایجاد یک کنترلر API، می‌توانید از دستور زیر استفاده کنید:
php artisan make:controller Api/UserController --api



این دستور یک کنترلر جدید در مسیر app/Http/Controllers/Api ایجاد می‌کند که شامل متدهای پایه‌ای مانند index, store, show, update و destroy می‌شود.

برای دسترسی به متدهای کنترلر API، باید مسیرهای مناسب را تعریف کنید. در فایل routes/api.php، می‌توانید مسیرها را به صورت زیر تعریف کنید:

برای تعریف این مسیر ها از متد جدیدی از فساد Route استفاده می کنیم:
use App\Http\Controllers\Api\MyController;

Route::apiResource('users', MyController::class);



در صورتی که فایل api.php برای شما در پوشه routes وجود ندارد با دستور زیر آن را ایجاد کنید:
php artisan install:api



تفاوت یک کنترلر API با کنترلر Resource در این است که متد های create و edit در کنترلر API وجود ندارد، زیرا در API ها نیازی به رندر کردن View نیست.

دپندنسی اینجکشن در کنترلر ها:

دپندنسی اینجکشن (Dependency Injection) یکی از اصول مهم طراحی شیءگرا است که به شما کمک می‌کند وابستگی‌های کلاس‌ها را مدیریت کنید و کد قابل تست و قابل نگهداری بنویسید. در لاراول، دپندنسی اینجکشن به سادگی با استفاده از سیستم سرویس کانتینر (Service Container) این فریمورک امکان‌پذیر است.

نکته: درمورد سرویس کانتینر و پروایدر ها در فصل های آینده به طور مفصل توضیح داده می شود.

دپندنسی اینجکشن به این معنا است که یک کلاس به جای اینکه خودش مسئول ایجاد وابستگی‌هایش باشد، این وابستگی‌ها از بیرون به آن تزریق می‌شوند. به عبارت دیگر، وابستگی‌های یک کلاس به عنوان پارامترهای سازنده (constructor) یا متدهای دیگر به آن تحویل داده می‌شوند.

فرض کنید می‌خواهیم یک کنترلر ایجاد کنیم که برای انجام عملیات‌های مربوط به یک مخزن داده (Repository) نیاز به یک سرویس دارد.

ابتدا یک اینترفیس برای مخزن داده تعریف می‌کنیم:
// app/Repositories/UserRepositoryInterface.php
namespace App\Repositories;

interface UserRepositoryInterface {
public function all();
}



سپس یک پیاده‌سازی برای این اینترفیس ایجاد می‌کنیم:
// app/Repositories/UserRepository.php
namespace App\Repositories;

use App\Models\User;

class UserRepository implements UserRepositoryInterface {
public function all() {
return User::all();
}
}



باید پیاده‌سازی مخزن را در سرویس کانتینر لاراول ثبت کنیم تا بتوانیم آن را به کنترلر تزریق کنیم. برای این کار، از یک سرویس پروایدر استفاده می‌کنیم.

می توانید با دستور زیر یک پروایدر ایجاد کنید:
php artisan make:provider RepositoryServiceProvider 



// app/Providers/RepositoryServiceProvider.php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\UserRepositoryInterface;
use App\Repositories\UserRepository;

class RepositoryServiceProvider extends ServiceProvider {
public function register() {
$this->app->bind(UserRepositoryInterface::class, UserRepository::class);
}
}



سپس این سرویس پروایدر را به لیست پروایدرهای اپلیکیشن اضافه می‌کنیم:

// bootstrap/providers.php
return [
App\Providers\AppServiceProvider::class,
App\Providers\RepositoryServiceProvider::class,
];



حالا می‌توانیم این مخزن را به کنترلر تزریق کنیم:
// app/Http/Controllers/UserController.php
namespace App\Http\Controllers;

use App\Repositories\UserRepositoryInterface;

class UserController extends Controller {
protected $userRepository;

public function __construct(UserRepositoryInterface $userRepository) {
$this->userRepository = $userRepository;
}

public function index() {
$users = $this->userRepository->all();
return view('users.index', compact('users'));
}
}



در این مثال، کلاس UserController وابستگی خود را به UserRepositoryInterface از طریق کانستراکتور دریافت می‌کند. لاراول به صورت خودکار پیاده‌سازی صحیح را از طریق سرویس کانتینر تزریق می‌کند.

🔖 #Laravel, #PHP, #لاراول, #فصل_۲

👤 AmirHossein

💎 Channel: @DevelopixLaravel
  • ❤ 4
  • 👍 3
  • 🔥 1
More from @developixlaravel
  1. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  2. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  3. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
  4. Sep 25, 2026🔒 فقط داده‌های تأییدشده را ذخیره کن وقتی یک فرم ویرایش پروفایل داری، ممکن است کلاینت علاو…
  5. Sep 20, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی در قسمت سوم از مجموعه آموزش…
  6. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →