- شنبه 29 اردیبهشت 1397 ساعت 01:09
- 3.1.9
- در حال تکمیل
- فعال
توجه: در این بخش، فرض بر این است که فریمورک کدایگنایتر را دانلود کرده و در محیط توسعه خود نصب کردهاید.
اولین چیزی که باید انجام دهید، ساخت یا اختصاص یک کنترلر برای هندل صفحات استاتیک است. یک کنترلر، یک کلاس ساده است که کمک میکند کارهای خاصی انجام شود. کنترلر مانند چسب بخشهای مختلف اپلیکیشن شما (مانند مدل، هلپر، لایبرری، ویو و غیره) را به هم میچسباند.
برای مثال، وقتی URL زیر فراخوانی میشود:
http://example.com/news/latest/10
به سادگی میتوان حدس زد که پشت این URL یک کنترلر با نام "news" وجود دارد که متد "latest" آن فراخوانی میشود. کار این متد دریافت 10 آیتم آخر خبری را دریافت و نمایش آنها در صفحه است. اغلب میبینید که URLها در MVC، دارای پترنهایی به شکل زیر هستند:
http://example.com/[controller-class]/[controller-method]/[arguments]
با پیشرفته شدن اِسکمای URL امکان تغییر این ساختار وجود دارد. اما فعلا، دانستن همین مقدار کافی است.
یک فایل در دایرکتوری application/controllers/Pages.php ایجاد کنید و کد زیر را داخل آن تایپ کنید:
<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
}
}
یک کلاس با نام Pages ایجاد کردهاید، با یک متد با نام view که یک آرگومنت با نام $page
میگیرد. کلاس Pages از کلاس CI_Controller
مشتق شده است (system/core/Controller.php). یعنی کلاس pages جدید میتواند به کلیه متدها و پراپرتیهای تعریف شده در کلاس CI_Controller
دسترسی داشته باشد.
کنترلر چیزی است که مرکز هر درخواست به وباپلیکیشن شما خواهد بود. در مباحث خیلی فنی در کدایگنایتر، احتمالا به یک سوپر آبجکت اشاره دارد. مانند هر کلاسی در PHP، در داخل کنترلر با استفاده از $this
به متدها و پراپرتیهای آن دسترسی دارید. استفاده از $this
نحوه لود لایبرریها، ویوها و به طور کلی اجرای کامند در فریمورک را نشان میدهد.
حالا که اولین متد خود را ساختهاید، نوبت به ساخت تمپلتی ساده برای نمایش محتوای صفحات در قالبی مناسب است. دو ویو (تمپلت برای صفحه) خواهیم ساخت که از آنها به عنوان فوتر و هدر صفحه استفاده میکنیم.
هدر را در دایرکتوری application/views/templates/header.php ایجاد کنید و کد زیر را به آن اضافه کنید:
<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>
هدر شامل کدهای HTML پایه به همراه یک عنوان است که قبل از لود ویو اصلی، میخواهید نمایش داده شود. همچنین یک متغییر خروجی با نام $title
داریم که آن را در کنترلر تعریف خواهیم کرد. حالا، یک فوتر در دایرکتوری ایجاد کنید و کد زیر را در آن تایپ کنید:
<em>© 2018</em>
</body>
</html>
افزودن منطق به کنترلر
پیش از این، یک کنترلر با متد view()
ساختید. این متد یک پارامتر میپذیرفت، که نام صفحهای بود که قرار است لود شود. تمپلتهای صفحات استاتیک در محلی در دایرکتوی application/views/pages/ خواهند بود.
در دایرکتوری مذکور، دو فایل با نامهای about.php و home.php ایجاد کنید. داخل آن فایلها، متنی - هر چیزی که دوست دارید - تایپ کنید و تغییرات را ذخیره کنید. اگر دوست دارید کمی متفاوت باشید، عبارت "Hello World!" را امتحان کنید.
به منظور لود این صفحات، باید بررسی کنید که آیا صفحات درخواست شده وجود دارند:
public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'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);
}
حالا، وقتی صفحه وجود داشته باشد، به همراه فوتر و هدر لود میشود و به کاربر نمایش داده میشود. اگر صفحه وجود نداشته باشد، خطای 404 با “404 Page not found” متن نمایش داده میشود.
اولین خط در متد بررسی میکند که آیا صفحه وجود دارد یا نه. file_exists()
یکی از فانکشنهای نیتیو PHP (یعنی جزو فانکشنهای تعریف شده توسط خود پیاچپی) است که برای بررسی وجود فایل در محل مورد انتظار، استفاده میشود. فانکشن show_404()
یک فانکشن داخلی کدایگنایتر است که وظیفه رندر صفحه پیش فرض خطا را به عهده دارد.
متغییر $title
را در تمپلت header ساختیم تا بتوانیم عنوان صفحات را سفارشیسازی کنیم. این متغییر در متد مقداردهی میشود، اما به جای اینکه این متغییر را مستقیما مقداردهی کنیم، اندیس title از آرایه $data
را مقداردهی میکنیم. این اندیس در ویو تبدیل به متغییر مورد نظر ما میشود.
آخرین چیزی که باید انجام دهیم، لود ویوها به همان ترتیبی است که میخواهیم نمایش داده شوند. پارامتر دوم در متد view()
برای پاس دادن متغییرها و مقادیرشان به ویو استفاده میشود. هر مقداری در آرایه $data
به یک متغییر با نام کلید آن تبدیل میشود. بنابراین مقدار $data['title']
در کنترلر معادل با $title
در ویو است.
مسیریابی
حالا کنترلر کار میکند! به آدرس [your-site-url]index.php/pages/view
در مرورگرتان بروید تا صفحه مورد نظر را مشاهده کنید. وقتی به آدرس index.php/pages/view/about
بروید، صفحه درباره را مشاهده خواهید کرد، البته همراه با فوتر و هدر.
با قوانین مسیریابی سفارشی، امکان مَپ کردن هر URIیی به هر کنترلر و متدی را دارید و از دست قوانین و محدودیتهای پیشفرض مانند http://example.com/[controller-class]/[controller-method]/[arguments]
راحت شوید.
مَپ کردن
مَپ کردن (Mapping) در اینجا یعنی ایجاد ارتباط بین یک مسیر و یک کنترلر و متد، یعنی با لود یک آدرس خاص که میتواند ربطی به کنترلر و اکشن آن ندارد، متد مورد نظرمان را فراخوانی کنیم. برای مثال اگر در حالت عادی بخواهیم، صفحات استاتیک را ایجاد کنیم یا باید به روش بالا عمل کنیم و یا برای هر صفحه یک اکشن ایجاد کنیم که گرچه غیرمنطقی است ولی URLهای تمیزتری داریم. به جای اینکار میتوانیم قوانین مسیریابی را طوری تعیین کنیم که با فراخوانی آدرس[your-site-url]/about
در مرورگر، متد pages()
از کنترلر sites()
فراخوانی شود و پارامتر مورد نظر به آن پاس داده شود.بریم انجامش بدیم. فایل حاوی قوانین مسیریابی در application/config/routes.php را باز کنید و دو خط زیر را به آن اضافه کنید. کل کدهای دیگر این فایل که آرایه $route
را مقداردهی میکنند را پاک کنید.
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
کدایگنایتر قوانین مسیریابی را از بالا به پایین میخواند و درخواستها را به اولین قانون منطبق با آن ارجاع میدهد. هر قانون یک عبارت با قاعده (متغییر که در سمت چپ عبارت مقداردهی شده) است که به یک کنترلر و متد جدا شده با اسلش (مقدار سمت راست که یک استرینگ است) مَپ شده است. وقتی یک ریکوئست (درخواست) به سرور داده میشود، کدایگنایتر به دنبال اولین قانون منطبق میگردد، سپس کنترلر و متد مناسب را و احتمالا با آرگومنتهای مورد نیاز متد فراخوانی میکند.
اطلاعات بیشتر درباره مسیریابی را میتوانید در پست مربوط به مسیریابی URI بیابید. (پست مربوطه به مسیریابی بزودی ترجمه خواهد شد و لینک آن در این قسمت قرار داده میشود.)
در اینجا، دومین قانون در آرایه $routes
با هر درخواستی مطابقت خواهد داشت، اینکار به استفاده از استرینگ (:any)
انجام میشود. و پارامتر به متد view()
از کلاس Pages
پاس داده میشود.
حالا index.php/about
را ببینید. آیا مسیریابی دقیقا منجر به فراخوانی متد view()
از کنترلر Pages
شده بود؟ عالیه!
سایر پستهای داکیومنت
- به کدایگنایتر خوش آمدید
- نصب
- بررسی اجمالی
- شروع به استفاده از کدایگنایتر
- کدایگنایتر در یک نگاه
- فیچرهای کدایگنایتر
- فلوچارت اپلیکیشن
- مدل ویو کنترلر
- اهداف طراحی و معماری
- خودآموز
- مشارکت در کدایگنایتر
- نوشتن مستندات کدایگنایتر در صف ترجمه
- گواهی مبدأ توسعه دهنده 1.1 در صف ترجمه
- مباحث کلی
- URLها در کدایگنایتر
- کنترلرها
- نامهای رزرو شده
- ویوها
- مدلها
- هلپرفانکشنها
- استفاده از لایبرریهای کدایگنایتر
- ساخت لایبرری
- استفاده از درایورهای کدایگنایتر
- ساخت درایور
- ساخت کلاسهای هسته سیستم
- ساخت کلاسهای کمکی
- هوکها - توسعه هسته فریمورک
- بارگذاری خودکار ریسورسها
- فانکشنهای عمومی
- فانکشنهای سازگاری
- مسیریابی URI
- هندل کردن خطاها
- کش کردن صفحات وب
- ارزیابی و تجزیه و تحلیل عملکرد اپلیکیشن
- اجرای کدایگنایتر به وسیله خط فرمان
- مدیریت چندین اپلیکیشن
- هندل کردن محیطهای چندگانه
- سینتکس جایگزین PHP برای فایلهای ویو
- Security در صف ترجمه
- راهنمای کدنویسی در PHP
- لایبرریها در صف ترجمه
- کلاس بنچمارک
- درایور کش در صف ترجمه
- Calendaring Class در صف ترجمه
- Shopping Cart Class در صف ترجمه
- Config Class در صف ترجمه
- Email Class در صف ترجمه
- Encrypt Class در صف ترجمه
- Encryption Library در صف ترجمه
- File Uploading Class در صف ترجمه
- Form Validation در صف ترجمه
- FTP Class در صف ترجمه
- Image Manipulation Class در صف ترجمه
- Image Manipulation Class در صف ترجمه
- Javascript Class در صف ترجمه
- کلاس زبان
- Loader Class در صف ترجمه
- کلاس مایگریشن
- Output Class در صف ترجمه
- Pagination Class در صف ترجمه
- Template Parser Class در صف ترجمه
- Security Class در صف ترجمه
- Session Library در صف ترجمه
- HTML Table Class در صف ترجمه
- Trackback Class در صف ترجمه
- کلاس تایپوگرافی در صف ترجمه
- Unit Testing Class در صف ترجمه
- URI Class در صف ترجمه
- User Agent Class در صف ترجمه
- XML-RPC and XML-RPC Server Classes در صف ترجمه
- کلاس انکود کردن آرشیو Zip در صف ترجمه
- رفرنس دیتابیس در صف ترجمه
- شروع سریع دیتابیس: کد نمونه
- پیکربندی دیتابیس در صف ترجمه
- Connecting to your Database در صف ترجمه
- Queries در صف ترجمه
- Generating Query Results در صف ترجمه
- Query Helper Methods در صف ترجمه
- Query Builder Class در صف ترجمه
- Transactions در صف ترجمه
- Database Metadata در صف ترجمه
- فراخوانی سفارشی فانکشن
- Database Caching Class در صف ترجمه
- Database Forge Class در صف ترجمه
- Database Utility Class در صف ترجمه
- DB Driver Reference در صف ترجمه
- هلپرفانکشنها
- هلپرفانکشن Array
- هلپرفانکشن CAPTCHA در صف ترجمه
- هلپرفانکشن Cookie
- Date Helper در صف ترجمه
- هلپرفانکشن Directory
- Download Helper در صف ترجمه
- Email Helper در صف ترجمه
- File Helper در صف ترجمه
- هلپرفانکشن Form در صف ترجمه
- HTML Helper در صف ترجمه
- Inflector Helper در صف ترجمه
- هلپرفانکشن Language
- هلپرفانکشن Number
- Path Helper در صف ترجمه
- Security Helper در صف ترجمه
- Smiley Helper در صف ترجمه
- هلپرفانکشن String
- Text Helper در صف ترجمه
- Typography Helper در صف ترجمه
- URL Helper در صف ترجمه
- XML Helper در صف ترجمه