1402/02/30 365 کلمه 2 دقیقه

اولین Controller و Route

آموزش ساخت پکیج لاراول

برای اینکه اولین عملگر پکیج را بسازیم نیاز هست یک فایل controller ایجاد کنیم. از دستور make:controller خود لاراول استفاده نمی‌کنیم چون زمان زیادی برای تغییرات روی namespace ها و حذف اضافات داخل آن نیاز خواهد بود. پس آن را دستی ایجاد می‌کنیم.

در مسیر src/Http/Controllers فایل زیر را ایجاد می‌کنیم:

packages/themahdavi/laravel-permission-editor/src/Http/Controllers/RoleController.php:

namespace themahdavi\LaravelPermissionEditor\Http\Controllers;

use Illuminate\Routing\Controller;

class RoleController extends Controller
{
	public function index()
	{
	
		return 'It works!';
	
	}
}

توجه: در کد بالا ما از Illuminate\Routing\Controller ارث بری کردیم که از داخل core لاراول است. از کنترلری که داخل مسیر app/Http/Controllers پروژه‌ لاراولی قرار دارد استفاده نکردیم. در برخی از پکیج‌ها نیاز هست از این کنترلر استفاده شود چون بعضی از عملیات تعریف شده داخل آن به کار می‌آید. اما در پکیج ما کنترلر اصلی core لاراول جوابگو است.

حالا چطور باید یک Route بسازیم تا بتواند این کنترلر را صدا بزند ؟ کافی است داخل ساختار پکیج فایل routes/web.php را ایجاد کنیم.

packages/themahdavi/laravel-permission-editor/routes/web.php:

use themahdavi\LaravelPermissionEditor\Http\Controllers\RoleController;
use Illuminate\Support\Facades\Route;

Route::resource('roles', RoleController::class);

توجه: مسیردهی‌ها خارج از پوشه src/ خواهند بود. src/ در حقیقت پوشه app/ لاراول است. داخل آن src/Models و  src/Http و ... قرار دارند. اما مسیرهای resources/  و routes/ بیرون هستند.

در کدبالا namespace کنترلر را به صورت کامل نوشتیم البته جلوتر داخل composer.json ریجیستر خواهیم کرد.

حالا وقتش رسیده است تا Route را ریجیستر کنیم. اولین باری است که به Service provider ایجاد شده در درس سوم مراجعه می‌کنیم:

packages/themahdavi/laravel-permission-editor/src/PermissionEditorServiceProvider.php:

use Illuminate\Support\Facades\Route;

class PermissionEditorServiceProvider extends ServiceProvider
{
	public function boot()
	
	{
	
		Route::prefix('permission-editor')
			->as('permission-editor.')
			->group(function () {
				$this->loadRoutesFrom(__DIR__ . '/../routes/web.php');
		});
	}
}

مسیرها با تابع ()this->loadRoutesFrom$ با دریافت یک ورودی لود می‌شوند.

اگر دقت کنید برای اینکه با مسیردهی خود پروژه تداخل ایجاد نشود آن‌ها را در یک prefix مشخصی قرار می‌دهیم. البته می‌توانیم این را داخل routes/web.php تعریف کنیم اما بهتر است آن را داخل service provider بنویسیم.

برای اینکه تغییرات پکیج روی پروژه لاراول هم اعمال شوند دستور composer update را اجرا می‌کنیم. خروجی موفقیت‌آمیز دستور به شکل زیر خواهد بود:

  • Upgrading themahdavi/laravel-permission-editor (dev-main cac9b96 => dev-main a066e56): Source already present

در نهایت برای اتمام این درس با اجرای پروژه روی مرورگر و مراجعه به آدرس http://localhost/permission-editor/roles تصویر زیر را خواهیم دید:

controller-route