今天我們要聊的是php的mvc架構圖,這個架構在web開發中非常常見,我們經常能看到application、model、view、controller等文件夾或名稱,這些都是mvc架構的重要組成部分,下面讓我們詳細探討一下。
應用程序(Application)
<?php
class Application
{
public function __construct()
{
$this->setReporting();
$this->unregisterGlobals();
}
private function setReporting()
{
if (DEVELOPMENT_ENVIRONMENT == true) {
error_reporting(E_ALL);
ini_set('display_errors','On');
} else {
error_reporting(E_ALL);
ini_set('display_errors','Off');
ini_set('log_errors', 'On');
ini_set('error_log', ROOT . DS . 'tmp' . DS . 'logs' . DS . 'error.log');
}
}
private function unregisterGlobals()
{
if (ini_get('register_globals')) {
$globalsArray = ['_SESSION', '_POST', '_GET', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES'];
foreach ($globalsArray as $g) {
foreach ($GLOBALS[$g] as $k =>$v) {
if ($GLOBALS[$k] === $v) {
unset($GLOBALS[$k]);
}
}
}
}
}
public function run()
{
if(session_id() == '') {
session_start();
}
Router::route(new Request);
}
}
一個php應用程序通常有一個application入口類(application類),它是整個應用的入口點。在這個類中,我們要做一些初始化工作,比如關閉register_globals,設置錯誤報告級別,開啟或關閉調試模式。還需要開啟session,以便從html頁面中存取變量。最后,我們還需要將請求路由到控制器。
模塊(Model)
<?php
namespace Models;
use Core\Model;
class User extends Model
{
protected $table = 'users';
public function getUsers()
{
return $this->selectAll();
}
}
一個模型是用來處理數據邏輯的部分,它常常是一個類,它會展示數據并響應controller的指令,例如從一個數據庫中選出數據。
視圖(View)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php foreach ($articles as $article) : ?>
<div class="article">
<h2><a href="<?php echo ROOT_URL . '/article/view?id=' . $article['id']; ?>"><?php echo $article['title']; ?></a></h2>
<p.class="date"><?php echo date('F j, Y', strtotime($article['created_at'])); ?></p>
<p.class="description"><?php echo $article['description']; ?></p>
</div>
<?php endforeach; ?>
</body>
</html>
視圖層(View)處理你的應用程序的展現邏輯。在mvc架構中,視圖是由html代碼片段在PHP文件中組成的,他們接受控制器(controller)的數據渲染出頁面。你可以將視圖看作為控制器的底層操作。
控制器(Controller)
<?php
namespace Controllers;
use Core\Controller;
use Helpers\Session;
use Helpers\Url;
use Models\User;
class Users extends Controller
{
public function index()
{
$UsersModel = new User();
$data['users'] = $UsersModel->getUsers();
$this->view->render('users/index', $data);
}
}
控制器(Controller)處理請求的輸入,處理相應的model(操縱的數據資源)并響應相應的view(渲染結果)。在mvc中這個部分是應用程序的代碼邏輯。
然后我們需要將各個組件結合起來,運用mvc架構的特性。
<?php
use Core\Router;
require_once realpath(__DIR__.'/..').'/app/bootstrap.php';
Router::route(new Request);
最終,需要將route(路由)封裝到復雜的多個方法中,將activerecord和幾個其他小巧的組件相結合,封裝到一些更大的組件中,最終就能實現架構的分層和邏輯分離。
這就是php mvc架構圖,一個實現結構合理分層的框架。無論是大規模的商業應用還是小型的個人博客,它都能大放異彩,優化代碼結構,使網站更具功能和可維護性,縮短開發周期,是web開發領域的一塊重要的價值塊。相信這個思想的應用會讓你的代碼結構更加合理,提升自己的開發效率,歡迎嘗試。