У меня есть некоторые проблемы с пониманием 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, который обрабатывает что угодно, от того, чем является пользователь seing (пользовательский интерфейс).
На мой взгляд, MVC — не полностью рабочая концепция / архитектура. То есть он отлично определяет ключевые обязанности, но не определяет, как заставить все работать. Например, как вы будете определять свою модель? Вы можете пойти с Активная запись (как ваш код представляет) или вы можете отказаться от DAO (объект доступа к данным). В нескольких словах различия будут такими:
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.
}
}
Я обычно предпочитаю создавать один контроллер для каждой модели, и этот контроллер будет знать, как обращаться с этой моделью (независимо от того, какая шаблон дизайна модель использует). При этом я избегаю использования более 1 модели в одном контроллере. Если вам нужен доступ к данным из модели, которая вам не принадлежит, поговорите с его контроллером, а не обходите его и переходите непосредственно к модели. Вот что я имею в виду:
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.
}
}
Других решений пока нет …