Home Tutorial Laravel Laravel – Bài 7: Controllers

Laravel – Bài 7: Controllers

25 min read
0
142

Trong khung MVC, chữ ‘C’ là viết tắt của Controller. Nó hoạt động như một lưu lượng truy cập trực tiếp giữa Chế độ xem và Mô hình. Trong chương này, bạn sẽ tìm hiểu về Controller trong Laravel.

Tạo Controller

Mở dấu nhắc lệnh hoặc thiết bị đầu cuối dựa trên hệ điều hành bạn đang sử dụng và nhập lệnh sau để tạo bộ điều khiển bằng Artisan CLI (Giao diện dòng lệnh).

php artisan make:controller <controller-name> --plain

Thay <controller-name> bằng tên Controller của bạn. Điều này sẽ tạo ra một hàm tạo đơn giản khi chúng ta.  Nếu bạn không muốn tạo một hàm tạo đơn giản, bạn chỉ cần bỏ qua đối số. Hàm tạo đã tạo có thể được nhìn thấy tại app/Http/Controllers .

Bạn sẽ thấy rằng một số mã cơ bản đã được thực hiện cho bạn và bạn có thể thêm mã tùy chỉnh của mình. Bộ điều khiển đã tạo có thể được gọi từ routes.php theo cú pháp sau.

cú pháp

Route::get(‘base URI’,’controller@method’);

Thí dụ

Bước 1 – Thực hiện lệnh sau để tạo UserController .

php artisan make:controller UserController --plain

Bước 2 – Sau khi thực hiện thành công, bạn sẽ nhận được đầu ra sau.

Bộ điều khiển người dùng

Bước 3 – Bạn có thể thấy Controller đã tạo tại app/Http/Controller/UserController.php với một số mã cơ bản đã được viết sẵn cho bạn và bạn có thể thêm mã của riêng mình dựa trên nhu cầu của mình.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   //
}

Controller Middleware

Chúng tôi đã thấy Middleware trước đây và nó cũng có thể được sử dụng với Controller . Middleware  cũng có thể được gán cho router hoặc trong hàm tạo của Controller .:

Chỉ định Middleware cho router

Route::get('profile', [
   'middleware' => 'auth',
   'uses' => 'UserController@showProfile'
]);

Ở đây chúng tôi đang gán phần mềm trung gian xác thực cho UserController trong tuyến hồ sơ.

Chỉ định Middleware trong hàm tạo của Controller

<?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');
   }
}

Ở đây chúng tôi đang chỉ định phần mềm trung gian xác thực bằng cách sử dụng phương thức middleware trong hàm tạo UserController .

Thí dụ

Bước 1 – Thêm các dòng mã sau vào tệp app/Http/routes.php và lưu nó.

tuyến đường.php

<?php
Route::get('/usercontroller/path',[
   'middleware' => 'First',
   'uses' => 'UserController@showPath'
]);

Bước 2 – Tạo một middleware có tên là FirstMiddleware bằng cách thực thi dòng mã sau.

php artisan make:middleware FirstMiddleware

Bước 3 – Thêm đoạn mã sau vào phương thức xử lý của FirstMiddleware mới được tạo tại app/Http/Middleware .

FirstMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

class FirstMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>First Middleware';
      return $next($request);
   }
}

Bước 4 – Tạo một middleware có tên là SecondMiddleware bằng cách thực hiện lệnh sau.

php artisan make:middleware SecondMiddleware

Bước 5 – Thêm đoạn mã sau vào phương thức xử lý của SecondMiddleware mới được tạo tại app/Http/Middleware .

SecondMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

class SecondMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>Second Middleware';
      return $next($request);
   }
}

Bước 6 – Tạo bộ điều khiển có tên UserController bằng cách thực hiện dòng sau.

php artisan make:controller UserController --plain

Bước 7 – Sau khi thực hiện thành công URL, bạn sẽ nhận được đầu ra sau –

Bộ điều khiển người dùng1

Bước 8 – Sao chép đoạn mã sau vào tệp app/Http/UserController.php .

ứng dụng/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;
   }
}

Bước 9 – Bây giờ hãy khởi chạy máy chủ web nội bộ của php bằng cách thực hiện lệnh sau, nếu bạn chưa thực hiện lệnh này.

php artisan serve

Bước 10 – Truy cập URL sau.

http://localhost:8000/usercontroller/path

Bước 11 – Đầu ra sẽ xuất hiện như trong hình dưới đây.

Bộ điều khiển người dùng2

Restful Resource Controllers

Thông thường, khi tạo một ứng dụng, chúng ta cần thực hiện các thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa) . Laravel làm cho công việc này trở nên dễ dàng đối với chúng tôi. Chỉ cần tạo một bộ điều khiển và Laravel sẽ tự động cung cấp tất cả các phương thức cho các thao tác CRUD. Bạn cũng có thể đăng ký một tuyến duy nhất cho tất cả các phương thức trong tệp routes.php.

Thí dụ

Bước 1 – Tạo Controller có tên MyController bằng cách thực hiện lệnh sau.

php artisan make:controller MyController

Bước 2 – Thêm đoạn mã sau vào

tệp app/Http/Controllers/MyController.php .

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';
   }
}

Bước 3 – Thêm dòng mã sau vào tệp app/Http/routes.php .

app/Http/routes.php

Route::resource('my','MyController');

Bước 4 – Chúng tôi hiện đang đăng ký tất cả các phương thức của MyController bằng cách đăng ký Controller với Resource. Dưới đây là bảng các hành động được xử lý bởi bộ điều khiển tài nguyên.

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


Bước 5
 – Thử thực thi các URL được hiển thị trong bảng sau.

URL Sự miêu tả Hình ảnh đầu ra
http://localhost:8000/my Thực thi phương thức chỉ mục của MyController.php danh sách
http://localhost:8000/my/create Thực thi phương thức tạo của MyController.php tạo
http://localhost:8000/my/1 Thực thi phương thức hiển thị của MyController.php hiển thị
http://localhost:8000/my/1/edit Thực thi phương thức chỉnh sửa của MyController.php chỉnh sửa

Implicit Controllers

Controllers ẩn cho phép bạn xác định một router duy nhất để xử lý mọi hành động trong Controllers. Bạn có thể định nghĩa nó trong tệp route.php với phương thức Route:controller như bên dưới.

Route::controller(‘base URI’,’<class-name-of-the-controller>’);

Thay thế <class-name-of-the-controller> bằng tên lớp mà bạn đã đặt cho bộ điều khiển của mình.

Tên phương thức của controller phải bắt đầu bằng động từ HTTP như get hoặc post. Nếu bạn bắt đầu với get, nó sẽ chỉ xử lý yêu cầu nhận và nếu nó bắt đầu bằng bài đăng thì nó sẽ xử lý yêu cầu bài đăng. Sau động từ HTTP bạn có thể, bạn có thể đặt bất kỳ tên nào cho phương thức nhưng tên đó phải tuân theo phiên bản viết hoa tiêu đề của URI.

Thí dụ

Bước 1 – Thực hiện lệnh bên dưới để tạo controller. Chúng tôi đã giữ tên lớp ImplicitController . Bạn có thể đặt bất kỳ tên nào bạn chọn cho lớp.

php artisan make:controller ImplicitController --plain

Bước 2 – Sau khi thực hiện thành công bước 1, bạn sẽ nhận được đầu ra sau –

bộ điều khiển ngầm định

Bước 3 – Sao chép đoạn mã sau vào

tệp app/Http/Controllers/ImplicitController.php .

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';
   }
}

Bước 4 – Thêm dòng sau vào tệp app/Http/routes.php để định tuyến các yêu cầu tới controller được chỉ định.

app/Http/routes.php

Route::controller('test','ImplicitController');

Constructor Injection

Bộ chứa dịch vụ Laravel được sử dụng để giải quyết tất cả các bộ điều khiển của Laravel. Kết quả là bạn có thể gõ gợi ý bất kỳ phụ thuộc nào mà bộ điều khiển của bạn có thể cần trong hàm tạo của nó. Các phần phụ thuộc sẽ tự động được giải quyết và đưa vào phiên bản bộ điều khiển.

Thí dụ

Bước 1 – Thêm đoạn mã sau vào tệp app/Http/routes.php .

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Bước 2 – Thêm đoạn mã sau vào

tệp app/Http/Controllers/ImplicitController.php .

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);
   }
}

Bước 3 – Truy cập URL sau để kiểm tra hàm tạo.

http://localhost:8000/myclass

Bước 4 – Đầu ra sẽ xuất hiện như trong hình dưới đây.

Lớp học của tôi

Method Injection

Ngoài việc đưa vào hàm tạo, bạn cũng có thể dùng cách khác — phụ thuộc gợi ý vào các phương thức hành động của bộ điều khiển của bạn.

Thí dụ

Bước 1 – Thêm đoạn mã sau vào tệp app/Http/routes.php .

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Bước 2 – Thêm đoạn mã sau vào

tệp app/Http/Controllers/ImplicitController.php .

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);
   }
}

Bước 3 – Truy cập URL sau để kiểm tra hàm tạo.

http://localhost:8000/myclass

Nó sẽ tạo ra đầu ra sau –

Xây dựng tiêm

Load More Related Articles
Load More By quangvu
  • Laravel – Bài 11: Error Handling

    Hầu hết các ứng dụng web đều có cơ chế cụ thể để xử lý lỗi. Bằng cách sử dụng chúng, họ th…
  • Laravel – Bài 16 Authentication (xác thực)

    Xác thực là quá trình xác định thông tin đăng nhập của người dùng. Trong các ứng dụng web,…
  • Laravel – Bài 15: Session

    Session được sử dụng để lưu trữ thông tin về người dùng trong các yêu cầu. Laravel cung cấ…
Load More In Laravel

Check Also

Tự làm web chatGPT đơn giản cho phép dùng nhiều OpenAI key

Trong thời đại công nghệ phát triển như hiện nay, chatbot đang dần trở thành một giải pháp…