Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài viết bạn đang xem là tài liệu của Laravel 5x (Giờ đã ngừng support). Bạn có thể xem tài liệu của Laravel mới nhất và đầy đủ tại đây.

Bài 9: Controller trong Laravel

-Trong mô hình MVC thì project sẽ được chia ra làm 3 phần(Model,View,Controller) và trong Laravel framework cũng chia làm 3 phần như vậy. Ở phần trước mình đã giới thiêu với các bạn về view trong Laravel rồi. Và ở phần này mình sẽ giới thiệu với các bạn về Controller trong Laravel.

1,Tạo controller trong Laravel.

-Cũng giống như view, để tạo controller trong Laravel cũng phải có một số ràn buộc như sau:

  • Controller phải được đặt trong đường dẫn App\Http\controllers
  • Tên của controller phải giống với tên class trong file controller đó.
  • Class controller (do bạn tạo) phải extends(kế thừa) từ Controller (chú ý chữ C phải viết hoa).

=>Cách tạo file: -Ở trong Laravel để tạo controller thì chúng ta có hai cách:

Cách 1: Tạo bằng tay.

-Chúng ta có thể tạo một file controller bằng tay hoặc bằng cmd thuần trong đường dẫn App\Http\Controllers. Và để sử dụng được controller đó thì bắt buộc các bạn phải tuân thủ 3 điều kiện phía trên nhé.

-Ví dụ: mình tạo một Homecontroller.php trong App\Http\Controllers thì trong file sẽ có nội dung như sau:

<?php
namespace App\Http\Controllers;

class Homecontroller extends Controller
{
    //your code
}

Cách 2:  Tạo bằng lệnh laravel cung cấp sẵn. + Để tạo một controller bằng lệnh trong Laravel thì các bạn chỉ việc mở commanline lên và trỏ vào thư mục chứa project Laravel của bạn (xem lại bài 1) và gõ lệnh theo cú pháp.

php artisan make:controller Controllername

Hoặc

php artisan make:controller ControllerName --resource

để tạo resource controllers

  • Chú thích: controllername là tên controller các bạn muốn tạo.

Khi đó Laravel sẽ tự sinh cho chúng ta 1 file ControllerName và có sẵn code như sau:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class ControllerName extends Controller
{
    //
}

-Và với resource controllers:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class ControllerName extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

=>Các bạn thấy cách này khá đơn giản đúng không.

2,Sử dụng dụng các action trong Controllers.

-Để tạo một action trong controllers thì chúng ta chỉ việc tạo một hàm ở trong controllers và gọi nó ở trong Route là được.

-Ví dụ: Mình sẽ tạo một controllers home controller và một hàm là index.

<?php
namespace App\Http\Controllers;

class HomeController extends Controller
{
    public function index(){
    	echo "Đây là index trong homecontroller";
    }
}

Và chúng ta sẽ tạo một route để gọi đến action đó.

Route::get('call-controller', 'Homecontroller@index');

-Như thế là chúng ta đã gọi và sử dụng được action trong Controllers rồi.

3,Truyền tham số trong action Controllers.

-Để truyền tham số trong action Controllers thì nó hoàn toàn giống PHP thuần, nên mọi người đọc ví dụ sau của mình rồi tự suy ra kết luận nhé.

-Ví Dụ: Vẫn với homecontroller ở trên, nhưng mình sẽ cho truyền tham số vào controllers như sau:

<?php
namespace App\Http\Controllers;

class HomeController extends Controller
{
    public function index($name, $age){
    	echo "Xin chào $name, $age tuổi";
    }
}

Và mình sẽ khởi tạo một route có truyền tham số cho nó như sau:

Route::get('a/{name}/{age}', 'HomeController@index')->where(['name' => '[a-zA-Z]+', 'age' => '[0-9]+']);

(ai không hiểu xem lại bài 5 nhé) -Như thế là bạn đã có thể truyền tham số cho action trong controllers rồi.

4,Lời Kết.

-Qua phần chia sẻ cơ bản về controllers của mình ở trên thì mình rất hy vọng là mọi người có và nắm được cái nhìn tổng quan cũng như là cách sử dụng Controllers cơ bản trong Larvel. Phần sau mình sẽ giới thiệu với mọi người về cách cấu hình database và xử lý truy vấn với Query Buider trong Laravel.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

8 Comments

bài viết thiếu blade một tá, khó hình dung

truong

7 năm trước

Blade template ở bài 7,8 nhé bạn! Lần sau xem kỹ rồi hãy bình luận.
https://toidicode.com/blade-template-engine-trong-laravel-7.html

Vũ Thanh Tài

7 năm trước

Bài viết rất hay và dễ hiểu, một buổi tối đọc hết nửa Series mà ko thấy chán, Cảm ơn bạn

Nguyễn Đức

6 năm trước

bài viết hay, dể hiểu, cảm ơn bạn!! 

pham thao

6 năm trước

vì sao không dùng route thay cho việc dùng controller ạ? thấy 2 cái gần giống nhau mà nhỉ?

CAO TRAN MINH A

5 năm trước

Anh ơi, khi e làm điều kiện where thì ko bỏ dấu được cho phần tên anh nhỉ?

em nhập URL phải là ký tự không dấu thì mới chạy được, không là sẽ NOT FOUND hết ạ.

Trần Anh Duy

5 năm trước

Bài viết rất hay nhưng phần router khá dài nên hơi mông lung.

dung

1 năm trước

Bài viết rất hay nhưng phần router khá dài nên hơi mông lung.

dung

1 năm trước

Bình luận

Captcha