2013-07-17 3 views
1

В идеальном мире не следует полагаться на синглтоны, модель в контроллере и модель внутри представления - это два разных экземпляра. Проблема возникает, когда контроллер устанавливает состояние, и представление представления зависит от этого состояния. Например:PHP: должна ли модель MVC быть реализована как singleton?

class MyController extends Controller { 

    public function __construct(ModelUsers $cModel) 
    { 
     $this->model = $cModel; 
    } 

    public function action_Search($username) { 
     $this->model->filterByUsername($username); 
    } 
    } 

    class MyView extends View { 

    public function __construct(ModelUsers $vModel) 
    { 
     $this->model = $vModel; 
    } 

    public function users() { 
     return $this->model->getUsers(); 
    } 
    } 

Как обмениваться данными между моделью контроллера и моделью просмотра?

+0

Зачем нужен синглтон? – Virus721

+0

Это не «модель». Модель - это слой и слои не могут быть Singletons. Аналогично, не существует модели контроллера или модели представления. Дополнительную информацию см. На странице http://stackoverflow.com/questions/3499336/in-mvc-where-do-you-draw-the-line-between-a-controller-and-model/3501048#3501048. – Gordon

+2

@ Virus721, потому что http://stackoverflow.com/questions/4595964/who-needs-singletons/4596323#4596323 – Gordon

ответ

0

Вы можете использовать Реестр или Зависимость впрыска.

Также в некоторых случаях вы можете передать некоторые данные вашему классу вида в виде массива. Как это:

class MyView extends View { 
    private $data = array(); 

    public function __construct($data) 
    { 
     $this->data = $data; 
    } 

    public function users() { 
     return $this->data['model']->getUsers(); 
    } 
    } 

Конечно, вы должны пройти модель, когда вы caling в View класс от контроллера (или там, где вы делаете вызов).

2

Начиная с основ

вид запросов от модели информации, необходимым для генерации выходного представления пользователя.

Это значит, что мнение должно отвечать только за то, что вы указали информацию. Просто для этого. Вы также можете делать некоторые вещи, такие как обрезка, изменение размера текста и т. Д., Но вы не должны делать некоторые подсчеты там или более сложные операции.

модель уведомляет связанные с ним виды и контроллеры, когда произошли изменения в своем состоянии. Это уведомление позволяет представлениям создавать обновленный вывод, а контроллеры - изменять доступный набор команд.

Модель должна нести ответственность за выполнение операций с данными. Вы можете использовать его, например, для получения записей из базы данных. Он просто отвечает за обработку данных.

контроллер может посылать команды на связанном с ним зрение, чтобы изменить представление вида по модели (например, путем прокрутки документа). Он также может отправлять команды модели для обновления состояния модели (например, редактирования документа).

Контроллер является прокси-моделью между моделью и видом. Вы получаете там параметры, и в соответствии с этими параметрами вы устанавливаете правильное действие вашего контроллера. Это действие должно создать правильный объект модели и использовать его для получения данных, которые затем присваиваются представлению.

Я никогда не использовал синглтон в моделях. Если вам нужны некоторые классы, которые помогли бы структуре MVC, вы можете использовать хелперы и, как предложил Хаст Реестр. Я не поклонник использования синглтона.

Вы также можете посмотреть на When to use singleton

Так что ваш вопрос.

  • Controler -> модель = Передача данных с помощью аргументов методов модели
  • Модели -> контроллер = Если ссылка, то просто работать на нем, если аргумент, то сделать что-то и возвращать результат
  • Controler -> Вид = назначить надлежащие данные для просмотра.
  • View-> controller = перейти на специальный url для создания данных или использовать запрос ajax для его получения.
Смежные вопросы