رتبه موضوع:
  • 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
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  صفحه بندی در لاراول ۵.۵ sadaf 0 47 10-26-2017, 09:26 PM
آخرین ارسال: sadaf
  سرور برای لاراول mahmood_20050 0 32 10-24-2017, 10:00 AM
آخرین ارسال: mahmood_20050
  گرفتن آپدیت های وب هوک تلگرام در لاراول Mr.AMiR 6 253 09-19-2017, 04:30 AM
آخرین ارسال: Bvk.Programmer
  خطای نصب لاراول dmbehrouz 0 45 09-07-2017, 01:11 PM
آخرین ارسال: dmbehrouz
  مشکل افت سرعت وقتی از لاراول به جای php استفاده می کنم Zahir 1 109 08-31-2017, 08:40 AM
آخرین ارسال: imanghafoori
  آموزش اعتبار سنجی در لاراول 5 alihossein 5 1,299 07-30-2017, 08:47 AM
آخرین ارسال: shima71
  آموزش فارسی لاراول ۵ alihossein 7 3,839 07-28-2017, 06:44 PM
آخرین ارسال: shima71
  انتقال سایت mvc به لاراول miladhassan 1 94 07-26-2017, 09:01 AM
آخرین ارسال: fery
Question راه اندازی لاراول روی سیستم افلاین؟ fery 0 63 07-26-2017, 08:55 AM
آخرین ارسال: fery
Sad مشکل در ایجاد وبلاگ در لاراول 5.4 itroz 0 100 07-05-2017, 05:03 PM
آخرین ارسال: itroz

پرش به انجمن:


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

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

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