Intereting Posts
Можно ли проверить, имеет ли pdostatement :: fetch () результаты без итерации по строке? Как получить последнюю запись в таблице базы данных MySQL с помощью PHP? Как определить локальные функции в PHP? Хранить и отображать результат MySQL в / из массива PHP Чтобы лучше понять переписку сеанса с двумя сеансовыми инициативами MySQL, PHP, JavaScript UTF-8 Проблема с шведскими буквами (все протестировано – ничего не работает) Увеличение элементов массива во время цикла foreach в php? Множественный узел клиента Php Как добавить новые поля в профиль пользователя в Drupal 7 программно Force Загрузить MP3 с помощью PHP Использование мутатора accessor с отношением to принадлежит Lumen FatalErrorException в строке RedirectResponse.php 75: вызов функции-члена flashInput () на null Невозможно автоматически загрузить / загрузить базу данных базы данных в codeigniter Получите JSON из общедоступного Календаря Google Можно ли исключить цикл for из этого фрагмента кода PHP?

Какова цель контроллера в шаблоне MVC с использованием PHP?

Я просто направляюсь к шаблону проектирования MVC. Простой пример здесь не позволяет понять мою концепцию использования контроллера. Не могли бы вы объяснить реальное использование контроллера, сохраняя его простым.

Модель:

class Model { public $text; public function __construct() { $this->text = 'Hello world!'; } } 

контроллер:

  class Controller { private $model; public function __construct(Model $model) { $this->model = $model; } } 

Посмотреть:

  class View { private $model; //private $controller; public function __construct(/*Controller $controller,*/ Model $model) { //$this->controller = $controller; $this->model = $model; } public function output() { return '<h1>' . $this->model->text .'</h1>'; } } 

индекс:

  require_once('Model.php'); require_once('Controller.php'); require_once('View.php'); //initiate the triad $model = new Model(); //It is important that the controller and the view share the model //$controller = new Controller($model); $view = new View(/*$controller,*/ $model); echo $view->output(); 

Назначение контроллеров в шаблоне MVC заключается в изменении состояния слоя модели.

Это делается контроллером, принимающим пользовательский ввод (предпочтительнее – абстрагируется как нечто вроде экземпляра Request ), а затем, основываясь на параметрах, извлеченных из пользовательского ввода, передает значения соответствующим частям слоя модели.

Связь с модельным уровнем обычно происходит через различные службы . Эти службы, в свою очередь, отвечают за управление взаимодействием между абстракцией персистентности и предметами домена / бизнеса или также называемой «логикой приложения».

Пример:

 class Account extends \Components\Controller { private $recognition; public function __construct(\Model\Services\Recognition $recognition) { $this->recognition = $recognition; } public function postLogin($request) { $this->recognition->authenticate( $request->getParameter('credentials'), $request->getParameter('method') ); } // other methods } 

Что за контроллер не несет ответственности?

Контроллеры в архитектурном шаблоне MVC НЕ отвечают за:

  • инициализация частей модельного слоя
  • извлечение данных из модельного слоя
  • проверка ввода
  • инициализация просмотров
  • выбор шаблонов
  • создание ответа
  • контроль доступа
  • .. и т.д.

Контроллер в PHP (или, фактически, на любом языке сервера, будет тот, который обрабатывает URL-адрес, который вызывается). Поэтому мне придется переписать ваш код выше,

Основной файл; это на самом деле будет вашим основным контроллером или маршрутизатором, это первый файл, который вызывается и обычно будет называться index.php (в этом файле просто создается экземпляр контроллера, нет необходимости создавать модель и представление, поскольку они будут в в отношении модели и вида использования)

 require_once('Controller.php'); //check the user url and decide which controller to instantiate. This is usually done by a separate file called controller factory. But for simplicity we use take this decision here itself. $controller = new Controller() //call controllers default method and let it decide which internal function to call $controller->index() 

Файл контроллера => Здесь создается экземпляр модели и просмотра. Преимуществом является то, что модель и представление могут быть изменены, если это необходимо в самом контроллере

 require_once "Model.php" require_once "View.php" class Controller { private $model; private $view; public function _contruct() { // i may and may not initialize my mocel or view here, better initialize it in the function where you are going to use them. } public function index() { // for now assume this controller just does one function that is to display the hello world. Otherwise we will read the called url and decide which further function to call $model = new Model(); $view = new View($model); // pass the model to view $view->output() // don't ideally echo here, let view itself echo the content. This is helpfull cases where you may have a view which echos the content or may want to format it in certain way (eg JSON and return it to the caller } 

Это в значительной степени. Я не вижу никаких изменений кода в вашей модели или файлах просмотра. Theu shoudl работает так, как если бы вы не повторили его, а не возвращали его.