آموزش روتینگ با PHP ( مسیریابی صفحات )

۱۳۹۶-۰۹-۲۱
444
2 دیدگاه
آموزش روتینگ با PHP ( مسیریابی صفحات )Reviewed by کارگاه توسعه on Dec 12Rating:

در این مقاله قصد داریم به آموزش روتینگ با PHP بپردازیم و نحوه صحیح مسیریابی صفحات وب و ریدایرکت کردن آدرس ها با استفاده از .htaccess را مورد بررسی قرار دهیم .

اگر قصد طراحی یک CMS اختصاصی را داشته باشید ، حتما به این چالش برخورده اید که چگونه میتوان صفحات سایت را مسیریابی یا روتینگ نمود ، اینکار در فریم ورک محبوب PHP یعنی لاراول به خوبی انجام می شود ، اما اگر نخواهید از لاراول استفاده کنید باید آنرا بصورت دستی با زبان PHP تعریف کنید .

۱- مرحله اول :: ریدایرکت تمام URL ها به فایل روتر

اولین مرحله برای ساخت سیستم روتینگ ، این است که تمام URL های دریافتی را به یک فایل تصمیم گیرنده منتقل کنید . این فایل تصمیم میگیرد که چه صفحه ای را باید نمایش دهد .

میتوانیم اسم آنرا router.php بنامیم ( نام آن فرقی نمی کند و میتوانید هر نام دیگری را انتخاب کنید )

برای اینکار ، می بایست یک فایل .htaccess در روت ( ریشه اصلی ) سایت خود ایجاد کرده و محتوای زیر را درون آن قرار دهیم .

با استفاده از این کد در فایل .htaccess تمام URL ها به فایل router.php منتقل می شود ( نام فایل روتر در خط پنجم مشخص شده router.php )

توجه : طبق کد بالا ، فایل router.php نیز باید در ریشه اصلی سایت ساخته شود .

۲- مرحله دوم :: تعریف تابع مسیریاب یا همان روتر

این کد را میتوانیم درون فایل router.php که قبلا ایجادش کرده بودیم ، قرار دهیم .

تابع url_route وظیفه جداسازی اجزای url بر اساس علامت / را دارد . یعنی کلماتی که با / جداسازی می شوند را پیدا کرده و آنرا در قالب یک آرایه بر میگرداند .

تابع ROUTE وظیفه اصلی مسیریابی و روتینگ را دارد . این تابع سه پارامتر را دریافت می کند تا عمل روتینگ را به درستی انجام دهد .

نکته قابل توجه این تابع اینجاست که اسلش ( / ) اضافی در انتهای URL تاثیری روی کارکرد این تابع نمی گذارد و اسلش های اضافی را نادیده می گیرد .

 

۳- مرحله اخر :: اجرای تابع ROUTE() برای روتینگ

هم اکنون به مرحله اخر روتینگ رسیدیم 🙂

کافیست تابع ROUTE() را صدا زده و ۳ پارامتر زیر را ارسال کنید .

توجه : تابع ROUTE() را درون فایل router.php که در ریشه اصلی سایت قرار دارد صدا بزنید .

 

پارامتر اول :: URL موردنظر

در پارامتر اول ، آدرس موردنظر قرار می گیرد ؛ بطور مثال اگر بخواهیم با وارد کردن آدرس site.com/welcome یک فایل خاص اجرا شود ، عبارت welcome/ را وارد می کنیم .

 

پارامتر دوم :: مسیر دایرکتوری فایل

در این پارامتر ، مشخص میکنیم فایلی که قصد اجرا کردن آنرا داریم در چه دایرکتوری قرار دارد .

اگر فایل موردنظر درون دایرکتوری قرار دارد ، تنها مسیر آن دایرکتوری را وارد می کنیم ( همانند کد زیر )

توجه داشته باشید ، اگر فایل مورد نظر در ریشه اصلی سایت ( روت ) قرار داشت ، پارامتر دوم را یک رشته خالی قرار دهید .

پارامتر سوم :: نام فایل 

در این پارامتر نام فایل را وارد می کنیم .

 

۴- مرحله چهارم :: شناسایی صفحات پیدا نشده یا همان ۴۰۴

فرض کنید ۳ بار از تابع ROUTE استفاده کردیم ، اما URL که کاربر وارد کرده بود مطابق با هیچ یک از آنها نبود .

بنابراین باید بررسی کنیم اگر آدرسی که کاربر وارد کرده بود مطابق با هیچ یک از موارد تعریف شده نبود ، صفحه ۴۰۴ نمایش داده شود .

برای اینکار ، کد زیر را در انتهای فایل router.php قرار دهید ، شما به جای چاپ کردن کلمه ۴۰۴ ! میتوانید صفحه ۴۰۴ اختصاصی خود را ضمبمه کنید .

 

تمام شد 🙂

حالا اگر آدرس /welcome را درون سایت خود اجرا کنید ، فایل welcome.php را از دایرکتوری directory برای شما اجرا می کند .

شما میتوانید به تعداد بی نهایت تابع ROUTE را صدا زده و برای مسیر های مختلف مسیریابی خود را انجام دهید .

روشی که معرفی شد ، نمونه ساده ای از روتینگ با PHP بود ، شما می توانید امکانات حرفه ای تری به آن اضافه کنید و آنرا به اشکال مختلفی توسعه دهید .

در ضمن فراموش نکنید در صورت داشتن سوال در این زمینه ، میتوانید آنرا از طریق کامنت مطرح کنید ::)

  1. porya گفت:

    سلام ممنون بابت مطلب مفیدتون
    من دقیقا نمیفهمم که تابع ROUTE جرا باید نوشته بشه و اگر نوشته نشه چه اتفاقی می افته؟ یعنی اینکه در .htaccess فقط نام یک فایل مقصد رو بنویسیم بدون اینکه بخواهیم از این تابع استفاده کنیم.
    و سوال دوم اینکه در مورد REWRITEBASE هم لطفا توضیح بدید.
    باتشکر.

    • دکادیزاین گفت:

      سلام دوست عزیز ؛
      خواهش میکنم ، خوشحالیم که براتون مفید واقع شده .

      ببینید شما زمانی که بخواید چند تا مسیریابی رو انجام بدید ، لازم دارید تا عمل مسیریابی رو تکرار کنید .
      بطور مثال یه صفحه ای رو میخواید برای site.com/signup تعریف کنید ، یه صفحه ای برای site.com/portfolio و …
      برای اینکه از این تکرار جلوگیری کنید ، اون رو توی یک تابعی به نام ROUTE یا هر نام دیگه ای تعریف می کنیم ، و هر زمان بخوایم مسیری رو تعریف کنیم کافیه از اون تابع استفاده کنیم و پارامتر های اون رو کامل کنیم .

      و اما در مورد فایل .htaccess
      این فایل وظیفش انجام مسیریابی هست ، یعنی هر URL که وارد میشه اول میره تو این فایل ( که ما اون رو router.php تعریفش کردیم ) بعد پردازش های لازم انجام میشه و صفحه مربوطه نمایش داده میشه .
      توابعی که در مرحله ۲ توضیح داده شد باید تو فایل router.php قرار داده بشن و call کردن اونها هم باید توی همین فایل صورت بگیره .
      ما امروز این مطلب رو آپدیت کردیم ، مرحله چهارمی اضافه شده که میتونه صفحات ۴۰۴ رو تشخیص بده ( البته تغییراتی در مرحله دوم نیز ایجاد شده ) ؛ حتما مطالعه کنید .

      در مورد سوال دومتون ، پیشنهاد میکنم مقاله زیر رو مطالعه بفرمایید ( برای سایت apache هست )
      http://httpd.apache.org/docs/current/mod/mod_rewrite.html
      مبحث گسترده ای داره و موضوعاتش مرتبط به هم دیگه هستن و نمی گنجه توی کامنت بخوام توضیح بدم براتون .
      بزودی مقاله فارسی رو در این زمینه منتشر خواهیم کرد توی دکادیزاین .

      موفق باشید .

دیدگاه شما

( الزامي )

(الزامي)