آموزش کنترل کننده ها در لاراول
آموزش کنترل کننده ها در لاراول
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش کنترل کننده ها در لاراول خواهیم پرداخت.
در چارچوب MVC، حرف “C” مخفف Controller است. این به عنوان یک ترافیک هدایت کننده بین Views و Models عمل می کند. در این درس با آموزش کنترل کننده ها در لاراول آشنا می شوید.
ایجاد کنترلر در لاراول
خط فرمان یا ترمینال را بر اساس سیستم عاملی که استفاده می کنید باز کنید و دستور زیر را برای ایجاد کنترلر با استفاده از Artisan CLI (رابط خط فرمان) تایپ کنید.
1 |
php artisan make: controller <controller-name> --plain |
نام کنترلر خود را <controller-name> جایگزین کنید. با ایجاد آرگومان ساده، یک سازنده ساده ایجاد می شود. اگر نمی خواهید یک سازنده ساده ایجاد کنید، می توانید به سادگی آرگومان را نادیده بگیرید. سازنده ایجاد شده را می توان در app/Http/Controllers مشاهده کرد.
خواهید دید که برخی از برنامه نویسی اولیه قبلاً برای شما انجام شده است و می توانید کدگذاری سفارشی خود را اضافه کنید. کنترلر ایجاد شده را می توان از طریق lines.php با نحو زیر فراخوانی کرد.
1 |
Route::get(‘base URI’,’controller@method’); |
مثال
مرحله 1 – دستور زیر را برای ایجاد UserController اجرا کنید.
1 |
php artisan make: controller UserController --plain |
مرحله 2 – پس از اجرای موفق، خروجی زیر را دریافت خواهید کرد.
مرحله 3 – می توانید کنترلر ایجاد شده را در برنامه/Http/Controller/UserController.php با برخی از کد نویسی اولیه که قبلاً برای شما نوشته شده است مشاهده کنید و می توانید بر اساس نیاز خود کد نویسی خود را اضافه کنید.
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class UserController extends Controller { // } |
کنترل کننده Middleware
ما قبلاً Middleware را دیده ایم و می توان از آن با کنترلر نیز استفاده کرد. Middleware همچنین می تواند به مسیر کنترل کننده یا در سازنده کنترلر شما اختصاص داده شود. می توانید از روش middleware برای اختصاص Middleware به کنترلر استفاده کنید. Middleware ثبت شده را می توان به روش خاصی از کنترلر محدود کرد.
1 2 3 4 |
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile' ]); |
در اینجا ما در مسیر نمایه middleware معتبر را به UserController اختصاص می دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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 معتبر را با استفاده از روش middleware در سازنده UserController اختصاص می دهیم.
مثال
مرحله 1 – خطوط کد زیر را به فایل app/Http/route.php اضافه کنید و آن را ذخیره کنید.
route.php
1 2 3 4 5 |
<?php Route::get('/usercontroller/path',[ 'middleware' => 'First', 'uses' => 'UserController@showPath' ]); |
مرحله 2 – با اجرای خط کد زیر ، یک middleware به نام FirstMiddleware ایجاد کنید.
1 |
php artisan make: middleware FirstMiddleware |
مرحله 3 – کد زیر را به روش دسته بندی جدید FirstMiddleware در app/Http/Middleware اضافه کنید.
FirstMiddleware.php
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace App\Http\Middleware; use Closure; class FirstMiddleware { public function handle($request, Closure $next) { echo '<br>First Middleware'; return $next($request); } } |
مرحله 4 – با اجرای دستور زیر ، یک middleware به نام SecondMiddleware ایجاد کنید.
1 |
php artisan make: middleware SecondMiddleware |
مرحله 5 – کد زیر را به روش دسته دوم SecondMiddleware که در app/Http/Middleware ایجاد شده است اضافه کنید.
SecondMiddleware.php
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace App\Http\Middleware; use Closure; class SecondMiddleware { public function handle($request, Closure $next) { echo '<br>Second Middleware'; return $next($request); } } |
مرحله 6 – با اجرای خط زیر یک کنترلر به نام UserController ایجاد کنید.
1 |
php artisan make: controller UserController --plain |
مرحله 7 – پس از اجرای موفق URL ، خروجی زیر را دریافت خواهید کرد –
مرحله 8 – کد زیر را در فایل app/Http/UserController.php کپی کنید.
app/Http/UserController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?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; } } |
مرحله 9 – حالا اگر هنوز آن را اجرا نکرده اید ، وب سرور داخلی php را با اجرای دستور زیر راه اندازی کنید.
1 |
php artisan serve |
مرحله 10 – آدرس زیر را مشاهده کنید.
1 |
http: // localhost: 8000/usercontroller/path |
مرحله 11 – خروجی مطابق تصویر زیر ظاهر می شود.
کنترل کننده های منابع
اغلب هنگام ایجاد یک برنامه ، ما باید عملیات CRUD (ایجاد، خواندن، به روز رسانی، حذف) را انجام دهیم. لاراول این کار را برای ما آسان می کند. فقط یک کنترلر بسازید و لاراول به طور خودکار تمام روش های عملیات CRUD را ارائه می دهد. همچنین می توانید یک مسیر واحد برای همه روش های موجود در فایل route.php ثبت کنید.
مثال
مرحله 1 – با اجرای دستور زیر یک کنترلر به نام MyController ایجاد کنید.
1 |
php artisan make: controller MyController |
مرحله 2 – کد زیر را وارد کنید
app/Http/Controllers/MyController.php file.
app/Http/Controllers/MyController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?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 – خط کد زیر را در فایل app/Http/route.php اضافه کنید.
app/Http/route.php
1 |
Route::resource('my','MyController'); |
مرحله 4 – ما در حال ثبت تمام روش های MyController با ثبت یک کنترلر با منبع هستیم. در زیر جدول اقدامات انجام شده توسط کنترل کننده منابع است.
Verb | مسیر | اکشن | نام مسیر |
---|---|---|---|
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 | روش فهرست MyController.php را اجرا می کند | index |
http://localhost:8000/my/create | روش ایجاد MyController.php را اجرا می کند | create |
http://localhost:8000/my/1 | روش نمایش MyController.php را اجرا می کند | show |
http://localhost:8000/my/1/edit | روش ویرایش MyController.php را اجرا می کند | edit |
کنترل کننده های ضمنی
کنترل کننده های ضمنی به شما این امکان را می دهند که یک مسیر واحد برای مدیریت هر عملی در کنترلر تعریف کنید. می توانید آن را در فایل route.php با روش Route: controller مانند شکل زیر تعریف کنید.
1 |
Route::controller(‘base URI’,’<class-name-of-the-controller>’); |
<class-name-of-the-controller> را با نام کلاسی که به کنترلر خود داده اید جایگزین کنید.
نام روش کنترل کننده باید با فعل HTTP مانند دریافت یا ارسال شروع شود. اگر آن را با دریافت شروع کنید، فقط درخواست را دریافت می کند و اگر با پست شروع شود، پس از آن درخواست ارسال را نیز انجام می دهد. بعد از فعل HTTP که می توانید ، می توانید هر نامی را برای متد بگذارید اما باید از نسخه موردی URI پیروی کند.
مثال
مرحله 1 – دستور زیر را برای ایجاد کنترلر اجرا کنید. ما نام کلاس ImplicitController را حفظ کرده ایم. شما می توانید هر نام دلخواه خود را به کلاس بدهید.
1 |
php artisan make: controller ImplicitController --plain |
مرحله 2 – پس از اجرای موفق مرحله 1 ، خروجی زیر را دریافت خواهید کرد –
مرحله 3 – کد زیر را در کپی کنید
app/Http/Controllers/ImplicitController.php file.
app/Http/Controllers/ImplicitController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?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 – خط زیر را به فایل app/Http/route.php اضافه کنید تا درخواست ها به کنترلر مشخص شده منتقل شوند.
app/Http/route.php
1 |
Route::controller('test','ImplicitController'); |
تزریق سازنده در لاراول
از ظرف سرویس لاراول برای حل همه کنترلرهای لاراول استفاده می شود. در نتیجه شما می توانید هر نوع وابستگی که کنترلر شما در سازنده آن نیاز دارد را تایپ کنید. وابستگی ها بطور خودکار برطرف شده و در نمونه کنترل کننده تزریق می شوند.
مثال
مرحله 1 – کد زیر را به فایل app/Http/route.php اضافه کنید.
app/Http/route.php
1 2 3 4 |
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index'); |
مرحله 2 – کد زیر را به
app/Http/Controllers/ImplicitController.php file.
app/Http/Controllers/ImplicitController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?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 – برای آزمایش تزریق سازنده به آدرس زیر مراجعه کنید.
1 |
http: // localhost: 8000/myclass |
مرحله 4 – خروجی مطابق تصویر زیر ظاهر می شود.
روش تزریق در لاراول
علاوه بر تزریق سازنده، شما همچنین می توانید نوع وابستگی را به روش های کنترل کنترل خود تایپ کنید.
مثال روش تزریق در لاراول
مرحله 1 – کد زیر را به فایل app/Http/route.php اضافه کنید.
app/Http/route.php
1 2 3 4 |
class MyClass{ public $foo = 'bar'; } Route::get('/myclass','ImplicitController@index'); |
مرحله 2 – کد زیر را به
app/Http/Controllers/ImplicitController.php file.
app/Http/Controllers/ImplicitController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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 – برای آزمایش تزریق سازنده به آدرس زیر مراجعه کنید.
1 |
http: // localhost: 8000/myclass |
خروجی زیر را تولید می کند –
دیدگاه شما