در دومین بخش آموزش با روتینگ (مسیردهی) و در سومین بخش با middleware (فیلتر کردن مسیرها) آشنا شدیم. در این بخش قصد داریم با یکی از اجزای برنامه نویسی MVC به نام کنترلر آشنا بشیم، پس با ما همراه باشید.

گاهی ممکن است از Route برای برنامه هایی که دارای مسیرهای مختلفی هستند استفاده شود. اگر  برنامه نویس طبق مثال زیر اقدام به مسیردهی نماید دچار سردرگمی شده و نظم دهی و کارایی برنامه نیز پایین می آید.

Route::get('user/{id}', function ($id) {

    return 'User '.$id;

});

Route::get('user/profile', function () {

    return view('user.profile');

});

کنترل برای همین موضوع ایجاد شده است و هر کنترلر وظیفه مدیریت گروهی از درخواستهای مرتبط با هم را برعهده می گیرد.
با استفاده از کنترل می توانید دستورات بالا را فقط به صورت زیر در Route وارد نمائید.

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

کنترلر چیست؟

کنترلر یکی از اجزای اساسی برنامه نویسی MVC می باشد و در لاراول به منظور ساماندهی و مدیریت  بخشی از درخواست های مرتبط  برنامه از کلاس های کنترلر استفاده می شود.
کنترلها در دایرکتوری app/Http/Controllers  ایجاد و ذخیره می شوند.

ایجاد یک کنترلر:

 برای ایجاد یک کنترکر کافیست از طریق ترمینال خود به دایرکتوری برنامه رفته و سپس با وارد کردن دستور زیر یک کنترلر ایجاد نمائیم.
php artisan make:controller  UserController  

ساختار یک کنترلر:

namespace AppHttpControllers;
 
use AppUser;
use AppHttpControllersController;
 
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)]);
    }
}
کد بالا نمونه ای از یک کنترل می باشد.
نکته: کلیه کنترلها می بایست از کلاس Controller ارث بری کنند.با استفاده از دستور زیر می توانید اطلاعات مربوط به یک کاربر را به فایل profile که در دایرکتوری user  وجود دارد ارسال نمائید.(طبق مثال فوق)

Route::get('user/{id}', 'UserController@showProfile');

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

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

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

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

 همانطور که در آموزشی قبلی توضیح دادم امکان فیلتر کردن مسیرها در لاراول وجود دارد که البته هر مسیر می تواند مربوط به یک کنترلر مربوط شود.
Route::get('profile', [
    'middleware' => 'auth',
    'uses' => 'UserController@showProfile'
]);

بطور مثال در کد بالا برای دسترسی به متد showProfile بایک از فیلتر auth عبور کرد.

همچنین امکان استفاده از Middleware در متد سازنده کنترل نیز وجود دارد به مثال زیر توجه کنید:

class UserController extends Controller
{
    /**
     * Instantiate a new UserController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
 
        $this->middleware('log', ['only' => ['fooAction', 'barAction']]);
 
        $this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);
    }
}
باتوجه به متد سازنده در کنترلر UserCotroller  برای کلیه اکشن ها فیلتر auth و فیلترهای  log   برای برخی از اکشن ها و   subscribed برای برخی از اکشن ها به جز موارد ذکر شده در آرایه مربوطه مورد نیاز است.

کنترلرهای RESTful

اگر با استفاده از artisan در ترمینال خود اقدام به ایجاد یک کنترلر نمائید ، به صورت پیش فرض اکشن هایی ایجاد می شود که هر کدام از آنها یک مسیر و درخواست خاصی را تحویل می گیرند.

به طور مثال با ایجاد PhotoController توسط ترمینال خود و اضافه کردن کد

Route::resource('photo', 'PhotoController');

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

Verb Path Action Route Name
GET /photo index photo.index
GET /photo/create create photo.create
POST /photo store photo.store
GET /photo/{photo} show photo.show
GET /photo/{photo}/edit edit photo.edit
PUT/PATCH /photo/{photo} update photo.update
DELETE /photo/{photo} destroy photo.destroy

همچنین می توانیم فقط اکشن های خاصی را به صورت RESTful تعریف کنیم
Route::resource('photo', 'PhotoController', ['only' => ['index', 'show']]); Route::resource('photo', 'PhotoController', ['except' => ['create', 'store', 'update', 'destroy']]);

کنترلهای نامرئی

لاراول همچنین به شما اجازه می دهد که به راحتی نسبت به مسیرهای برنامه کنترل داشته باشید.
به طور مثال ابتدا فایل routes کد زیررا نوشته و ذخیره می نمائیم

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

سپس کلاس UserController را ایجاد کرده و طبق مثال زیر می توانید درخواستهای متعدد را کنترل نمائید.


namespace AppHttpControllers;
 
class UserController extends Controller
{
    /**
     * Responds to requests to GET /users
     */
    public function getIndex()
    {
        //
    }
 
    /**
     * Responds to requests to GET /users/show/1
     */
    public function getShow($id)
    {
        //
    }
 
    /**
     * Responds to requests to GET /users/admin-profile
     */
    public function getAdminProfile()
    {
        //
    }
 
    /**
     * Responds to requests to POST /users/profile
     */
    public function postProfile()
    {
        //
    }
}
با ما همراه باشید

AMIR_AKD

دانشجوی کارآفرینی علاقه مند به کسب و کار،عاشق تکنولوژی و مهندس آی تی

0 دیدگاه در “آموزش لاراول؛محبوب ترین فریم ورک پی اچ پی -4”

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نوشته‌های پیوسته

آموزش

پیش بینی درآمد یک کسب‌ و کار

ترکیب کردن رویکردهای متفاوت پیش‌بینی، باعث می‌شود گزارش جامع‌تری به سرمایه‌گذاران ارائه دهید و اعتبار خود و محصولاتتان را نزد آن‌ها بالا ببرید.

آموزش

بهترین فرمت تصویر برای وب‌سایت شما کدام است؟

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

آموزش

بیست‌وپنج روش اساسی برای آوردن ترافیک به وبلاگ شما

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