Skip to content

Controller

Mostafa Barmshory edited this page May 13, 2016 · 1 revision

آدرس‌ها و منابع

مهم‌ترین ابزاری که در توسعه سیستم معرفی شده، لایه کنترول‌ها است.

کنترل در حقیقت یک ساختار داده‌ای است که بر اساس تقاضای کاربر تعیین می‌کند که چه تابعی باید فراخوانی شود.

آدرس‌ها و منابع

در این سکو شما می‌توانید آزادانه URL مورد نظر خود را برای هر نمایش ایجاد کنید. برای نمونه دسته‌ای از آدرس‌هایی قابل تعریف در این سکو آورده شده است

/ - The simplest :-)
/article/
/somewhere/pluf-is-great - Does not end with a trailing slash!
/what/about/a/pdf-file.pdf - You can have extensions.
/img/dynamic/image.png
etc.

به بیان دقیق‌تر، از آنجا که ادرس‌ها با استفاده از عبارت‌های منظم تعریف می‌شود شما قادر خواهید بود که هر طور که می‌خواهید ساختار آدرس را برای لایه نمایش تعریف کنید.

تمام آدرس‌ها به صورت یک آرایه در یک پرونده تعریف شده و به عنوان نتیجه برگردانده می‌شود. تمام آدرس‌های سیستم به صورت معمولد در یک پرونده با آدرس زیر تعریف می‌شود:

YourApp/conf/urls.php 

ساختار کلی

هر مسیر به استفاده از یک ساختار داده‌ای آرایه معرفی می‌شود که در آن خصوصیت‌های متفاوتی در نظر گرفته شده. تمام مسیرها نیز در یک آرایه قرار می‌گیرد تا تمام دستیابی‌های سیستم را معرفی کنند.

ساختار کلی تعریف مسیرهای یک سیستم به صورت زیر است:

<?php
return array(
	array(
		// URL#1 parameters
	),
	array(
		// URL#2 parameters
	),
	...
	array(
		// URL#n parameters
	),
);

فرآیند مسیر یابی تمام این ارايه را از اول بررسی می‌کند و اولین مسیری که با فراخوانی کاربر منطبق شود را انتخاب و اجرا می‌کند.

پارامترهای یک مسیر

بر اساس کاربرهایی که یک مسیر دارد خصوصیت‌های متفاوتی برای آن در نظر گرفته شده است. در این بخش این خصوصیت‌ها را تشریح می‌کنیم.

regex

این عبارت منظم روی آدرس منبع ورودی با استفاده از تابع preg_match اجرا می‌شود و در صورتی که آدرس منبع منطبق با عبارت منظم بود آنگاه نمایش معادل با آن فراخوانی می‌شود.

base

در بسیاری از موارد شما نیاز به نصب نرم‌افزار در زیر پوشه‌هایی از سایت دارد در این حال با استفاده از این متغیر می‌توانید آدرس دهی همه نمایش‌ها با به یک آدرس دلخواه انتقال دهید. می‌توان گفت این متغیر به عنوان پیشوندی برای آدرس‌های سایت در نظر گرفته می‌شود که در انطباق عبارت منظم استفاده نمی‌شود.

model and method

فرآید اجرای هر کنترل باید با استفاده از یک متد ایستا در یک کلاس پیاده سازی شده باشد تا سیستم بتواند آن را در ازای فراخوانی کاربر اجرا کند.

این دو خصوصیت به ترتیب کلاس و متد معادل با یک کنترل را تعیین می‌کنند.

name

هر کنترل در سیستم با استفاده از یک شناسه یکتا معرفی می‌شود که در حالت کلی به صورت زیر تعیین می‌شود:

ControllerClassName::ControllerMethodName

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

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

در بسیاری از موارد استفاده از یک نام یکتا برای لایه نمایش بسیار بهینه است جایی که ممکن است مسیر نمایش و یا کلاس و متد آن تغییر کند. با استفاده از این خصوصیت دیگر نیاز نیست که در کل سیستم فراخوانی لایه نمایش را تغییر دهید. به بیان ساده نام یک ارجاع مجازی به یک نمایش ایجاد می‌کند که البته باید به صورت یکتا در کل سیستم تعریف شده باشد.

sub

زمانی که از برنامه‌هایی دیگر به عنوان زیر برنامه‌هایی در سیستم خود استفاده می‌کنید این متغییر به کار گرفته می‌شود. در ادامه استفاده از این متغیر به صورت کامل تشریح شده است.

params

پارامترهایی را تعیین می‌کند که باید به لایه نمایش ارسال شود. برای نمونه گاهی لازم است که آدرس تغییر مسیر لایه نمایش به صورت پارامتر برای متد ارسال شود.

http-method

این پارامتر تعیین می‌کند که کنترل در مقابل کدام متد http باید فعال شود. مقدار این پارامتر می‌تواند یک متد یا آرایه‌ای از متدها باشد. این پارامتر اختیاری است و در صورتی که تعیین نشده باشد معادل با در نظر گرفتن تمام متدها برای کنترل است.

نکته مهمی که باید همواره به آن توجه داشته باشید این است که عبارت منظم ایجاد شده باید بین دو علامت # قرار بگیرد.

نکته دیگری که باید به آن توجه داشته باشید این است که ترتیب در نظر گرفتن نمایش‌ها ترتیب قرار گرفتن آنها در فهرست نمایش‌ها است.

precond

پیش شرط‌های فراخوانی کنترل را تعیین می‌کند.

در بخش امنیت این موضوع بیشتر تشریح شده است.

دست یابی به یک مسیر

گاهی نیاز است که در پیاده سازی‌ها مسیر معادل با یک کنترل تعیین شود.

$url = Pluf_HTTP_URL_urlForView('url name', array('param#1', .. 'param#n'));

فراخوانی یک کنترل

مسیر فراخوانی یک کنترل برای کاربران به صورت زیر:

[controller base]/[controller regex]

که در آن خصوصیت regex با پارامترهای مسیر جایگزین شده باشد.