مسیریابی
مسیریابی http در این فریمورک به این معناست که فریمورک بعد از دریافت درخواست مرورگر برای بازکردن یک آدرس خاص آن را به کنترلری تحویل دهد. فریمورک این کار را براساس قوانین موجود در پکیج ها انجام میدهد.این قوانین از طریق معرفی آدرس، دامنه، پروتکل و شیوه ارسال (method) معرفی میشوند.
تنظیمات
برای انجام تنظیمات مسیریابی باید به فایل
config.php
که در مسیر packages/base/libraries/config
قرار دارد مراجعه نمایید.
تنظیم دامنه
زمانی که میخواهید سایت بجر دامنه اصلی از طریق دامنه یا زیر دامنه های دیگر باز شود باید دامنه ها و یا زیر دامنه ها را در آپشن packages.base.router.defaultDomain
معرفی شوند.
'packages.base.router.defaultDomain' => ['panel.domain.com', 'domain.com']
تنظیم پروتکل
برای تنظیم پروتکل ازآپشن packages.base.routing.scheme
استفاده میشود. پرتوکل روی هر آپشنی تنظیم شود فریمورک هنگام بازشدن سایت بهطور خودکار روی آپشن تنظیم شده ریدایرکت میشود.
بطور مثال اگر سایت گواهینامه دارد و این آپشن با مقدارhttps تنظیم شود; اگر سایت در حالت http باشد، به صورت خودکار به https ریدایرکت میشود.
'packages.base.routing.scheme' => 'http' // https
اضافه کردن اسلش به انتهای آدرس
اگر آپشن packages.base.routing.lastslash
برابر true باشد زمانی که ادرس url باز میشود به انتهای آدرس اسلش اضافه میشود.
(تنظیم این آپشن مطابق با سلیقه برنامه نویس و یا مدیر سایت میباشد.)
'packages.base.routing.lastslash' => true //false
مثال 1
'packages.base.routing.lastslash' => true
/*
url: domain.com/fa/contact-us/
*/
مثال 2
'packages.base.routing.lastslash' => false
/*
url: domain.com/fa/contact-us
*/
تنظیم www
برای وجود www
در کنار دامنه از آپشن packages.base.routing.www
استفاده میشود.
اگر آپشن مقدار withwww
داشته باشد اگر domain.com را وارد کنیم www. به ابتدای آن اضافه میشود
درصورتی که مقدار nowww
داشته باشد اگر آدرس www.domain.com را وارد کنیم www. از ابتدای آدرس حذف خواهد شد.
توجه : آپشن در هر حالتی تنظیم شود اگر سایت در حالت دیگر باز شود، فریمورک بطور خودکار به حالت تنظیم شده ریدایرکت میشود.
بطور مثال اگر آپشن مقدار withwww
داشته باشد و آدرس به صورت domain.com وارد شود، فریمورک به آدرس www.domain.com ریدایرکت میشود.
'packages.base.routing.www' => 'nowww' // withwww
آدرس
آدرس یا Path یکی متداول ترین قاعده های مسیریابی محسوب میشود.در جالنو شما توانایی تعریف سه نوع آدرس دارید.
در جالنو برای هر آدرس میتوان مشخصه های زیر را تعیین کرد.
مشخصه | کاربرد |
---|---|
path | آدرس |
controller | متد مربوطه در کنترلر |
method | شیوه ارسال |
domain | دامنه |
absolute | تعیین اضافه شدن زبان به آدرس |
scheme | پروتکل |
middleware | مدیریت آدرس قبل از کنترلر |
exceptions | مدیریت خطاها |
name | مشخص کردن اسم برای هر آدرس |
permissions | مجوز دسترسی |
آدرس های ایستا
این آدرس ها ثابت هستند و قرار نیست تا با تغییر در اطلاعات آدرس تغییر کنند.
مثال
[
{
"path": "panel/news/posts",
"controller": "controllers/panel/News@posts",
"method": "get"
}
]
میتوانید از مدل قدیم زیر نیز بهره ببرید
[
{
"path": ["panel", "news", "posts"],
"controller": "controllers/panel/News@posts",
"method": "get"
}
]
آدرس های پویا
آدرس های پویا عموما از ترکیب قسمت ثابت به عنوان پیشوند یا پسوند و قسمت های پویا تشکیل شده اند.این نوع آدرس ها جایگزین بسیار مناسبی برای URL Parameters هستند و در نهایت افزایش محبوبیت کاربران را برای درک، حفظ و اشتراک آدرس ها به ارمغان خواهند آورد. هر قسمت پویا در آدرس یک نام برای شناسایی و استفاده مجدد در کنترلر خواهد داشت
قسمت پویا آدرس به صورت :key
در مشخصه path
معرفی میشود .
مثال 1
[
{
"path": "news/view/:post",
"controller": "controllers/News@view",
"method": "get"
}
]
اکنون اگر کاربری آدرس news/view/10
را باز کند فریمورک درخواست را به کنترلر posts واگذار کرده و در هنگام فراخوانی متد view یک آرایه را در اولین ورودی متد با محتوای ["post"=>10"]
ارسال میکند تا برنامه نویس برای مراحل بعد از آن استفاده کند.
نمونه فایل کنترلر
<?php
namespace packages\packagename\controllers;
use packages\base;
use packages\base\{response, NotFound};
use packages\packagename\{controller, view, views, news as newsObject};
class News extends controller {
public function view($data): response {
$news = new newsObject();
$news->where("status", 1);
$news->where("id", $data["post"]);
if (!$news = $news->getOne()) {
throw new NotFound();
}
$response = new response();
$view = view::byName(views\news\view::class);
$view->setNews($news);
$response->setView($view);
$response->setStatus(true);
return $response;
}
}
مثال 2 : آدرس با دو متغیر پویا
[
{
"path": "surah/:surah/:ayeh",
"controller": "controllers/Homepage@ayah",
"method": "get"
}
]
در مثال فوق زمانی که کاربر آدرس surah/80/11
را باز کند در کنترلر آرایه ["surah" => 80, "ayeh" => 11]
دریافت میشود.