برنامه نویسی با محبوب ترین فریم ورک پی اچ پی 4#

برنامه نویسی با محبوب ترین فریم ورک پی اچ پی 4#
در دومین بخش آموزش با روتینگ (مسیردهی) و در سومین بخش با middleware (فیلتر کردن مسیرها) آشنا شدیم. در این بخش قصد داریم با یکی از اجزای برنامه نویسی MVC به نام کنترلر آشنا بشیم، پس با ما همراه باشید.
دارالترجمه رسمی
دارالترجمه رسمی پارسیس شامل خدمات ترجمه رسمی و تخصصی در بیش از 60 زبان زنده دنیا
جای بروشور دیواری
خرید جای بروشور دیواری و رومیزی
افزونه های سئو وردپرس
بهترین افزونه های سئو وردپرس به صورت کاملا فارسی
تعمیر لوازم خانگی
تعمیر جاروبرقی، مایکروفر، بخارشوی، ظرفشویی، لباسشویی، سولاردام، کولرگازی
خودتان را اینجا معرفی کنید


گاهی ممکن است از 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()
    {
        //
    }
}

با ما همراه باشید

 

محمد دارای مدرک کارشناسی نرم افزار است و به عنوان توسعه‌دهنده نرم‌افزار وب و طراح رابط کاربری در دپارتمان تکنولوژی اطلاعات سازمان خدمات پس از فروش سایپا مشغول بکار می باشد. از سال 88 برنامه نویسی را با زبانهای گروه C شروع کرده و از سال 91 به سمت برنامه نویسی و طراحی وب رفت. وی هم اکنون درحال توسعه اپلیکیشن های موبایل با زبان swift است.

نظرات و سوالات کاربران

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