در فریمورک هایی که بر مبنای MVC پیاده سازی شده اند حرف C به Controller اشاره میکند. در فریمورک لاراول کنترلرها بین View ها و Model ها نقش بازی میکند. در این درس به Controller ها در فریمورک Laravel خواهیم پرداخت.
برای ساخت کنترلر جدید در فریمورک لاراول برای وارد کردن دستورات یک Terminal یا command promp بنا به سیستم عامل خود باز کنید و دستور زیر را وارد کنید.
php artisan make:controller <controller-name> --plain
در قطعه کد بالا <controller-name> را با نام کنترلر مورد نیاز خود در لاراول جایگزین کنید.
دستور بالا یک عدد constructor پایه ای نیز بصورت خودکار میسازد چون در پایان دستور ما --plain را قرار دادیم و اگر نیازی به constructor ندارید به راحتی میتوانید این دستور را در پایان وارد نکنید.
کنترلر جدید لاراول در مسیر app/Http/Controllers موجود و قابل مشاهده است.
اگر فایل کنترلر جدید را باز کنید مشاهده میکنید که کمی کد بصورت خودکار برای شما نوشته شده است و شما میتوانید آنها را تغییر دهید.
کنترلر جدید ساخته شده توسط route ها قابل دسترسی است که نمونه کد در زیر امده است.
Route::get(‘base URI’,’controller@method’);
مثال
قدم اول - ما قصد داریم یک کنترلر جدید به نام UserController بسازیم پس باید دستور زیر را در ترمینال اجرا کنیم.
php artisan make:controller UserController --plain
قدم دوم - بعد از اجرای دستور بالا باید نتیجه در ترمینال مشابه تصویر زیر باشد.
قدم سوم - کنترلر ساخته شده در مسیر app/Http/Controller/UserController.php قرار دارد که اگر باز کنید کمی کد آماده درونش ساخته شده است و شما میتوانید کدهایی مورد نیاز خود را به این کنترلر جدید اضافه کنید.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
//
}
ما قبلا در مورد Middleware ها در لاراول و همینطور middleware ها در controller ها صحبت کردیم و یک درس کاملی ارائه دادیم.
Middleware همچنین میتوانند به route یک controller و constructor مربوط به کنترلر متصل شوند.
شما میتوانید متود middleware را به مقدار middleware کنترلر اختصاص دهید.
یک middleware رجیستر شده میتواند محدود یه یک متود کنترلر باشد.
Route::get('profile', [
'middleware' => 'auth',
'uses' => 'UserController@showProfile'
]);
در نمونه کد بالا مشاهده میکنید که ما یک middleware به نام auth را به مسیر یا route مربوط به profile از کنترلر UserController اختصاص داده ایم.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct() {
$this->middleware('auth');
}
}
در مثال بالا مشاهده میکنید که ما Middleware با نام auth را به متود constructor کنترلر UserController اختصاص داده ایم.
مثال
قدم اول - کد های زیر را به routes لاراول خود اضافه کنید و ذخیره کنید.
<?php
Route::get('/usercontroller/path',[
'middleware' => 'First',
'uses' => 'UserController@showPath'
]);
قدم دوم - یک middleware جدید بسازید و نام آنرا FirstMiddleware انتخاب کنید . این کار را دستور زیر در ترمینال انجام میدهد.
php artisan make:middleware FirstMiddleware
قدم سوم - کدهای زیر را به متود handle مربوط به FirstMiddleware که تازه ایجاد کردیم و در مسیر app/Http/Middleware قرار داد کپی کنید.
<?php
namespace App\Http\Middleware;
use Closure;
class FirstMiddleware {
public function handle($request, Closure $next) {
echo '<br>First Middleware';
return $next($request);
}
}
قدم چهارم - یک middleware جدید به نام SecondMiddleware بسازید. از طریق اجرای دستور زیر میتوانید این کار را انجام دهید.
php artisan make:middleware SecondMiddleware
قدم پنجم - فایل جدید middleware که ایجاد کردید را باز کنید. این فایل در مسیر app/Http/Middleware قرار دارد و کد زیر را در متود handle آن کپی کنید.
<?php
namespace App\Http\Middleware;
use Closure;
class SecondMiddleware {
public function handle($request, Closure $next) {
echo '<br>Second Middleware';
return $next($request);
}
}
قدم ششم - یک کنترلر جدید به نام UserController توسط دستور زیر بسازید.
php artisan make:controller UserController --plain
قدم هفتم - بعد از اجرای کد بالا نتیجه در ترمینال شما باید مشابه تصویر زیر باشد.
قدم هشتم - کدهای زیر را در مسیر app/Http/UserController.php که کنترلر لاراول شما میباشد کپی کنید.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct() {
$this->middleware('Second');
}
public function showPath(Request $request) {
$uri = $request->path();
echo '<br>URI: '.$uri;
$url = $request->url();
echo '<br>';
echo 'URL: '.$url;
$method = $request->method();
echo '<br>';
echo 'Method: '.$method;
}
}
قدم نهم - حالا با دستور زیر وب سرور درونی php و لاراول را اجرا کنید
php artisan serve
قدم دهم - مرورگر خود را باز کنید و از آدرس url زیر بازدید کنید.
http://localhost:8000/usercontroller/path
قدم یازدهم - نتیجه ی مشاهده شده در مرورگر باید به شکل تصویر زیر باشد.
در اغلب اپلیکیشن های لاراولی ما نیاز به عملیات CRUD یا CREATE - READ - UPDATE - DELETE داریم. فریمورک لاراول این کار رابرای ما آسان کرده است.
کافیه فقط یک کنترلر جدید در لاراول بسازید و لاراول به شما کمک خواهد کرد تا عملیات CRUD را به سادگی هر چه تمام تر انجام دهید.
همچنین برای تمامی این عملیات ها نیز میتوانید یک route واحد تعریف کنید.
مثال :
قدم 1 - در لاراول خود یک کنترلر جدید به نام MyController بسازید. این کار را توسط دستور زیر در ترمینال میتوانید بسازید.
php artisan make:controller MyController
قدم 2 - کدهای زیر را به فایل app/Http/Controllers/MyController.php اضافه کنید.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MyController extends Controller {
public function index() {
echo 'index';
}
public function create() {
echo 'create';
}
public function store(Request $request) {
echo 'store';
}
public function show($id) {
echo 'show';
}
public function edit($id) {
echo 'edit';
}
public function update(Request $request, $id) {
echo 'update';
}
public function destroy($id) {
echo 'destroy';
}
}
قدم 3 - کدهای زیر را فایل routes لاراول خودتان اضافه کنید.
Route::resource('my','MyController');
قدم 4 - خب همانطور که مشاهده کردید ما تمامی متود ها را در کنترلر MyController با استفاده از ایجاد یک کنترلر از نوع resource ایجاد کردیم.
در جدول زیر route های ساخته شده و اکشن و مسیر انها و همچنین نوع ارسال مشخص شده است.
verb | path | action | route name |
GET | /my | index | my.index |
GET | /my/create | create | my.create |
POST | /my | store | my.store |
GET | /my/{my} | show | my.show |
GET | /my/{my}/edit | edit | my.edit |
PUT/PATCH | /my/{my} | update | my.update |
DELETE | /my/{my} | destroy | my.destroy |
قدم 5 - سعی کنید URL های زیر را اجرا کنید و نتیجه را ببینید.
آدرس url | توضیحات | |
http://localhost:8000/my | Executes index method of MyController.php | index |
http://localhost:8000/my/create | Executes create method of MyController.php | create |
http://localhost:8000/my/1 | Executes show method of MyController.php | show |
http://localhost:8000/my/1/edit | Executes edit method of MyController.php | edit |
کنترلرهای نوع Implicit در لاراول به شما کمک میکند تا توسط یک route بتوانید تمامی اکشن های مورد نیاز را کنترل کنید.
این route ها همانند route های عادی فریمورک لاراول تعریف میشوند و باید درون فایل route ها به شکل Route:controller نوشته شود. به مثال زیر دقت کنید.
Route::controller(‘base URI’,’<class-name-of-the-controller>’);
در کد بالا <class-name-of-the-controller> را با نام کنترلر مورد نظر که ساخته اید تغییر دهید.
نام متود کنترلر باید با لغت HTTP استارت شود همانند get یا post که اگر آنرا با get استارت کنید به درخواست های GET رسیدگی میکند و اگر با post استارت کنید به درخواست های POST رسیدگی میکند.
بعد از HTTP شما میتوانید هر نامی را انتخاب کنید اما باید از قواعد URL پیروی کند.
مثال
قدم 1 - دستور زیر را اجرا کنید تا یک کنترلر جدید ساخته شود نام کنترلر ImplicitController هست. میتوانید هر نامی برای کلاس در نظر بگیرید.
php artisan make:controller ImplicitController --plain
قدم 2 - اگر قدم 1 را به درستی انجام داده باشید باید نتیجه در ترمینال یا کامند پرومپ به شکل زیر باشد.
قدم 3 - کد زیر را در مسیر app/Http/Controllers/ImplicitController.php کپی کنید.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
/**
* Responds to requests to GET /test
*/
public function getIndex() {
echo 'index method';
}
/**
* Responds to requests to GET /test/show/1
*/
public function getShow($id) {
echo 'show method';
}
/**
* Responds to requests to GET /test/admin-profile
*/
public function getAdminProfile() {
echo 'admin profile method';
}
/**
* Responds to requests to POST /test/profile
*/
public function postProfile() {
echo 'profile method';
}
}
قدم 4 - کد زیر را به فایل route های لاراول خود اضافه کنید.
Route::controller('test','ImplicitController');
ابزار Laravel service container برای مدیریت کنترلرهای فریمورک لاراول استفاده میشود. همانطور که میدانید هر کنترلر برای استفاده از یک وابستگی باید انرا در constructor یا متود سازنده ی خود فراخوانی و پیاده سازی کند.
تمامی پیش نیاز ها و وابستگی ها بصورت خودکار به متود سازنده ی یک کنترلر در لاراول تزریق و بعدا استفاده خواهند شد.
مثال
قدم 1 - کد های زیر را به فایل route های فریمورک لاراول خود اضافه کنید.
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
قدم 2 - کدهای زیر را به مسیر app/Http/Controllers/ImplicitController.php فریمورک لاراول اضافه کنید.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
private $myclass;
public function __construct(\MyClass $myclass) {
$this->myclass = $myclass;
}
public function index() {
dd($this->myclass);
}
}
قدم 3 - به آدرس url زیر مراجعه کنید تا نتیجه ی استفاده از تزریق constructor یا متود سازنده را ببینید.
http://localhost:8000/myclass
قدم 4 - نتیجه ی مشاهده شده باید به شکل زیر باشد.
در فریمورک لاراول ممکن است شما بعنوان توسعه ی لاراول ، قصد داشته باشید وابستگی های مورد نیاز خود را به متود اکشن های مختلف فریمورک لاراول تزریق کنید.
در مثال بعدی این مورد را آموزش خواهیم داد.
مثال
قدم 1 - کدهای زیر را به فایل route های خود اضافه کنید.
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
قدم 2 - کدهای زیر را به مسیر و فایل app/Http/Controllers/ImplicitController.php لاراول خود اضافه کنید.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
public function index(\MyClass $myclass) {
dd($myclass);
}
}
قدم 3 - به مسیر url زیر بروید و نتیجه را مشاهده کنید.
http://localhost:8000/myclass
نتیجه باید مشابه تصویر زیر باشد.
اتمام درس.
محصولات برگزیده مناسب شما
دوره ی آموزش کامل فریمورک لاراول Laravel دوره پروژه محور ساخت فروشگاه بامیلو با لاراول کارگاه آموزشی نحوه ی آپدیت ورژن فریمورک laravel دوره ی آموزش ویوجی اس ( Vuejs 3) پروژه محور به همراه Nuxt js