У меня есть некоторые проблемы с пониманием mvc в php.
Структура моей папки выглядит так:
controller
|- member.php
model
|- member.php
view
|- overview.php
Мой код выглядит так:
контроллер> member.php
include '../model/member.php';
class Member{
public function create_table_of_all_members(){
$model = new Member();
$members = $model->get_all_members();
foreach ($members as $member) {
echo $member;
}
}
public function create_form(){
}
}
модель> member.php
class Member{
public function __construct()
{
// DB-Connection initialization
}
function getAllMembers(){
$sql = "";
return $result;
}
}
view> overview.php
include '../controller/member.php';
$controller = new Member();
$controller->create_table_of_all_members();
Я на правильном пути? В папке просмотра я бы поставил, например, обзор (все страницы со столом), форму (все страницы с формой)..
Трудно определить, что правильно или неправильно в концептуальных дискуссиях, таких как этот. Все, что я могу вам предоставить, это мой собственный ограниченный опыт и мнение. Поглотите это своим собственным мнением и решите, что лучше для вас по вашему мнению. Создайте свою первую архитектуру, реализуйте свой первый проект, а затем ваш собственный проект начнет рассказывать вам, работает ли ваша архитектура для вас или нет. Вот несколько личных советов.
То есть, если вы переходите к модели MVC, попробуйте сохранить соединение между сервером и ответом на один слой, который, кажется, идеально подходит для слоя VIEW, который обрабатывает все, что угодно и от того, что пользователь (пользовательский интерфейс).
На мой взгляд, MVC не является полностью работающей концепцией/архитектурой. То есть он отлично определяет ключевые ответы, но не определяет, как заставить все работать. Например, как вы определяете свою модель? Вы можете использовать Active Record (например, ваш код), или вы можете отказаться от DAO (Data Access Object). В нескольких словах различия будут такими:
class ActiveRecordModel {
protected function connect();
protected function create();
protected function update();
protected function delete();
}
class Car extends ActiveRecordModel {
public $id;
public $maker;
public $model;
public $year;
}
Таким образом, вы можете использовать $myCar->create();
и модель будет создана внутри базы данных. В отличие от DAO
class Car {
private $id;
private $maker;
private $model;
private $year;
// Getters, Setters, Constructor
}
class CarDAO {
public function add(Car $obj){
// Establish connection here or at the constructor
// Take data from $obj and arrange it to be stored.
}
}
Обычно я предпочитаю делать один контроллер для каждой модели, и этот контроллер будет знать, как обращаться с этой моделью (независимо от того, какой шаблон дизайна использует модель). При этом я избегаю использовать более одного модели внутри одного контроллера. Если вам нужно получить доступ к данным из модели, которая не принадлежит вам, поговорите с ней, а не в обход контроллера и перейдя непосредственно к модели. Вот что я имею в виду:
class AccountController extends GenericController {
public function add($name, $phone, $birthday, $email, $password) {
$accountModel = new Account();
$accountModel->name = $name;
$accountModel->phone = $phone;
$accountModel->birthday = $birthday;
$accountModel->password = $password;
$id = $accountModel->insert();
$emailController = new EmailController();
$emailController->add($email, $id);
// Here, instead of declaring a model for "Email",
// I'm declaring the controller
// so, in my architecture, whenever I need to change some rule
// for some entity, I know I only have to work at one single controller.
}
}
account
который будет иметь каталогcontrollers
,model
иview
содержащий все эти элементы для модуляaccount
.