کنترلرها

  • کنترلر های اولیه
  • فیلتر های کنترلر
  • کنترلرهای REST
  • کنترلرهای منابع
  • بررسی کردن متد های گمشده

کنترلر های اولیه

به جای تعریف کردن تمام منطق سطح مسیر در یک فایل routes.php ؛ می توانید با استفاده از کلاس های کنترلر این رفتار را سازماندهی کنید. کنترلرها می توانند مسیرهای منطقی مرتبط با هم را در یک کلاس گروهبندی نمایند، همچنین از ویژگی های پیشرفته فریم ورک مانند dependency injection.  اتوماتیک، بهره ببرند.

کنترلرها معمولا در دایرکتوری app/controllers ذخیره می شوند، و این دایرکتوری در گزینه classmap  در فایل       composer.json  به طور پیش فرض ثبت شده است.

در اینجا نمونه ای از یک کلاس کنترلر اولیه آورده شده است:

 

 

 

 

 

 

 

 

 

تمام کنترلرها باید کلاس BaseController را توسعه دهند. این کلاس نیز در دایرکتوری app/controllers  ذخیره شده است، و ممکن است به عنوان مکانی برای قرار دادن منطق کنترلر مشترک استفاده شود. BaseController کلاس Controller فریم ورک را توسعه می دهد. هم اکنون، می توانیم مانند زیر به این کنترلر مسیر دهیم :

;(‘Route::get(‘user/{id}’, ‘UserController@showProfile

اگر بخواهید با استفاده از فضاهای نام php کنترلر خود را مرتب نموده و یا در محل محفوظی قرار دهید، به سادگی از نام کامل کلاس در زمان معرفی آن برای مسیر استفاده نمایید:

;(‘Route::get(‘foo’, ‘Namespace\FooController@method

همچنین می توانید نام های روی مسیر کنترلر را مشخص نمایید:

;((‘Route::get(‘foo’, array(‘uses’ => ‘FooController@method’,  ‘as’ => ‘name

برای تولید یک URL به کنترلر می توانید از متد URL::action استفاده نمایید:

;(‘$url = URL::action(‘FooController@method

می توانید به نام کنترلری که در حال اجرا است از طریق متد currentRouteAction دسترسی بیابید:

;()$action = Route::currentRouteAction

فیلتر های کنترلر

Filter  ها می توانند بر روی مسیرهای کنترلر همانند مسیرهای “عادی” تعیین شوند:

 

 

علاوه بر این شما همچنین می توانید فیلترهایی را از درون کنترلر تعیین نمایید:

 

 

 

 

 

 

 

 

 

 

 

 

همچنین با استفاده از یک closure می توانید فیلترهای خطی کنترلر تعیین نمایید:

 

 

 

 

 

 

 

 

 

کنترلرهای REST

لاراول این امکان را به شما می دهد که یک مسیر برای رسیدگی به تمامی فعالیت ها در یک کنترلر تعریف کنید و این کار را به سادگی با استفاده از قراردادهای نامگذاری REST انجام دهید. در ابتدا، مسیر را با استفاده از متد Route::controller تعریف کنید.

نحوه تعریف کردن یک کنترلر REST

;(‘Route::controller(‘users’, ‘UserController

متد controller دو آرگومان می پذیرد. اولین آرگومان، URI  اولیه ای است که کنترلر زمانی که دومین آرگومان نام کلاس کنترلر است ؛ به کار میبرد. بعد از آن، فقط متدهایی را که با پسوند فعل http به آن پاسخ می دهند؛ به کنترلرتان اضافه کنید.

 

 

 

 

 

 

 

 

 

 

متد index به URI پایه که توسط کنترلر به کار برده می شود، پاسخ می دهد که در این مورد ، index  است.

اگر فعالیت های کنترلر چندین کلمه را شامل شود، میتوانید به فعالیت های آن با استفاده از سینتکس “dash” در URI دسترسی بیابید. به عنوان مثال، کنترلر زیر در UserController ما ؛ به URI users/admin-profile  پاسخ می دهد.

{}  ()public function getAdminProfile

کنترلرهای منابع

این کنترلرها ساخت کنترلر REST در اطراف منابع را آسان تر می کنند. برای مثال، می توانید یک کنترلر ایجاد کنید که “عکس” های ذخیره شده توسط برنامه تان را مدیریت کند. با استفاده از دستور controller:make از طریق Artisan CLI و متد Route::resource میتوانیم به سرعت چنین کنترلری ایجاد کنیم.

برای ایجاد این کنترلر از طریق خط دستور، دستور زیر را اجرا نمایید:

php artisan controller:make PhotoController

هم اکنون می توانیم یک مسیر عالی را برای کنترلر ثبت کنیم:

;(‘Route::resource(‘photo’, ‘PhotoController

این اعلام تک مسیر، مسیرهای چندگانه ای را برای رسیدگی به عمل های REST گوناگون در منبع عکس، ایجاد می کند. به همین ترتیب، در حال حاضر کنترلر تولید شده؛ متدهایی را برای هر کدام از این فعالیت ها همراه با یادداشت هایی جهت اطلاع شما که کدام URI و فعل ها در حال استفاده هستند، در نظر می گیرد.

اعمال به کار گرفته شده توسط کنترلر منبع

Verb

Path Action Route Name

GET

/resource index resource.index

GET

/resource/create create resource.create

POST

/resource store

resource.store

GET /resource/{id} show

resource.show

GET /resource/{id}/edit edit

resource.edit

PUT/PATCH

/resource/{id} update

resource.update

DELETE /resource/{id} destroy

resource.destroy

گاهی اوقات ممکن است فقط نیازمند به کاربردن زیر مجموعه ای از اعمال منابع باشید:

php artisan controller:make PhotoController –only=index,show

 

php artisan controller:make PhotoController –except=index

و همچنین ممکن است یک زیر مجموعه از اعمال را برای به کار بردن در مسیر مشخص نمایید:

 

 

بررسی کردن متد های گمشده

روش “گرفتن همه متدها” یا catch all می تواند برای زمانی که هیچ متد دیگری بر روی کنترلر داده شده یافت نشد، تعریف می شود. این متد باید missingMethod نامگذاری شود و آرایه پارامتر ها را برای تنها آرگومان درخواست خود؛ دریافت کند.

نحوه تعریف کردن متد Catch All

 

 

 

 

اسکرول به بالا