فهرست:
در چارچوب MVC ، حرف ‘C’ مخفف Controller
است. کنترلر به عنوان یک رابط جهت دهنده بین Views
و Models
عمل می کند. در این بخش، شما با Controllers
در لاراول آشنا خواهید شد.
ایجاد Controller در لاراول
در لاراول برای ایجاد کنترلر از خط فرمان زیر استفاده می کنیم.
[pastacode lang=”markup” manual=”php%20artisan%20make%3Acontroller%20%3Ccontroller-name%3E%20–plain%0A” message=”” highlight=”” provider=”manual”/]
< controller-name >
را با نام کنترل کننده خود جایگزین کنید. کنترلر ایجاد شده را می توان در app/Http/Controllers
مشاهده کرد. در مسیر فوق خواهید دید که برخی از مقدمات مورد نیاز شما در فایل مورد نظر ایجاد شده است و می توانید برنامه نویسی دلخواه خود را به آن اضافه کنید. با دستور زیر می توان کنترلر ایجاد شده را از فایل route.php فراخوانی کرد.
[pastacode lang=”php” manual=”Route%3A%3Aget(‘base%20URI’%2C’controller%40method’)%3B%0A” message=”” highlight=”” provider=”manual”/]
حال بیایید آموزش بالا را در یک مثال کاربردی بررسی نماییم. برای ایجاد UserController
دستور زیر را اجرا کنید.
[pastacode lang=”php” manual=”php%20artisan%20make%3Acontroller%20UserController%20–plain%0A” message=”” highlight=”” provider=”manual”/]
شما می توانید کنترل کننده ایجاد شده را در فایل Http/Controller/UserController.php
مشاهده کنید و می توانید بر اساس نیاز خود آن را تغییر دهید. محتویات فایل ایجاد شده بصورت زیر خواهد بود.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CControllers%3B%0A%0Ause%20Illuminate%5CHttp%5CRequest%3B%0Ause%20App%5CHttp%5CRequests%3B%0Ause%20App%5CHttp%5CControllers%5CController%3B%0A%0Aclass%20UserController%20extends%20Controller%20%7B%0A%20%20%20%2F%2F%0A%7D” message=”” highlight=”” provider=”manual”/]
Controller Middleware
ما آموزش های قبلی میدلور ها را بصورت کامل بررسی کرده ایم، شما می توانید از Middleware
با کنترلر نیز استفاده کرنید. Middleware
همچنین می تواند به Router
کنترلر یا متد سازنده کنترلر شما اختصاص یابد.
اختصاص Middleware به Router
[pastacode lang=”php” manual=”Route%3A%3Aget(‘profile’%2C%20%5B%0A%20%20%20’middleware’%20%3D%3E%20’auth’%2C%0A%20%20%20’uses’%20%3D%3E%20’UserController%40showProfile’%0A%5D)%3B” message=”” highlight=”” provider=”manual”/]
در اینجا ما میدلور auth
را به UserController
در Route
اختصاص می دهیم.
اختصاص دادن Middleware به متد سازنده Controller
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CControllers%3B%0A%0Ause%20Illuminate%5CHttp%5CRequest%3B%0Ause%20App%5CHttp%5CRequests%3B%0Ause%20App%5CHttp%5CControllers%5CController%3B%0A%0Aclass%20UserController%20extends%20Controller%20%7B%0A%20%20%20public%20function%20__construct()%20%7B%0A%20%20%20%20%20%20%24this-%3Emiddleware(‘auth’)%3B%0A%20%20%20%7D%0A%7D” message=”” highlight=”” provider=”manual”/]
در اینجا ما میدلور auth
را با استفاده از روش middleware
درمتد سازنده UserController
تعریف می کنیم. برای بررسی بهتر موارد مورد اشاره در بالا یک مثال کاربردی را پیش می بریم. کد زیر را در فایل app/Http/routes.php
قرار دهید.
[pastacode lang=”php” manual=”%3C%3Fphp%0ARoute%3A%3Aget(‘%2Fusercontroller%2Fpath’%2C%5B%0A%20%20%20’middleware’%20%3D%3E%20’First’%2C%0A%20%20%20’uses’%20%3D%3E%20’UserController%40showPath’%0A%5D)%3B” message=”app/Http/routes.php” highlight=”” provider=”manual”/]
با اجرای خط کد فرمان زیر، یک میدل ور به نام FirstMiddleware
ایجاد کنید.
[pastacode lang=”markup” manual=”php%20artisan%20make%3Amiddleware%20FirstMiddleware%0A” message=”” highlight=”” provider=”manual”/]
کد زیر را به FirstMiddleware
ایجاد شده در app/Http/Middleware
اضافه کنید.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CMiddleware%3B%0Ause%20Closure%3B%0A%0Aclass%20FirstMiddleware%20%7B%0A%20%20%20public%20function%20handle(%24request%2C%20Closure%20%24next)%20%7B%0A%20%20%20%20%20%20echo%20’%3Cbr%3EFirst%20Middleware’%3B%0A%20%20%20%20%20%20return%20%24next(%24request)%3B%0A%20%20%20%7D%0A%7D” message=”FirstMiddleware.php” highlight=”” provider=”manual”/]
با اجرای دستور زیر یک میدلور به نام SecondMiddleware
ایجاد کنید.
[pastacode lang=”markup” manual=”php%20artisan%20make%3Amiddleware%20SecondMiddleware%0A” message=”” highlight=”” provider=”manual”/]
کد زیر را به میدلور SecondMiddleware
ایجاد شده در app/Http/Middleware
اضافه کنید.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CMiddleware%3B%0Ause%20Closure%3B%0A%0Aclass%20SecondMiddleware%20%7B%0A%20%20%20public%20function%20handle(%24request%2C%20Closure%20%24next)%20%7B%0A%20%20%20%20%20%20echo%20’%3Cbr%3ESecond%20Middleware’%3B%0A%20%20%20%20%20%20return%20%24next(%24request)%3B%0A%20%20%20%7D%0A%7D” message=”SecondMiddleware.php” highlight=”” provider=”manual”/]
با اجرای خط فرمان زیر یک کنترلر به نام UserController
ایجاد کنید.
[pastacode lang=”markup” manual=”php%20artisan%20make%3Acontroller%20UserController%20–plain%0A” message=”” highlight=”” provider=”manual”/]
کد زیر را در مسیر app/Http/UserController.php
قرار دهید.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CControllers%3B%0A%0Ause%20Illuminate%5CHttp%5CRequest%3B%0Ause%20App%5CHttp%5CRequests%3B%0Ause%20App%5CHttp%5CControllers%5CController%3B%0A%0Aclass%20UserController%20extends%20Controller%20%7B%0A%20%20%20public%20function%20__construct()%20%7B%0A%20%20%20%20%20%20%24this-%3Emiddleware(‘Second’)%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20showPath(Request%20%24request)%20%7B%0A%20%20%20%20%20%20%24uri%20%3D%20%24request-%3Epath()%3B%0A%20%20%20%20%20%20echo%20’%3Cbr%3EURI%3A%20′.%24uri%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%24url%20%3D%20%24request-%3Eurl()%3B%0A%20%20%20%20%20%20echo%20’%3Cbr%3E’%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20echo%20’URL%3A%20′.%24url%3B%0A%20%20%20%20%20%20%24method%20%3D%20%24request-%3Emethod()%3B%0A%20%20%20%20%20%20echo%20’%3Cbr%3E’%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20echo%20’Method%3A%20′.%24method%3B%0A%20%20%20%7D%0A%7D” message=”app/Http/UserController.php” highlight=”” provider=”manual”/]
اگر هنوز آن را اجرا نکرده اید ، با اجرای دستور زیر وب سرور داخلی php را راه اندازی کنید.
[pastacode lang=”markup” manual=”php%20artisan%20serve” message=”” highlight=”” provider=”manual”/]
به URL زیر مراجعه کنید.
[pastacode lang=”markup” manual=”http%3A%2F%2Flocalhost%3A8000%2Fusercontroller%2Fpath” message=”” highlight=”” provider=”manual”/]
خروجی مرورگر شما باید بصورت زیر باشد.
[pastacode lang=”markup” manual=”First%20Middleware%0ASecond%20Middleware%0AURI%3A%20usercontroller%2Fpath%0AURL%3A%20http%3A%2F%2Flocalhost%3A8000%2Fusercontroller%2Fpath%0AMethod%3A%20GET” message=”” highlight=”” provider=”manual”/]
Restful Resource Controllers
غالباً هنگام ساخت یک برنامه، ما باید عملیات CRUD (ایجاد، خواندن، به روزرسانی، حذف) را انجام دهیم. لاراول این کار را برای ما آسان می کند. فقط یک کنترلر ایجاد کنید، لاراول به طور خودکار تمام روش های عملیات CRUD را آماده می کند. همچنین می توانید یک Route واحد را برای همه متدها در فایل routes.php
ایجاد کنید. مورد بالا را در قالب یک مثال بررسی می کنیم با خط فرمان زیر کنترلر MyController را ایجاد می کنیم.
[pastacode lang=”markup” manual=”php%20artisan%20make%3Acontroller%20MyController%0A” message=”” highlight=”” provider=”manual”/]
سپس کد زیر را در فایل ایجاد شده در مسیر app/Http/Controllers/MyController.php
بارگذاری می کنیم.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CControllers%3B%0A%0Ause%20Illuminate%5CHttp%5CRequest%3B%0Ause%20App%5CHttp%5CRequests%3B%0Ause%20App%5CHttp%5CControllers%5CController%3B%0A%0Aclass%20MyController%20extends%20Controller%20%7B%0A%20%20%20public%20function%20index()%20%7B%0A%20%20%20%20%20%20echo%20’index’%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20create()%20%7B%0A%20%20%20%20%20%20echo%20’create’%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20store(Request%20%24request)%20%7B%0A%20%20%20%20%20%20echo%20’store’%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20show(%24id)%20%7B%0A%20%20%20%20%20%20echo%20’show’%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20edit(%24id)%20%7B%0A%20%20%20%20%20%20echo%20’edit’%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20update(Request%20%24request%2C%20%24id)%20%7B%0A%20%20%20%20%20%20echo%20’update’%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20destroy(%24id)%20%7B%0A%20%20%20%20%20%20echo%20’destroy’%3B%0A%20%20%20%7D%0A%7D” message=”app/Http/Controllers/MyController.php” highlight=”” provider=”manual”/]
خط کد زیر را در فایل app/Http/lines.php
اضافه کنید.
[pastacode lang=”php” manual=”Route%3A%3Aresource(‘my’%2C’MyController’)%3B%0A” message=”app/Http/routes.php” highlight=”” provider=”manual”/]
اکنون ما با تعریف کنترلر MyController در روت به همه متد های آن کنترلر دسترسی خواهیم داشت.
Implicit Controllers
در این نوع کنترلرها لاراول به شما این امکان را می دهد که به راحتی یک مسیر واحد برای کنترل هر عملی در کنترل کننده تعریف کنید. نحوه تعریف آن در Router
بصورت زیر است.
[pastacode lang=”php” manual=”Route%3A%3Acontroller(‘base%20URI’%2C’%3Cclass-name-of-the-controller%3E’)%3B” message=”” highlight=”” provider=”manual”/]
< class-name-of-the-controller >
را با نام کلاسی که به کنترل کننده خود داده اید جایگزین کنید. نام متد کنترلر باید با فعل HTTP
مانند دریافت یا ارسال شروع شود. اگر آن را با get شروع کنید، این متد فقط درخواست GET
را اداره می کند و اگر با post شروع شود، درخواست POST
را مدیریت می کند و چنانچه با any شروع شد هر نوع درخواست ارجا شده به آنمتد مدیریت خواهد شد، بعد از فعل HTTP
که می توانید ، می توانید هر نام قابل قبول در URI
را به متد مورد نظر خود اختصاص دهید. برای درک بهتر این حالت را در غالب یک مثال بررسی می کنیم. برای ایجاد کنترلر ImplicitController
از دستور زیر استفاده نمایید.
[pastacode lang=”markup” manual=”php%20artisan%20make%3Acontroller%20ImplicitController%20–plain” message=”” highlight=”” provider=”manual”/]
حال محتویات فایل app/Http/Controllers/ImplicitController.php
بصورت زیر تغییر دهید.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CControllers%3B%0A%0Ause%20Illuminate%5CHttp%5CRequest%3B%0Ause%20App%5CHttp%5CRequests%3B%0Ause%20App%5CHttp%5CControllers%5CController%3B%0A%0Aclass%20ImplicitController%20extends%20Controller%20%7B%0A%20%20%20%2F**%0A%20%20%20%20%20%20*%20Responds%20to%20requests%20to%20GET%20%2Ftest%0A%20%20%20*%2F%0A%20%20%20public%20function%20getIndex()%20%7B%0A%20%20%20%20%20%20echo%20’index%20method’%3B%0A%20%20%20%7D%0A%20%20%20%0A%20%20%20%2F**%0A%20%20%20%20%20%20*%20Responds%20to%20requests%20to%20GET%20%2Ftest%2Fshow%2F1%0A%20%20%20*%2F%0A%20%20%20public%20function%20getShow(%24id)%20%7B%0A%20%20%20%20%20%20echo%20’show%20method’%3B%0A%20%20%20%7D%0A%20%20%20%0A%20%20%20%2F**%0A%20%20%20%20%20%20*%20Responds%20to%20requests%20to%20GET%20%2Ftest%2Fadmin-profile%0A%20%20%20*%2F%0A%20%20%20public%20function%20getAdminProfile()%20%7B%0A%20%20%20%20%20%20echo%20’admin%20profile%20method’%3B%0A%20%20%20%7D%0A%20%20%20%0A%20%20%20%2F**%0A%20%20%20%20%20%20*%20Responds%20to%20requests%20to%20POST%20%2Ftest%2Fprofile%0A%20%20%20*%2F%0A%20%20%20public%20function%20postProfile()%20%7B%0A%20%20%20%20%20%20echo%20’profile%20method’%3B%0A%20%20%20%7D%0A%7D” message=”app/Http/Controllers/ImplicitController.php” highlight=”” provider=”manual”/]
فایل روتر app/Http/routes.php
را بصورت زیر تغییر دهید.
[pastacode lang=”markup” manual=”Route%3A%3Acontroller(‘test’%2C’ImplicitController’)%3B” message=”” highlight=”” provider=”manual”/]
Constructor Injection
در این حالت شما به راحتی می توانید، با کمک کانتینر سرویس لاراول یک نمونه از کلاس مورد نظر خود را به متد سازنده کنترلر خود تزریق نمایید. برای درک بهتر این مورد به مثال زیر خوب دقت کنید. کد زیر را در فایل app/Http/routes.php
قرار دهید.
[pastacode lang=”php” manual=”class%20MyClass%7B%0A%20%20%20public%20%24foo%20%3D%20’bar’%3B%0A%7D%0ARoute%3A%3Aget(‘%2Fmyclass’%2C’ImplicitController%40index’)%3B” message=”app/Http/routes.php” highlight=”” provider=”manual”/]
و همچنین در قایل app/Http/Controllers/ImplicitController.php
کد های زیر را بارگذاری نمایید.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CControllers%3B%0A%0Ause%20Illuminate%5CHttp%5CRequest%3B%0Ause%20App%5CHttp%5CRequests%3B%0Ause%20App%5CHttp%5CControllers%5CController%3B%0A%0Aclass%20ImplicitController%20extends%20Controller%20%7B%0A%20%20%20private%20%24myclass%3B%0A%20%20%20%0A%20%20%20public%20function%20__construct(%5CMyClass%20%24myclass)%20%7B%0A%20%20%20%20%20%20%24this-%3Emyclass%20%3D%20%24myclass%3B%0A%20%20%20%7D%0A%20%20%20public%20function%20index()%20%7B%0A%20%20%20%20%20%20dd(%24this-%3Emyclass)%3B%0A%20%20%20%7D%0A%7D” message=”app/Http/Controllers/ImplicitController.php” highlight=”” provider=”manual”/]
حال آدرس زیر را در مرورگر خود اجرا نمایید.
[pastacode lang=”markup” manual=”http%3A%2F%2Flocalhost%3A8000%2Fmyclass” message=”” highlight=”” provider=”manual”/]
خروجی شما باید بصورت زیر باشد و همانطور که مشاهده می فرماید کلاس MyClass
به متد سازنده کنترلر شما تزریق و از طریق آن اجرا شده است.
[pastacode lang=”markup” manual=”MyClass%20%23215%20%7B%20%0A%09%2Bfoo%3Abar%0A%7D” message=”” highlight=”” provider=”manual”/]
Method Injection
در این حالت شما به راحتی می توانید، یک نمونه از کلاس مورد نظر خود را به یک متد کنترلر خود تزریق نمایید. برای درک بهتر این مورد به مثال زیر خوب دقت کنید. کد زیر را در فایل app/Http/routes.php
قرار دهید.
[pastacode lang=”php” manual=”class%20MyClass%7B%0A%20%20%20public%20%24foo%20%3D%20’bar’%3B%0A%7D%0ARoute%3A%3Aget(‘%2Fmyclass’%2C’ImplicitController%40index’)%3B” message=”app/Http/routes.php” highlight=”” provider=”manual”/]
و همچنین در قایل app/Http/Controllers/ImplicitController.php
کد های زیر را بارگذاری نمایید.
[pastacode lang=”php” manual=”%3C%3Fphp%0A%0Anamespace%20App%5CHttp%5CControllers%3B%0A%0Ause%20Illuminate%5CHttp%5CRequest%3B%0Ause%20App%5CHttp%5CRequests%3B%0Ause%20App%5CHttp%5CControllers%5CController%3B%0A%0Aclass%20ImplicitController%20extends%20Controller%20%7B%0A%20%20%20public%20function%20index(%5CMyClass%20%24myclass)%20%7B%0A%20%20%20%20%20%20dd(%24myclass)%3B%0A%20%20%20%7D%0A%7D%20″ message=”app/Http/Controllers/ImplicitController.php” highlight=”” provider=”manual”/]
حال آدرس زیر را در مرورگر خود اجرا نمایید.
[pastacode lang=”markup” manual=”http%3A%2F%2Flocalhost%3A8000%2Fmyclass” message=”” highlight=”” provider=”manual”/]
خروجی شما باید بصورت زیر باشد و همانطور که مشاهده می فرماید کلاس MyClass
به متد سازنده کنترلر شما تزریق و از طریق آن اجرا شده است.
[pastacode lang=”markup” manual=”MyClass%20%23215%20%7B%20%0A%09%2Bfoo%3Abar%0A%7D” message=”” highlight=”” provider=”manual”/]