Hỏi về việc lựa chọn PHP framework, yếu tố và tiêu chí nào để chọn framework cho mình

Em vừa học xong cơ bản PHP Nhưng mà giờ phân vân chưa biết chọn thế nào cho mình một framework cho phù hợp cả!
Vậy em xin hỏi những người đi trước thì nhắm mắt chọn bừa hay là dựa vào đâu để lựa chọn cho mình một framework ạ?

1 Like

em theo anh @laptrinhio để tầm sư nè.

2 Likes

Thứ nhất bạn phải nắm thật vững kiến thức PHP căn bản, sau đó hay học lập trình hướng đối tượng. XOng 2 cái đó rồi hãy nghĩ đến FW. Mỗi FW PHP đều có những đặc điểm với ưu điểm khác nhau, tùy thuộc vào mình.

2 Likes

Bạn lẹn xem tin tuyển dụng để biết bây giờ VN mình chuộng gì nhất. Mà nếu thích tốc đô thì Phalcon.

Cho mình hỏi cần cần tìm hiểu mô hình MVC trước khi qua học FW không? Mình thì đang học MVC trước khi học qua FW nhưng nó hơi khó và không có người kiểm tra đúng sai trong mô hình này.

Nên chuẩn bị trước MVC, OOP trước khi tiếp xúc framework. Nhưng chỉ nghiên cứu cơ bản, làm thử vài cái nhỏ nhỏ thôi, vì không phải ai cũng là “thần đồng” để có thể hiểu nhanh được. Xong cơ bản rồi bay vào FW, nó thực tế hơn.
Nếu được thử sử dụng codeigniter trước, vì CI đơn giản, dễ học, không hỗ trợ bạn quá nhiều thứ nên sẽ học được nhiều hơn.

3 Likes

anh @mrphu3074 nói chuẩn rồi đó bạn :smiley:

Mình đang làm một bài tập theo mô hình MVC mà không biết nó đã đúng với mô hình đó chưa. Nếu không phiền thì mình đưa code cho bạn kiểm tra giúp mình với được không. :blush:

1 Like

cứ post đủ code của 3 lớp đi bạn, mọi người cùng giúp.

1 Like

Cứ tự nhiên như ở nhà nha bạn :smile:

1 Like
http://www.mediafire.com/download/qfumid5u061x3m2/MVC.rar

Code và CSDL mình gom hết vào file trên.

  • Thứ nhất, đừng bao giờ để ?> ở cuối file PHP.
  • File bootstrap.php hãy là file include thư viện, trình điều kiển trung tâm và cũng là file autoload.
  • Index chỉ gọi Bootstrap và run.
  • Controller và View là 2 chức năng khắc nhau mà bạn viết class Controller nhưng bên trong lại là View thì ko đúng.
  • Nên có một class là Model Driver chứ ko nên sử dụng MySQL thuần vậy thì không hay.

Bạn thử tham khảo code này nhé, đơn giản nè: https://github.com/simple-mvc-framework/framework

2 Likes

Cảm ơn bạn đã góp ý :smiley:
Mình sợ loãng topic của người ta nên mình để lại fb. Bạn inbox qua mình hoặc add fr mình. Mình sẽ coi lại code bạn đưa và nghiên cứu lại rồi mình nhờ bạn kiểm tra giúp. :smiley:
p.s. Fb tên hơi bựa :))

https://www.facebook.com/dinhcongmanhit
1 Like

Sao ko dùng ?> ở cuối file vậy @kayz

1 Like

Mình nhận xét 1 chút về app của bạn nhé, chỉ phần MVC thôi, không nói về syntax,…

  1. Về cấu trúc thư mục
.
├── application
│   ├── controllers
│   │   ├── chucnang.php
│   │   ├── home.php
│   │   └── xemsuaxoa.php
│   ├── models
│   │   ├── chucnang_model.php
│   │   ├── database.php
│   │   ├── model.php
│   │   └── xemsuaxoa_model.php
│   └── views
│       ├── backend
│       │   ├── quanlybaiviet.php
│       │   ├── thembaiviet.php
│       │   └── xem.php
│       └── frontend
│           ├── gioithieu.php
│           ├── hello.php
│           ├── index.php
│           ├── login.php
│           ├── logout.php
│           ├── menu.php
│           └── signup.php

=> Bạn chỉ mới tạo đúng về 3 folders chính thôi: controllers, models, views. Còn phần nôi dung thì hơi giống lúc đi học rồi, nghĩa là bạn lại viết theo hướng function, chưa đúng là OOP và chưa tổ chức đúng theo MVC.

MVC là gì ?
Mô hình MVC (Model - View - Controller) là một kiến trúc phần mềm hay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm. Nó giúp cho các developer tách ứng dụng của họ ra 3 thành phần khác nhau Model, View và Controller. Mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác.

###1. Model
Mỗi model liên quan trực tiếp với 1 thực thể (entity) trong hệ thống, và liên quan trực tiếp đến 1 table trong database, vì vậy nó đóng vai trò tương tác với db và xử lý logic liên quan đến thực thể đó.
Nhưng bạn đang dùng sai chức năng của Model
vd:

	require_once('model.php');
	class Edit extends Model
	{
		public function get_post_by_id($id)
		{
			$sql = "SELECT * FROM post WHERE post_id = $id";
			return $this->db->query($sql);
		}
	}

lớp Edit thực sự chả liên quan gì đến db hay đến 1 đối tượng cụ thể trong hệ thống cả.

	require_once('model.php');
	class Post extends Model
	{
		public function insert($data)
		{
			$sql = "INSERT INTO post(category_id,user_id,post_title,post_content,img_name) VALUE ('".$data['category_id']."',
				'".$data['user_id']."','".$data['post_title']."','".$data['post_content']."','".$data['img_name']."')";
			$query = $this->db->query($sql);
			return $query;
		}
		public function get_post_for_user($id)
		{
			$sql = "SELECT * FROM post WHERE user_id = $id";
			return $this->db->query($sql);
		}
	}

Model Post có ý nghĩa hơn, nhưng methods cũng như tên file chucnang_model không ổn.

###2. Controller
controller ChucNang, XemXoaSua không đúng vì Model là nơi xử lý logic, tương tác db cho đối tượng cụ thể, còn Controller là nơi điều hướng trung tâm cho 1 cụm chức năng cụ thể.
Mình thấy controller cũng khá ổn rồi, chỉ việc gom các actions trong controller thành các cụm chức năng thì tốt hơn.

###3. View
View tương đối ổn, vì cũng không có khó khăn gì ở phần này


##OOP
Thực ra phần này thực sự mình không nắm hết nên chỉ nhận xét ở mức cơ bản thôi:
####1)

class Model
	{
		public function __construct()
		{
			$this->db = new database();
		}
        ...

	class Edit extends Model
	{...

	class Post extends Model
	{...

Trong construct của lớp Model sẽ tạo ra 1 đối tượng database - tức là mở 1 db connection, vậy lớp Edit, Post cũng sẽ thừa kế việc tạo đối tượng db
=> Mới chỉ có 2 models là đủ để tạo ra > 1 đối tượng db trong hệ thống. Trong khi chúng ta chỉ cần 1.
VD:

$post1 = new Post() // tạo 1 object db
$post2 = new Post() // tạo 1 object db

Bạn tìm hiểu Singleton để giải quyết nhé.

####2)

require_once('model.php');
class Post extends Model {}

require_once('model.php');
class Edit extends Model {}

...

Có sự lặp lại phần require_once, nên chuyển vào bootstrap hoặc làm phần autoload

####3)

	session_start();
	require_once('application/models/chucnang_model.php');
	require_once('libs/upload_img.php');
	class ChucNang extends Controller
	{
		private $post;
		private $upload;
		public function __construct()
		{
			$this->post = new Post();
			$this->upload = new Upload_Img();
		}

Mình thấy cách bạn dùng model trong controller có phần chưa hợp lý, về phần require_once thì mình đã nói ở trên(nên đặt đâu đó để tránh lặp lại or tốt nhất dùng autoload). Controller ChucNang nên di chuyển phần tạo đối tượng Post và Upload_Img vào nơi nào cần dùng tới. VD: upload chỉ dùng trong thêm bài viết vậy khi vào quản lý bài viết thì sẽ dư thừa.

Mình chỉ đánh giá nhiêu đó thôi, mình thấy bạn làm vậy là hơn rất nhiều người và hơn mình nhiều lúc mới ra trường rồi. Nếu bạn cải thiện nó dần dần, thì sẽ rất chắc phần MVC hay OOP.

3 Likes

Khi để vậy rất dễ dính lỗi, đặt biệt là DOM, có khi bị 1 kí tự lạ :smiley:, bạn thử mở các fw nổi tiếng xem, ko có file nào có ?> cả

2 Likes

Mình cảm ơn 2 bạn kayz và mrphu3074 đã có những góp ý giúp mình cải thiện kiến thức. Mình sẽ nghiên cứu lại MVC, OOP kỹ hơn sẽ có làm bài tập nữa về mô hình này nói chung là mình luyện cho kỹ . Mình có để lại fb các bạn kết bạn với mình. Khi nào mình làm bài tập xong mình nhờ các bạn góp ý và sửa sai giúp mình với.

https://www.facebook.com/dinhcongmanhit

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?