رتبه موضوع:
  • 2 رای - 4.5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش کنترلر ها در لاراول 5
#1
یکی از سه عنصر اصلی الگوی طراحی MVC کنترلرها هستند. در فایل routing.php می توانیم درخواست ها را به یک کنترلر و اکشن خاصی ارسال کنیم به طور مثال آدرسhttp://www.example.com/user/5

را در مثال زیر به کنترلر UserController و اکشن showProfile هدایت می کند.

کد پی‌اچ‌پی:
Route::get('user/{id}''UserController@showProfile'); 



تعریف کنترلر : کترلر ها در مسیر دایرکتوری app/Http/Controllers قرار می گیرند. 


کد پی‌اچ‌پی:
<?php namespace App\Http\Controllers;
 
use 
App\Http\Controllers\Controller;
 
class 
UserController extends Controller {
 
 
   /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
 
   public function showProfile($id)
 
   {
 
       return view('user.profile', ['user' => User::findOrFail($id)]);
 
   }
 



کنترلرها و فضای نام (namespace)

برای هرکلاس باید namespace آن را تعریف کنیم که این فضای نام در واقع مسیر قرارگیری کلاس از پوشه app می باشد و برای کنترلرها App\Http\Controllers تعریف می کنیم. در صورتی که داخل دایرکتوری Controllers یک دایرکتوری دیگر مثلا به نام Auth ایجاد کرده باشیم و کنترلری در آن تعریف کنیم فضای نام به صورت namespace App\Http\Controllers\Auth می باشد.



نکته : همیشه نام کلاس های کنترلر را به صورت PascalCase و در انتهای آن کلمه Controller را بیاورید. بهتر است اکشن ها را هم به صورت camelCase نامگزاری کنید.
البته من خودم همیشه عادت دارم کلاس های کنترلر و مدل را با ترمینال ایجاد کنم که شما هم می توانید با این دستور یک کنترلر بدون هیچ متدی ایجاد کنید :


کد:
php artisan make:controller UserController --plain


استفاده از middleware در کنترلر

همانطور که در پست قبلی توضیح دادم می توانیم برای هر مسیر خاص یک کلاس میان افزار اضافه کنیم تا درخواست ها فیلتر شوند. مثلا در مثال زیر برای مسیر میان افزار auth را اضافه کردیم 




کد پی‌اچ‌پی:
Route::get('profile', [
 
   'middleware' => 'auth',
 
   'uses' => 'UserController@showProfile'
]); 


در مثال زیر همانطور که مشاهده می کنید سه مثال از استفاده از میان افزار در کنترلرها را آورده است که در متد سازنده کلاس هم قرار می گیرند :


کد پی‌اچ‌پی:
class UserController extends Controller {
 
 
   /**
     * Instantiate a new UserController instance.
     */
 
   public function __construct()
 
   {
 
       $this->middleware('auth');
 
 
       $this->middleware('log', ['only' => ['fooAction''barAction']]);
 
 
       $this->middleware('subscribed', ['except' => ['fooAction''barAction']]);
 
   }
 



در مثال دوم میان افزار را با استفاده از کلمه only فقط به اکشن های fooAction و barAction محدود کردیم و فیلتر فقط به این اکشن ها اعمال شود و در مثال سوم با استفاده از کلمه except میان افزار به همه اکشن ها اعمال شود به جز اکشن های fooAction و barAction.


در لاراول همچنین می توانیم به مسیردهی به یک اکشن را به صورتی ساده تر هم انجام دهیم مثلا با تعریف مسیر به این صورت :
Route::controller('users', 'UserController');


با افزودن درخواست http به ابتدای نام اکشن با توجه به نوع درخواست به اکشن مورد نظر تحویل داده می شود :
کد پی‌اچ‌پی:
class UserController extends BaseController {
 
 
   public function getIndex()
 
   {
 
       //
 
   }
 
 
   public function postProfile()
 
   {
 
       //
 
   }
 
 
   public function anyLogin()
 
   {
 
       //
 
   }
 


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

کد پی‌اچ‌پی:
Route::controller('users''UserController', [
 
   'anyLogin' => 'user.login',
]); 

کنترلرهای RESTful


در لاراول می توانیم با دستور زیر در ترمینال کنترلرهایی با اکشن های خاصی ایجاد کنیم که هر اکشن یک مسیر و درخواست http را تحویل میگیرند. به طور مثال کنترلر PhotoController را ایجاد می کنیم:

کد پی‌اچ‌پی:
php artisan make:controller PhotoController 
مسیر را هم به این صورت در فایل routes.php تعریف می کنیم :

کد پی‌اچ‌پی:
Route::resource('photo''PhotoController'); 


حالا اگر url را به صورت http://www.example.com/photo بنویسیم اکشن index درخواست را دریافت میکند. در تصویر زیر می توانید اطلاعات کاملی را از تمام اکشن ها داشته باشید. verb نوع درخواست http و path مسیری که در url وارد میکنیم و action اکشنی که این درخواست را دریافت میکند و route name هم نام مسیر می باشد.


[عکس: restfull_laravel.png]


همچنین می توانیم فقط اکشن های خاصی را به صورت RESTful تعریف کنیم :


کد پی‌اچ‌پی:
Route::resource('photo''PhotoController',
 
               ['only' => ['index''show']]);
 
Route::resource('photo''PhotoController',
 
               ['except' => ['create''store''update''destroy']]); 


برای اطلاعات تکمیلی به اینجا مراجعه کنید



(با تشکر از حامد آریان)
قوانین انجمن لاراولیستا  | شماره تماس :‌09124783045 |‌ تلگرام :‌ 09377869283
پاسخ
#2
سلام عکس زیر پاک شده اگه امکان داره اصلاحش کنید ممنون

http://laravelista.ir/images/post_image/restfull_laravel.png
پاسخ
#3
خیلی عالی بود دوست من . ممنون کار منو خیلی جلو برد
پاسخ
#4
(11-06-2015, 12:21 PM)tux-world نوشته:  سلام عکس زیر پاک شده اگه امکان داره اصلاحش کنید ممنون

http://laravelista.ir/images/post_image/restfull_laravel.png


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


[عکس: 145217691388881.png]
کد آن است که خود ببوید نه آن که برنامه نویس بگوید  Cool
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش اعتبار سنجی در لاراول 5 alihossein 4 774 11-20-2016, 07:12 AM
آخرین ارسال: حمید رﺽا کمالی
  آموزش روتینگ routing در لاراول 5 alihossein 2 1,129 11-12-2016, 04:37 AM
آخرین ارسال: حمید رﺽا کمالی
  برگشت جاوا اسکریپت در کنترلر Geppeto 0 20 11-08-2016, 11:35 AM
آخرین ارسال: Geppeto
  آموزش کار با دیتابیس در لاراول 5 alihossein 6 1,556 10-27-2016, 01:01 PM
آخرین ارسال: sempaisaleh
  آموزش Migration در لاراول 5 alihossein 9 1,167 08-15-2016, 04:17 PM
آخرین ارسال: Naser.SherafatiNia
  آموزش فارسی لاراول ۵ alihossein 4 2,865 07-22-2016, 04:16 PM
آخرین ارسال: elham_malekmohamadi
  مشکل در دسترسی به متد های یک کلاس توسط کلاس کنترلر alireza_msl 0 76 06-08-2016, 11:11 PM
آخرین ارسال: alireza_msl
  چند کنترلر به یک route mona_k 2 118 06-01-2016, 05:22 AM
آخرین ارسال: usef.enayati@yahoo.com
  # سوال : آموزش ساخت ربات تلگرام با پکیج irazasyed/telegram-bot-sdk Bvk.Programmer 0 235 04-25-2016, 04:54 PM
آخرین ارسال: Bvk.Programmer
  درخواست آموزش کار با پکیج intervention/image Bvk.Programmer 6 492 04-18-2016, 05:52 PM
آخرین ارسال: hamo

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

درباره انجمن فریم ورک لاراول

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