آموزش ماژول نویسی دروپال 8 قسمت 2

drupal

در این جلسه قصد داریم ماژول خودمون را گسترش دهیم ولی پیش از این کمی در مورد معماری mvc صحبت خواهیم کرد و بعد به routing  در دروپال خواهیم پرداخت

معماری mvc از یک رویکرد سه لایه تبعیت می کند. هر بخش از معماری mvc دارای ویژگی های خاصی بوده و وظایف ویژه ای را به صورت مجزا بر عهده دارد.

معماری mvc بارها به گوشتان خورده است و شاید از خود سوال کنید که این معماری به چه دردی می خورد و علت محبوبیت Mvc چیست. آشنایی و شناسایی دقیق با معماری Mvc سبب می شود که نتیجه کارتان یک تغییر اساسی نماید

در این معماری در واقع ما دارای ترجمه ای از قسمت های مهم معماری به شکل زیر هستیم:

  • MODEL : وظیفه کار با پایگاه داده را بر عهده دارد.
  • VIEW : وظیفه ارتباط با کاربر نهایی را بر عهده دارد.
  • Control : وظیفه کنترل View و Model و نحوه ارتباط آن دو را با هم بر عهده دارد

MVC چیست ؟
MvC مخفف سه کلمه Model View Controller هست . در واقع MVC بر روی معماری های چند لایه ای جهت جداسازی قسمت های مختلف برنامه و به طور دقیق تر جدا کردن بخش ها منطقی برنامه اعم از دیتا ، permission ها ، چک کردن صحت داده ها و .... از لایه Presentation layer یا در واقع همان لایه ای که مستقیما با کاربر نهایی (End user) در ارتباط است ،قرار میگیرد. پس بر اساس توضیحات فوق می توانیم هر یک از بخش های معماری MVC یعنی Model و View و controller را به شکل زیر تعریف کنیم.

1. Model
در واقع بار اصلی معماری MVC بر عهده این بخش است . این بخش می تواند با داده ها در ارتباط باشد .الزاماً منظور از داده حتما ارتباط با پایگاه های داده همچون MSSQL و Access و ... نیست ، حتی منبع داده ها در بخش Model می تواند یک آرایه از اعداد و یا هر چیز دیگری باشد . همچنین Model وظیفه چک کردن داده ها جهت صحت درستی داده ها را هم بر عهده دارد (در این زمینه همکاری بیشتری با بخش Controller دارد) و همینطور وظایف دیگری که در مثال ها ی عملی که در آینده خواهم زد بیشتر آشنا خواهید شد.

2. View
این بخش که در واقع همان بخش Presentation Layer در معماری 3 لایه میباشد وظیفه بر قراری ارتباط با کاربر نهایی و گرفتن داده از کاربر و نمایش داده های اماده با کاربراز طریق برقراری ارتباط با دو بخش دیگر یعنی Model و controller است . در واقع نکته مهمی که در بخش View باید مد نظر داشت این است که این لایه مسئول کنترل صحت داده های وارد شده از طریق کاربر و همچنین مسئول صحت داده های نشان داده شده به کاربر نیست . در واقع این بخش با داده های خام کار میکند . یک مثال ساده خیلی از برنامه نویسان هنگامی که در فرم Login برنامه ،کاربر کلمه عبور خود را وارد میکند ، در همان فرم Login اقدام به چک کردن پسورد مبنی بر صحت آن و ... می کنند . که این عمل در معماری MVC قابل قبول نیست . در واقع برای حل مسئله فوق در معماری MVC در فرم Login هنگامی که کاربر کلمه عبور را وارد کرد و دکمه Login یا ورود را زد ، کلمه عبور داده شده بدون هیچ گونه اعمالی اعم از Encrypt کردن و ... به بخش های دیگر فرستاده میشود و فقط یک نتیجه ساده مبنی بر این که کاربر اجازه ورود دارد یا خیر را از بخش های دیگر دریافت میکند که بر اساس آن اجازه ورود کاربر به برنامه داده میشود .

3. Controller
این بخش همانطور که از اسم آن مشخص است یک بخش کنترل کننده می باشد ، و در واقع واسطی بین دو بخش Model و View میباشد. حال ببینیم روند اجرای برنامه در معماری MVC به چه نحوی خواهد بود . در معماری MVC روند کلی برنامه (جزئیات را در ادامه خواهید دید) به این شکل است که کاربر تقاضای خود را از طریق واسط های برنامه نویسی (نظیر Form ها و User Control ها و .. ) از برنامه (از بخش View)درخواست می کند . بخش View در خواست ها را به بخش Controller فرستاده و این بخش با برقراری ارتباط با بخش Model در خواست های کاربر را پردازش کرده و پس از پایان پردازش زمانی که خروجی درخواست داده شده آماده گردید بخش Controller بخش View را آگاه می سازد تا خود را بر اسا س تغییرات جدید که اصطلاحاً در معماری MVC به آن حال Model می گویند ، به روز سازد . در واقع چیزی که باعث میشود تا بخش Controller به بخش View اطلاع دهد که باید حالت جدید model را دریافت کند و خود را Update کند این است که بخش View باید قبلا خودش را در بخش Model اصطلاحا Register کرده باشد که البته عمل Register کردن توسط بخش Controller انجام میگیرد . نحوه register کردن بخش View به معماری آن محیط و همچنین زبانی که توسط آن برنامه را گسترش میدهید و همچنین قابلیت های آن زبان بستگی دارد.

Routing  در دروپال :

routing تعیین کننده مسیری هستند که باید د رآن مسیر کد خاصی اجرا شود این کار با استفاده از یک درخواست به url انجام میشود به عنوان مثال ما میخواهیم یک یک  آدرس/hello ایجاد کنیم و عبارت Hello world را داشته باشیم

ابتدا در مسر ماژول ایجاد شده یک فایل به اسم custom.routing.yml ایجاد میکنیم و کد ها را به صورت زیر مینویسیم

custom.content:
  path: '/hello'
  defaults:
    _controller: 'Drupal\custom\Controller\CustomController::content'
    _title: 'Hello world'
  requirements:
    _permission: 'access content'

در قسمت path  مسیر را تعیین میکنم

در قسمت  defaults تعیین میکنیم که این مسیر چه ریسپانسی داشته باشد یعنی باید یک کنترلر ایجاد کنیم به اسم CustomController که مقداری که تعریف میکنم را برمیگرداند .\

در آموزش بعد یک کنترلر تعریف میکنم و ماژول خودمان را گشترش میدهیم