48
تشکر

Laravel: کار با Controllerها

Laravel

Laravel

در سومین مطلب از این سری از آموزش‌ها با Route ها آشنا شدیم و کمی هم با آن کار کردیم. اما استفاده از Route برای سایت‌هایی که دارای مسیرهای مختلف زیادی هستند (برای مثال بالاتر از 2) مناسب نیست، و برنامه نویس وقتی که فایل routes.php را باز میکند دچار سردرگمی خواهد شد و نکته دیگر اینکه نظم دهی پایین خواهد آمد و بوجود آمدن مشکلات زیادتر خواهد شد.

Controllerها برای همین ایجاد شده اند. فرض کنید که شما مسیر http://yoursite.com/user را برای کاربران خود در نظر گرفته اید. حالا این مسیر خودش دارای چندین مسیر دیگر است. برای مثال مسیر user/create یا user/profile یا هر مسیری که خودتان میخواهید داشته باشید. بنابراین شما باید یک Controller ایجاد کنید که مخصوص مسیر user/ باشد و تمام زیر مسیرهای آن را در یک Controller مستقل از مسیرهای دیگر، کنترل و مدیریت کنید.

در ادامه مطلب همراه ما باشید…

ایجاد Controller

Laravel دارای دو نوع Controller است. RESTful و Resource. نوع Resource در‌ واقع میتوان گفت بیشتر مانند یک template است که مسیرهای پیشفرض را درون خود از قبل دارد و شما نیازی به تعریف دوباره آن‌ها ندارید. اما نوع RESTful یک فایل خالی است که خودتان باید مسیرهای مورد نظرتان را در آن ایجاد کنید. از آنجایی که اگر شما با RESTful آشنایی داشته باشید میتوانید با Resource هم کار کنید و همچنین تعریف مسیرها نیز کار بسیار ساده‌ای است ما در این مطلب RESTful را آموزش میدهیم.

خب پس مسیر ما user/ است. یک فایل با نام UserController.php در مسیر app/controllers میسازیم.

حالا فایل را باز میکنیم. هر Controller در‌ واقع یک کلاس مشتق شده از BaseController است. پس کد زیر را درون فایل مینویسیم. اسم کلاس را UserController گذاشتیم.

<?php
class UserController extends BaseController {

}
&#91;/php&#93;</div>

<h2>تعریف مسیرها</h2>
حالا برای مثال میخواهیم اگر کاربر مسیر <span class="en-words">user/</span> را باز کرد که در‌ واقع همان <span class="en-words">index</span> این مسیر است یک پیغام به وی نشان دهیم. پس کد زیر را درون کلاس مینویسیم.
<div class="mycode">[php]
public function getIndex() {
  return "Please first <a href='user/login'>login</a>";
}

نام تابع بالا از دو بخش تشکیل شده است. بخش اول get که مشخص کننده نوع درخواست کاربر است. اگر میخواهید یک مسیر post را کنترل کنید به جای آن post قرار دهید. بخش دوم نام مسیر است که حرف ابتدای آن باید بزرگ باشد که در اینجا مسیر ما index یعنی همان user/ است.

خب اگر به مسیر http://yoursite.com/user بروید با خطا مواجه می‌شوید زیرا ما باید مسیرهای UserController را در فایل routes.php تعریف کنیم. بنابراین در این فایل کد زیر را اضافه میکنیم.

Route::controller('user', 'UserController');

حالا اگر دوباره به مسیر گفته شده بروید خواهید دید که پیغام ما نمایش داده میشود. اگر روی login کلیک کنید به مسیر user/login می‌روید که برای اینکه هنوز این مسیر را در Controller تعریف نکردیم با خطا مواجه میشوید. این مسیر را نیز بوسیله کد زیر تعریف میکنیم.

public function getLogin() {
  return "Login page";
}

توجه کنید که همانطور که شما در Route میتوانستید یک فایل را به خروجی بفرستید در Controller هم مشابه آنجا میتوانید انجام دهید. برای مثال من برای قسمت user/login یک فایل با نام login.blade.php در مسیر views/user ساختم و میخواهم آن را خروجی بدهم پس تابع بالا را تغییر میدهم.

public function getLogin() {
  return View::make('user.login');
}

حالا برای مثال من یک مسیر به این صورت دارم {user/profile/{$id که id$، آی دی کاربری است که میخوایم پروفایل آن را برای کاربر نمایش دهیم. پس id$ یک عدد داینامیک است. برای مثال مسیر user/profile/5 پروفایل کاربر با آی دی 5 و مسیر user/profile/14 پروفایل کاربر با آی دی 14 را قرار است نمایش دهد.

برای ساخت این مسیر فقط کافیست یک تابع مانند getLogin بسازیم فقط با یک تغییر بسیار کوچک.

public function getProfile($id) {
  return "user profile " . $id;
}

همانطور که مشاهده میکنید با گذاشتن یک پارامتر در تابع getProfile به Laravel میگوییم که این مسیر دارای یک پارامتر است که باید گرفته شود. اگر به میسرهای مثال زده شده بروید پیغام مناسب را مشاهده میکنید.

نتیجه گیری

Controllerها دارای ویژگی‌های دیگری نیز مانند Filters هستند که برای این اطلاعات تکمیلی میتوانید به اسناد انگلیسی سایت Laravel و یا اسناد فارسی آن که دوستان عزیزمان آن‌ها را ترجمه کرده‌اند مراجعه کنید.

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

امیدواریم استفاده لازم و کافی را از این مطالب کرده باشید و اگر کم و کسری داشت به بزرگواری خودتان ببخشید.

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

این مطلب از سری مطالب، آموزش فریم ورک Laravel است
  • میلاد می‌گه:

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

    خیلیا چشم به راه آموزش های آینده شما هستند. برای کار کردن لاراول به صورت یک پروژه هم برادر من نیکی و پرسش؟؟

    اگه با اون کار کنید خیلی بهتره..

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

  • محمد علی می‌گه:

    سلام
    با سپاس از آموزشتون

    فکر کنم اگه یه وبلاگ ساده هم پیاده سازی کنید مطلب واسه من و همه جا بیفته
    مرسی

  • محمدجواد می‌گه:

    سلام
    به نظر بنده هم جای یه پروژه که تمام امکانات را به صورت ساده استفاده کند خالیه

  • اسماعیل می‌گه:

    درود بر شما لطفا این طور اموزش ها کم پیدا می شوند.ممنون می شیم اگر همین روال را ادامه بدین .

  • hasti می‌گه:

    با سلام و تشکر از تاپیکهای خوبتون …
    اگر ممکنه یه توضیحی هم در مورد مبحث generator ها و دستور php artisan generate در laravel بذارید لطفا .

    ممنون .موفق باشید

  • مصطفی می‌گه:

    سلام
    میشه یه سایت ساده رو به عنوان تمرین برامون بذارید که خودمون طراحی کنیم و بعدش شما هم همون رو طراحی کنید و سورسشو بذارید تا ببینیم چقد یاد گرفتیم ؟

    • محسن شفیعی می‌گه:

      حالا که دوستان مشتاق هستند، مثال عملی هم داشته باشیم من بزودی مطالب عملی با یک هدف آسون رو قرار میدم. مثلا شاید اولین مطلب نحوه Validation و ارسال email باشه که به صورت یک مثال عملی در فرم تماس با ما پیاده سازی کنیم.

  • مسعود می‌گه:

    سلام
    اقا محسن یه مثال خوبم براش بذارین دیگه….!!!
    سایت عالی دارین…!مطالب کاملا مفیده و کاربردی
    خسته نباشید

  • عادل می‌گه:

    سلام. ببخشید اینجا نظر میدم دکمه تماس رو پیدا نکردم. محسن خان من سایتی که قرار بود درست کنم رو با دیتالایف انجین فارسی ردیف کردم. من همونی هستم که پارسال هی از شما سوال میکردم که چطوری سیستم مدیریت بنویسم!!! و میخواستم یه سایت هنری راجع به عکس بزنم. خوشحال میشم که به من خصوصی جواب بدید و این نظر رو نمایش ندید:
    من خیلی برای خصوصی سازی این سایت زحمت کشیدم. میشه یک سری کد به من بگید که بذارم توی قالبم که به هیچ وجه کپی نشه؟ مثلا با ویژوال وب ریپر یا انواع و اقسام دانلودرها؟ در ضمن چه کدی رو باید کجا گذاشت که view-source مرورگرها رو از کار بندازه؟ آقا مطمئن هستم این آخری رو حتما میدونی. من کل کارم لنگ همین کده که انشالله برم روی هاست. در ضمن من کلیه مقالات مربوط به هاست و … رو خوندم و بلدم و فکر کنم حالا حالاها ازت دیگه سوال نپرسم و مزاحم نشم :-) و آدرس سایتم رو هم بعد از راه اندازی بهت میدم تا نظر بدی.

  • محمد جهانی می‌گه:

    ترجمه مستندات فارسی لاراول منو یاد ترجمه‌های استاد جعفرنژاد قمی میندازه. (:

  • وحید می‌گه:

    درود

    محسن عزیز لطفاٌ یک مثال عملی پیاده سازی کنید، خدا شاهده من هیچی متوجه نشدم :(

    • AR می‌گه:

      سلام

      شما باید مباحث رو روی یک پروژه ی عملی پیاده کنین تا یاد بگیرین!
      “تمرین” پایه یادگیری هست.

      یک پروژه آزمایشی برای خودتون استارت بزنین و هر مبحثی که آموزش داده میشه رو روی اون پیاده کنین …

      موفق باشید…


  • نظرات این مطلب بسته است.