01/10/2018, 14:56

Cần giúp nhận xét demo nhỏ theo mô hình mvc

Sau khi tìm hiểu về mvc. tổng kết từ nhiều trang và làm 1 demo nhỏ. Mọi người nhận xét giúp em em tổ chức code như thế này có ổn chưa và nó có đúng theo mô hình mvc chưa ạ. Em cám ơn
file index :

<?php  
	error_reporting(E_ALL);
	ini_set("display_errors",1);
	require_once "library/database.php";

	include_once "widgets/header.php";
?>
<?php  
	$controller = $_GET["c"] ?? "page";
	$action = $_GET["a"] ?? "home";

	include_once "routes.php";
?>
<?php include_once "widgets/footer.php"; ?>

file routes

<?php  
	$controllers = array(
		"user" => ["show", "find"],
		"page" => ["home", "error"]
	);

	if(array_key_exists($controller, $controllers)){
		if(in_array($action, $controllers[$controller])){
			call($controller, $action);
		}
		else {
			call("page", "error");
		}
	}
	else {
		call("page", "error");
	}
	function call($controller, $action){
		include_once "controller/" . ucfirst($controller) . "_Controller.php";

		switch ($controller) {
			case 'page':
				$controller = new Page_Controller();
				break;
			case 'user':
				include_once "model/User.php";
				$controller = new User_Controller();
				break;
		}

		$controller->{ $action }();
	}
?>

file controller

<?php  
	class User_Controller {

		public function show(){
			$listUser = User::showAll();
			include_once "view/user/show.php";
		}
		public function find(){
			if(!isset($_GET["id"]))
				call("page", "error");
			$user = User::findUser($_GET["id"]);
			include_once "view/user/find.php";
		}
	}
?>

file model

<?php  
	class User{
		public $id;
		public $username;
		public $password;
		public $email;

		public function __construct($id, $username, $password, $email){
			$this->id = $id;
			$this->username = $username;
			$this->password = $password;
			$this->email = $email;
		}

		public static function showAll(){
			$sql = "SELECT * FROM User";
			$conn = Database::getConn();
			$result = mysqli_query($conn, $sql);
			$list = array();
			while ($row = mysqli_fetch_assoc($result)) {
				$user = new User($row["id"], $row["username"], $row["password"], $row["email"]);
				array_push($list, $user);
			}
			return $list;
		}

		public static function findUser($id){
			$id = (int)$id;
			$sql = "SELECT * FROM User WHERE id=?";
			$conn = Database::getConn();
			$stmt = mysqli_prepare($conn, $sql);
			if($stmt){
				mysqli_stmt_bind_param($stmt, "i", $id);
				mysqli_stmt_execute($stmt);
				$result = mysqli_stmt_get_result($stmt);
				return mysqli_fetch_assoc($result);
			}
			else {
				return false;
			}
			
		}
	}
?>

file find.php trong view

<h1 style="color: green">FIND USER</h1>
<h3><?php echo $user["id"]; ?></h3>
<h3><?php echo $user["username"]; ?></h3>
<h3><?php echo $user["password"]; ?></h3>
<h3><?php echo $user["email"]; ?></h3>
Dark.Hades viết 16:59 ngày 01/10/2018

function call($controller, $action){
include_once “controller/” . ucfirst($controller) . “_Controller.php”;

	switch ($controller) {
		case 'page':
			$controller = new Page_Controller();
			break;
		case 'user':
			include_once "model/User.php";
			$controller = new User_Controller();
			break;
	}

	$controller-&gt;{ $action }();
}

Mình chỉ nhận xét phần này:
Nó quá dài dòng, và mỗi khi thêm controller, hàm này sẽ ngày càng phình to.
Trong PHP không cần phải phí công như vậy.
https://wandbox.org/permlink/KF0mz8wya7NNyT02

Hung viết 17:08 ngày 01/10/2018

Model bạn nên viết thêm query builder, các declarative property cho attribute mapping và relationship

Khó nhất khi viết PHP framework là Model. Viết sao sử dụng 1 Model, query chung, ẩn đi vendor database bên dưới

Đinh Quang Minh viết 17:09 ngày 01/10/2018

Vâng em cảm ơn ạ @hungsteve @Dark.Hades

Bài liên quan
0