آموزش کدایگنایتر – اضافه کردن لایه منطقی به Controller

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

قالب صفحه استاتیکی که قرار است لود شود باید در مسیر application/views/pages/ قرار بگیرد.

در مسیر فوق دو فایل با نام های home.php و about.php بسازید و در داخل آن فایل ها هر متنی دوست دارید قرار دهید (و یا کد html) و آنها را ذخیره نمایید، اگر میخواهید بصورت جهانی عمل کنید از عبارت Hello World! استفاده نمایید!

 

برای لود شدن درست آنها شما باید وجود یا عدم وجود صفحه را هم در متد view چک نمایید:

 

public function view($page = 'home')

{

 

                if ( ! file_exists('application/views/pages/'.$page.'.php'))

                {

                                // Whoops, we don't have a page for that!

                                show_404();

                }

 

                $data['title'] = ucfirst($page); // Capitalize the first letter

 

                $this->load->view('templates/header', $data);

                $this->load->view('pages/'.$page, $data);

                $this->load->view('templates/footer', $data);

 }

 

 

حالا اگر صفحه وجود داشته باشد، بهمراه header  و footer  نمایش داده میشود و در غیر اینصورت صفحه error 404  نمایش داده میشود.

در کد های بالا file_exists() یک متد از توابع خود php هست که چک میکند آیا فایل در محلی که ما انتظار داریم هست یا نه و show_404() یک متد داخلی کدایگنیتر میباشد که صفحات خطا را ارائه میدهد.

در قالب header متغیر $title برای نمایش بخش title صفحه بکار میرود، مقدار title نیز در این متد بکار میرود، منتهی بجای تخصیص یک مقدار به متغیر، مقدار در آیتم title از آرایه data ریخته میشود.

آخرین کاری که باید انجام دهیم آنست که view()هایی را که باید نمایش دهیم، لود نماییم. دومین پارامتر در متد view() برای آنست که که مقداری را به این متد پاس کنیم .

$this->load->view('templates/footer', $data)

هر مقداری در آرایه $data به متغیری هم نام با کلید آن مقدار در آرایه اشاره مینماید.

بنابراین مقدار $data['title'] در Controller به متغیر $title در view اشاره مینماید.

 

 

مسیریابی (Routing)

کنترلری که ساختیم هم اکنون کار میکند! کافیست در مرورگر قالب آدرس زیر را وارد نماییم:

[your-site-url]index.php/pages/view

برای مشاهده صفحه about هم کافیست عبارت قالب:

[your-site-url]index.php/pages/view/about را وارد نماییم که این فایل هم مجدداً شاملheader و footer میباشد.

 

شما این قدرت را دارید تا هر URI را به هر Controller و متد دلخواه متصل کنید، اما این حالت نرمال است:

http://example.com/[controller-class]/[controller-method]/[arguments]

بگذارید یکبار اینکار را انجام دهیم:

فایل مسیر دهی را از مسیر application/config/routes.php باز کنید، دو خط زیر را به آن اضافه کنید و هر کد دیگری را که هر المنتی را در آرایه $route ست کرده است، پاک نمایید.

$route['default_controller'] = 'pages/view';

$route['(:any)'] = 'pages/view/$1';

اولویت کدایگنیتر در خواندن این rule ها از بالا به پایین میباشد و در خواست ها را نسبت به اولین الگوی قابل تطبیق، مسیر دهی مینماید.

هر rule حاوی یک عبارت با قاعده میباشد (سمت چپ)که به یک Controller اشاره مینماید بهمراه نام یک متد (سمت راست) که این دو با اسلش ( / )از هم جدا شده اند.

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

اطلاعات بیشتر در رابطه با Routingاینجا موجود میباشد.

Rule دوم در آرایه $routes با هر درخواستی که از رشته کلمات (:any) استفاده مینماید، همخوانی دارد و پارامتری را به متدview در کلاس page پاس مینماید.

حالا index.php/about را ببینید، آیا مسیردهی به متد view() در page controller بدرستی انجام شد؟ ترسناک نیست؟!

 

 

۱ دیدگاه

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *