Hướng dẫn can you use php in mvc? - bạn có thể sử dụng php trong mvc không?

Giới thiệu

Hôm nay tôi sẽ chỉ ra cách tạo một ứng dụng PHP đơn giản theo mẫu MVC (Model-View-Controller). Tôi đã được truyền cảm hứng từ một khóa học PHP mà tôi đã dạy vài năm trước, và trong đó tôi đã xây dựng một thương mại điện tử đơn giản với các sinh viên. Thương mại điện tử này dựa trên khung MVC đơn giản dựa trên PHP. Sau đó, những người đã tiếp tục với mã và lập trình đã có một số ít về điều gì có nghĩa là MVC trước khi có được một khuôn khổ thực sự.MVC pattern (Model-View-Controller). I was inspired by a PHP course I taught some years ago, and in which I built a simple e-commerce with the students. This e-commerce was based on a simple MVC framework based on PHP. Then, people who have continued with code and programming already had a smattering of what means MVC before get their hands on a real framework.

Các khung MVC được sử dụng rộng rãi trong ngành vì chúng cung cấp rất nhiều lợi thế cho sự phát triển nhanh chóng và có cấu trúc. Có các khung MVC cho hầu hết các ngôn ngữ lập trình mà bạn có thể biết, từ dotnet đến PHP. Thật không may, những khung đó có thể có một đường cong học tập dốc. Điều này là do thực tế là mọi người cần học cách viết mã trong hệ sinh thái khung.

Lưu ý cá nhân: Năm 2010, tôi đã phát triển phần mềm trong hơn 5 năm và tôi đã tìm kiếm một giải pháp tốt để xây dựng một ứng dụng web cho sếp của tôi. Tóm tắt với một đồng nghiệp cũ của tôi (cảm ơn Davide C.!), Tôi bắt đầu sử dụng Symfony 1.4. Tôi đã sử dụng phương pháp tiếp cận RT RTFM (đọc hướng dẫn sử dụng thân thiện) trước khi viết bất kỳ mã nào. Trong hai tháng, tôi đã nhận ra một ứng dụng phức tạp trung bình (đăng ký, ACL, bảng điều khiển, frontend, v.v.).

Sau đó, tôi đã làm việc trên Zend Framework, Symfony 2.0 và 5 và Laravel (hiện đang làm việc trên 5,8), và cả trên các microframeworks như SILEX (không được duy trì nữa) và lum. Không còn nghi ngờ gì nữa, khuôn khổ yêu thích của tôi là Laravel. Mặc dù có một số thứ kỳ diệu của người Viking có thể khiến mọi người sợ hãi, Laravel cung cấp rất nhiều tính năng vượt trội mà bạn có thể chỉ cần kích hoạt với cài đặt cấu hình phù hợp.

MVC có nghĩa là gì?

MVC là một mẫu thiết kế được sử dụng để tách dữ liệu (mô hình), giao diện người dùng (chế độ xem) và logic ứng dụng (bộ điều khiển). Để có thể theo dõi cách thức này, bạn cần có kiến ​​thức tốt về PHP và OOP (lập trình hướng đối tượng).

Xây dựng khung MVC PHP đơn giản

Độc lập bạn đang sử dụng Docker, XAMPP hoặc bất cứ điều gì cho môi trường phát triển của bạn, hãy để tạo ra một cấu trúc đơn giản cho khung MVC PHP đơn giản. Tôi sử dụng để có một thư mục có tên là Giải pháp cho tất cả các dự án của mình, sau đó nhập thư mục của bạn, tạo một thư mục mới có tên là Simple Simple-Php-MVC và sau đó nhập thư mục đó.
Let’s create the basis folders for your MVC:

  1. ứng dụng
  2. Cấu hình
  3. public
  4. lượt xem
  5. tuyến đường

Bắt đầu nhỏ, hãy để tạo ra hai tệp quan trọng nhất của PHP MVC đơn giản của chúng tôi: index.php và htaccess.

Tệp cấu hình htaccess

Nhập thư mục công khai và cho phép tạo một tệp được gọi là index.php

Bây giờ, ở cấp độ gốc của dự án của bạn, hãy để tạo một tệp mới có tên .htaccessthen mở nó và đặt mã này vào bên trong htaccess:
Then open it, and put this code inside the htaccess:


RewriteEngine On

# Stop processing if already in the /public directory
RewriteRule ^public/ - [L]

# Static resources if they exist
RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
RewriteRule (.+) public/$1 [L]

# Route all other requests
RewriteRule (.*) public/index.php?route=$1 [L,QSA]

HTACCESS là một tệp cấu hình cho máy chủ web Apache và Chỉ thị MOD_REWRITE nói với Apache rằng mọi yêu cầu sẽ kết thúc với index.php nằm trong thư mục có tên công khai. Nó có nghĩa là gì? Điều đó có nghĩa là nếu bạn duyệt https: // simple-php-mvc/page1, https: // simple-php-mvc/page2 hoặc https: // simple-php-mvc/page3, tất cả chúng sẽ kết thúc trong index.php thuộc công khai, đó là điểm nhập của khung MVC PHP của bạn. Đây là một lợi thế lớn vì bây giờ bạn có thể xử lý yêu cầu của mình ở một nơi, hiểu tài nguyên nào được yêu cầu và cung cấp phản hồi phù hợp. với bất cứ ai.entry point of your PHP MVC framework. This is a big advantage because you can now handle your request in one place, understand what resource is requested and provide the right response.
Another thing: using htaccess and drive the traffic under the public folder, the rest of your project’s structure will be hidden to anyone.

Đây là cách mà dự án của bạn trông giống như bây giờ:

Hướng dẫn can you use php in mvc? - bạn có thể sử dụng php trong mvc không?
Cấu trúc thư mục ____

Bootstrap Khung MVC PHP của bạn

Bây giờ bạn cần một cách để bootstrap Ứng dụng của bạn và tải mã bạn cần. Chúng tôi đã nói rằng index.php trong thư mục công khai là điểm nhập, vì lý do đó chúng tôi bao gồm các tệp cần thiết từ đó.

Trước hết, chúng tôi tải tệp cấu hình, đây là nội dung của index.php:

// Load Config
require_once '../config/config.php';

Bây giờ chúng ta có thể tạo một tệp config.php trong thư mục cấu hình.

Bên trong tệp cấu hình, chúng ta có thể lưu trữ các cài đặt của khung, ví dụ, chúng ta có thể lưu trữ tên của ứng dụng, đường dẫn của gốc và tất nhiên, các tham số kết nối cơ sở dữ liệu:

Autoloader

Chúng tôi muốn có thể tải các lớp trong tương lai mà không có bất kỳ đau đớn nào (xem: hàng chục bao gồm hoặc yêu cầu), sau đó chúng tôi sẽ sử dụng tự động tải PSR-4 với Composer.composer là Trình quản lý phụ thuộc cho PHP, nó cho phép bạn khai báo Thư viện dự án của bạn phụ thuộc và nó sẽ quản lý chúng cho bạn. Thực sự hữu ích!
Composer is a dependency manager for PHP, it allows you to declare the libraries your project depends on and it will manage them for you. Really helpful!

Đầu tiên, ở cấp độ gốc, bạn phải tạo một tệp có tên Composer.json và thêm nội dung sau:

{
    "name": "gmaccario/simple-mvc-php-framework",
    "description": "Simple MVC PHP framework: a demonstration of how to create a simple MVC framework in PHP",
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

Sau đó, giả sử rằng bạn đã cài đặt trình soạn thảo trên máy tính hoặc container của mình, thực hiện lệnh sau (ở cấp độ gốc của dự án của bạn):

composer dump-autoload

Nếu bạn kiểm tra thư mục gốc của mình ngay bây giờ, bạn có thể thấy một thư mục mới có tên là nhà cung cấp có chứa tệp autoload.php và thư mục trình soạn thảo.
Open the index.php and simply add the following code at the beginning of the file:

require_once '../vendor/autoload.php';

Từ giờ trở đi, bạn có thể sử dụng ứng dụng như một điểm bắt đầu của không gian tên của mình, như thế này:

use App\Controllers\MyController;

Bây giờ, hãy để tìm hiểu những gì viết tắt của MVC là viết tắt của.



Người mẫu

Một mô hình là một đối tượng đại diện cho dữ liệu của bạn. Mô hình sẽ được mô hình hóa trên cấu trúc bảng cơ sở dữ liệu của bạn và nó sẽ tương tác với các hoạt động cơ sở dữ liệu (tạo, đọc, cập nhật và xóa).
For instance, if you have a Products table like that:

CREATE TABLE IF NOT EXISTS products (
  id int(10) NOT NULL auto_increment,
  title varchar(255) collate utf8_unicode_ci NOT NULL,
  description text collate utf8_unicode_ci,
  price decimal(12,5) NOT NULL,
  sku varchar(255) collate utf8_unicode_ci NOT NULL,
  image varchar(255) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1;

Trước hết, hãy để Lừa tạo một thư mục mới có tên là Mô hình trong thư mục ứng dụng. Sau đó, hãy để tạo ra một tệp mới có tên là sản phẩm trong mô hình. Sản phẩm mô hình của bạn sẽ là:
Your model Product will be:

id;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function getDescription()
    {
        return $this->description;
    }

    public function getPrice()
    {
        return $this->price;
    }

    public function getSku()
    {
        return $this->sku;
    }

    public function getImage()
    {
        return $this->image;
    }

    // SET METHODS
    public function setTitle(string $title)
    {
        $this->title = $title;
    }

    public function setDescription(string $description)
    {
        $this->description = $description;
    }

    public function setPrice(string $price)
    {
        $this->price = $price;
    }

    public function setSku(string $sku)
    {
        $this->sku = $sku;
    }

    public function setImage(string $image)
    {
        $this->image = $image;
    }

    // CRUD OPERATIONS
    public function create(array $data)
    {

    }

    public function read(int $id)
    {

    }

    public function update(int $id, array $data)
    {

    }

    public function delete(int $id)
    {

    }
}

Và đó là nó. Với các phương thức, bạn sẽ tạo các đối tượng bạn cần được lấp đầy với các giá trị thực dựa trên mô hình.

Lượt xem

Chế độ xem có trách nhiệm lấy dữ liệu từ bộ điều khiển và hiển thị các giá trị đó. Đó là nó. Có rất nhiều động cơ mẫu cho PHP, từ cành đến lưỡi. Đối với hướng dẫn MVC này cho PHP, chúng tôi sẽ chỉ sử dụng HTML đơn giản để làm cho mọi thứ trở nên đơn giản.

Để tạo chế độ xem mới, chúng ta phải tạo một tệp mới có tên Product.php trong thư mục chế độ xem. Dựa trên các thuộc tính sản phẩm, chúng ta có thể viết một HTML đơn giản như thế này:
Based on the product attributes, we can write a simple HTML like this:

app
config
public
    index.php
views
routes
.htaccess
0

Chế độ xem hiện đã sẵn sàng để có được đối tượng sản phẩm ($ sản phẩm) và hiển thị các giá trị của nó.

Người điều khiển

Bộ điều khiển là trung tâm của logic ứng dụng. Chịu trách nhiệm chấp nhận đầu vào và chuyển đổi nó thành các lệnh cho mô hình hoặc chế độ xem.let, Tạo một thư mục mới có tên là bộ điều khiển trong thư mục ứng dụng và tạo một tệp bộ điều khiển mới có tên ProductControll.php. Đây là nội dung:
Let’s create a new folder called Controllers under the app folder, and create a new controller file called ProductController.php. Here is the content:

app
config
public
    index.php
views
routes
.htaccess
1

Rất đơn giản, có phải là nó không? Rõ ràng, mọi thứ có thể phức tạp hơn, chúng ta có thể tạo một lớp điều khiển cha mẹ, phương thức xem và các hàm trợ giúp khác. Nhưng nó đủ cho bây giờ.

Hệ thống định tuyến

Bây giờ chúng ta cần một cơ chế để đối phó với các URL. Chúng tôi muốn sử dụng một URL thân thiện; Nói cách khác, chúng tôi muốn xử lý các địa chỉ web dễ đọc và bao gồm các từ mô tả nội dung của trang web. Chúng tôi cần một hệ thống định tuyến sau đó. Chúng tôi có thể tạo hệ thống tuyến đường của riêng mình hoặc vì chúng tôi đã sử dụng trình soạn thảo để tự động tải, chúng tôi có thể đào sâu vào các gói hệ sinh thái Symfony rộng rãi và làm việc thông minh! Thành phần. Đây là tài liệu: https://symfony.com/doc/civerse/create_framework/routing.htmlrouting system then.
We can create our own route system, or since we used composer for the autoload, we can dig into the extensive Symfony ecosystem packages and work smart!
So, let’s see how we can take advantage of the Symfony Routing Component. Here is the documentation: https://symfony.com/doc/current/create_framework/routing.html

Trước hết, cài đặt thành phần:

app
config
public
    index.php
views
routes
.htaccess
2 Cài đặt Symfony/Routing thông qua Trình soạn thảo.
Hướng dẫn can you use php in mvc? - bạn có thể sử dụng php trong mvc không?
Install symfony/routing via composer.

Nếu bạn kiểm tra bên trong thư mục nhà cung cấp ngay bây giờ, bạn có thể thấy rằng một thư mục mới có tên là Symfony đã được tạo.

Sau đó, hãy bắt đầu triển khai hệ thống định tuyến cho khung MVC của chúng tôi. Mục tiêu là hiển thị các giá trị của sản phẩm với ID = 1 khi duyệt URL /Sản phẩm /1let, Tạo một tệp mới có tên Web.php trong thư mục ROUTES. Tệp này sẽ chứa tất cả các tuyến đường của ứng dụng của bạn.
Let’s create a new file called web.php under the routes folder. This file will contain all the routes of your application.

app
config
public
    index.php
views
routes
.htaccess
3

Chúng tôi sử dụng các lớp tuyến đường và tuyến đường từ thành phần định tuyến Symfony để tạo và liệt kê tất cả các tuyến chúng tôi cần. Chúng tôi bắt đầu với một trang sản phẩm duy nhất.

Isn đủ: Chúng tôi cũng phải cài đặt gói này:

app
config
public
    index.php
views
routes
.htaccess
4

Ở đây một số giải thích: https://symfony.com/doc/civerse/components/http_foundation.html

Thành phần HTTPFoundation xác định một lớp hướng đối tượng cho đặc tả HTTP.

Và một lần nữa từ Symfony: Trong PHP, yêu cầu được thể hiện bằng một số biến toàn cầu ($ _GET, $ _POST, $ _FILES, $ _Cookie, $ _Session, Muff) và phản hồi được tạo bởi một số chức năng (echo, header (), setCookie (), Voi).

Thành phần Symfony HTTPFoundation thay thế các biến và chức năng toàn cầu PHP mặc định này bằng một lớp hướng đối tượng.


Ok sau đó, hãy để tạo ra động cơ định tuyến. Thêm một tệp mới có tên là Router.php bên trong thư mục ứng dụng của bạn và đặt mã này bên trong nó:

app
config
public
    index.php
views
routes
.htaccess
5

Mã này rất đơn giản và tự nói lên, nhưng hãy để giải thích nó một chút: Trình kết hợp URL thực hiện URI yêu cầu và sẽ kiểm tra xem có phù hợp với các tuyến được xác định trong các tuyến/web.php không. Nếu có một trận đấu, hàm call_user_func_array sẽ thực hiện phép thuật, gọi phương thức phù hợp của bộ điều khiển bên phải. .
Moreover, we used the function array_walk to cast the numeric values into integer values, because in our class methods we used the explicit type declaration.

Bây giờ chúng ta có thể đưa hệ thống các tuyến trong tệp index.php:

app
config
public
    index.php
views
routes
.htaccess
6

Bây giờ chúng tôi đã chuẩn bị hệ thống định tuyến, chúng tôi có thể duyệt /sản phẩm /1 trang và xem kết quả. Rõ ràng, các giá trị bây giờ trống rỗng. Hãy để thêm một số giá trị giả vào sản phẩm (bên trong ProductControll.php):

app
config
public
    index.php
views
routes
.htaccess
7

Và duyệt một lần nữa trang /sản phẩm /1

Bây giờ bạn có thể thêm kết nối cơ sở dữ liệu của mình và trả về các giá trị từ cơ sở dữ liệu, sử dụng truy vấn thô hoặc một ORM như học thuyết hoặc hùng hồn.

Ghi chú bổ sung cho định tuyến: Các tuyến đường của bạn có thể trùng nhau với nhau, ví dụ, nếu bạn viết /{pagesLug} Trước bất kỳ tuyến nào khác, chẳng hạn như /đăng ký. Bạn có thể dễ dàng khắc phục vấn đề này chỉ bằng cách viết tuyến đường chung /{pagesLug} ở cuối tất cả các tuyến đường. Tuyến đường này sẽ trở thành dự phòng của bạn. Hoặc, một giải pháp khác là thêm tiền tố, chẳng hạn như /static /{pagesLug} hoặc /public /{pagesLug}./{pageSlug} before any other route, such as /register. You can easily overcome this problem simply by writing your general route /{pageSlug} at the end of all the routes. This route will become your fallback. Or, another solution is to add a prefix, such as /static/{pageSlug} or /public/{pageSlug}.

Trang chủ

Hãy để chuẩn bị ngay bây giờ tuyến đường trang chủ. Mở các tuyến/web.php và thêm tuyến đường mới:

app
config
public
    index.php
views
routes
.htaccess
8

Rõ ràng, chúng ta cần tạo bộ điều khiển mới Pagecontroll:

app
config
public
    index.php
views
routes
.htaccess
9

Và quan điểm mới:

// Load Config
require_once '../config/config.php';
0

Vì chúng tôi sử dụng cùng một mã cho tiêu đề và chân trang, chúng tôi có thể tạo một thư mục bố cục và tách mã cho các phần HTML đó.

Để điều hướng trang, hãy mở trình duyệt của bạn và duyệt URL này:

// Load Config
require_once '../config/config.php';
1

URL chính xác phụ thuộc vào cài đặt của bạn. Tôi sử dụng Docker cho môi trường địa phương của mình và tôi thường thiết lập cổng, sau đó URL của tôi có thể hơi khác so với bạn, ví dụ, tôi sử dụng

// Load Config
require_once '../config/config.php';
2

Lưu ý: Nếu bạn đã cài đặt dự án của mình vào một thư mục con như nhiều người dùng dường như sẽ làm, bạn phải thiết lập hằng số url_subfolder trong tệp cấu hình. Ví dụ: nếu bạn đã cài đặt dự án này bên trong một thư mục con có tên Simple-MVC-Php-FrameWork, URL cuối cùng của bạn sẽ là:must set up URL_SUBFOLDER constant in the config file. For example, if you installed this project inside a subfolder called simple-mvc-php-framework, your final URL will be:

// Load Config
require_once '../config/config.php';
3

Cải thiện khung MVC PHP

Kết nối cơ sở dữ liệu và ORM, phiên, cookie, bộ điều khiển trang tốt hơn chấp nhận các tham số trang khác nhau hoặc bất kỳ tính năng nào khác có thể được thêm rất dễ dàng, nhưng bài viết này chỉ muốn hiển thị cách xây dựng một MVC PHP thực sự đơn giản.

Tải xuống mã

Bạn có thể tải xuống tệp zip hoặc sao chép mã của bài viết này thông qua github.https: //github.com/gmaccario/simple-mvc-phph
https://github.com/gmaccario/simple-mvc-php-framework

Sự kết luận

Khi bạn đã tự tin với mô hình MVC, tôi khuyên bạn nên đọc tài liệu của Laravel (khung MVC PHP yêu thích của tôi) hoặc Symfony và bắt đầu bị ướt chân! Bạn có thể nhận thấy rằng sự phát triển trở nên nhanh hơn so với sử dụng giải pháp PHP thuần túy.

Cảm ơn bạn đã dành thời gian, tôi hy vọng bạn có một số thông tin mới về mô hình MVC. Hãy thoải mái nâng dự án trên GitHub và nếu bạn có bất kỳ vấn đề nào, hãy kiểm tra tab các vấn đề hoặc mở một vấn đề mới (nếu đó là một cái mới thực sự!).

Dù sao, bạn cũng có thể gửi cho tôi một tin nhắn nhưng tôi thích trả lời trên GitHub để chia sẻ kiến ​​thức với người khác. Tôi quyết định đóng các bình luận trên trang này do số lượng lớn thư rác và số lượng lớn các câu hỏi trùng lặp. Tôi hy vọng bạn có thể hiểu!

Lưu ý: Dự án này là một bộ khởi động đơn giản và nó hoạt động tốt nếu môi trường của bạn được cấu hình chính xác. Tôi không sử dụng XAMPP, hoặc một gói ngăn xếp được cấu hình sẵn khác. Trước đây tôi đã sử dụng để tạo đèn của mình cài đặt phần mềm riêng lẻ, bây giờ tôi đang sử dụng Docker. Sau đó, nếu bạn có một số vấn đề với môi trường của bạn, nó sẽ tiếp tục giải quyết vấn đề của bạn.

Và một lần nữa: Đây là một bộ khởi động đơn giản với mục tiêu giúp mọi người hiểu một số khái niệm đằng sau MVC. Nếu bạn muốn tạo một dự án chuyên nghiệp, hãy tìm Laravel hoặc Symfony.

Tại sao MVC được sử dụng trong PHP?

MVC-Mô hình kiến ​​trúc mô hình-view-Controller giúp bạn kiểm tra mã của mình để bảo trì dễ dàng hơn. Bằng cách giữ cho logic điều khiển dữ liệu tách biệt với các bit xử lý màn hình, bạn giúp thay đổi mẫu hoặc mã cơ bản dễ dàng hơn nhiều mà không cần chạm vào cái kia.helps you tier your code for easier maintenance. By keeping the data-manipulating logic separate from the bits that handle the display, you make it much easier to change either the template or the underlying code without touching the other.

Ngôn ngữ lập trình nào được sử dụng cho MVC?

Mẫu MVC được sử dụng rộng rãi trong phát triển chương trình với các ngôn ngữ lập trình như Java, Smalltalk, C và C ++.Java, Smalltalk, C, and C++.

MVC là gì và nó hoạt động như thế nào trong PHP?

MVC là một cách tiếp cận phần mềm phân tách logic ứng dụng với trình bày.Trong thực tế, nó cho phép các trang web của bạn chứa kịch bản tối thiểu vì bản trình bày tách biệt với tập lệnh PHP.Mô hình đại diện cho các cấu trúc dữ liệu của bạn.a software approach that separates application logic from presentation. In practice, it permits your web pages to contain minimal scripting since the presentation is separate from the PHP scripting. The Model represents your data structures.

MVC có tốt cho phát triển web không?

Các dự án được phát triển với sự trợ giúp của mô hình MVC có thể dễ dàng phát triển với chi tiêu ít hơn và trong thời gian ngắn hơn.Trên hết, sức mạnh của nó để quản lý nhiều chế độ xem làm cho MVC trở thành mẫu kiến trúc tốt nhất để phát triển các ứng dụng web.its power to manage multiple views makes MVC the best architecture pattern for developing web applications.