контроллер представления модели — PHP MVC — это правильная структура?

У меня есть некоторые проблемы с пониманием 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();

Я на правильном пути? В папке просмотра я бы поместил, например, обзор (все страницы с таблицей), форму (все страницы с формой).

0

Решение

Трудно определить, что правильно или неправильно в концептуальных дискуссиях, подобных этой. Все, что я могу вам дать, это мой собственный ограниченный опыт и мнение. Поглотите это своим собственным мнением и решите, что лучше для вас, по вашему мнению. Создайте свою первую архитектуру, реализуйте свой первый проект, и тогда ваш собственный проект начнет сообщать вам, работает ли ваша архитектура для вас или нет. Вот несколько личных советов.


  • я никогда выводить в браузер что угодно из любого слоя, кроме VIEW.

То есть, если вы переходите к модели 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.
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]