новый контроллер в PHP - PullRequest
       33

новый контроллер в PHP

1 голос
/ 29 апреля 2010

У меня есть практическое сомнение,

Я использую OO php, и я новичок в этом.Я использую Zend Framework, чтобы быть понятным.

Я пишу контроллеры (класс) и действия (методы), в которых говорится, что PatientMapper.php, который имеет все связанные с таблицей mysql действия и Patient.php, который имеет все установщики функции получения.

Я сомневаюсь, что когда я должен написать новый контроллер.

  1. Должен ли я написать контроллер для всех действий в одной таблице MySQL.

  2. или один контроллер для всех действий, связанных с модулем.

Ответы [ 5 ]

3 голосов
/ 29 апреля 2010

В отличие от предыдущих ответов, я бы сказал, что ваш контроллер не должен быть связан с вашей БД.

Контроллеры не поддерживают бизнес-логику, а ваши модели -

.

Кроме того, вы можете написать контроллер для каждой сущности.

Пользователь - это объект, который может быть заключен в контроллер, даже если он зависит от нескольких таблиц. Если ваш контроллер становится все больше и больше, вы можете переключиться на модуль (терминология Zend Framework) и создать пользовательский модуль с контроллером учетных записей и т. Д. *

1 голос
/ 29 апреля 2010

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

Важно то, что контроллер не должен содержать логику классов моделей. Единственная ответственность контроллера заключается в получении и делегировании входных данных для конкретного взаимодействия, которое вы разрешаете пользователям выполнять с вашим приложением для модели. А в MVC на веб-сайте обычно также требуется обновить представление в соответствии с результатом операции.

Самое важное различие, которое нужно понять в MVC, состоит в том, что M должен жить самостоятельно, а V и C принадлежат друг другу. V и C образуют только пользовательский интерфейс для вашего приложения, и они не должны ничего делать кроме этого. По сути, ваш М - это ваше приложение, а ваш виртуальный венец - просто верх. Должно быть M | VC imho

С учетом вышесказанного, если вы чувствуете, что ваше приложение может обойтись без одного контроллера, тогда используйте один контроллер приложения. Но как только вы обнаружите, что добавляете действия, которые концептуально могут вписаться в отдельный контроллер, добавьте новый контроллер. Если ваше приложение является простым приложением CRUD, то для каждой таблицы базы данных используйте один контроллер. Если он делает что-то еще, то дайте ему то, что соответствует сценарию.

1 голос
/ 29 апреля 2010

Я думаю, вы должны написать контроллер для одной таблицы mysql, потому что если ваше приложение будет расти, вы можете закончить несколькими тысячами линейных контроллеров.

0 голосов
/ 29 апреля 2010

@ gordon - Да, мое приложение является приложением CRUD. Так что мне нужно создать модель для каждой таблицы .. Это наиболее приемлемый способ обряда. И да, я немного ясен в отношении контроллеров ..

У меня есть страница, где мне нужны данные из 3 таблиц. Поэтому мне нужно вызвать все 3 метода модели, чтобы получить обряд данных ...

У меня есть небольшое сомнение ... Я использую код, подобный этому, в начале начала класса. И это было написано другим разработчиком .... Я использую его .. Мне трудно использовать объединения , BOS это блокировка базы данных .. любая помощь о том, как использовать соединения здесь

 protected $_dbTable;

    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Appointment');
        }
        return $this->_dbTable;
    }

это выделенная часть .. не может использовать соединение

  $select = $this->getDbTable()->select()
                        ->from("patient_appointment",array('pa_pd_patient_id',
                                'DATE_FORMAT(pa_datetime,"%h:%i %p") as pa_time','pa_datetime','pa_um_id'
                                ,'pa_created_date','pa_mode','pa_type'))
                        ->where('date(pa_datetime) = ?', $date)
                        ->where('pa_pd_patient_id = ?', $patientId)
                        ->order('time(pa_datetime)');
        $resultSet = $this->getDbTable()->fetchAll($select);
0 голосов
/ 29 апреля 2010

IMHO Я бы предложил действие для каждого действия, связанного с таблицей mysql для ремонтопригодности. Это будут легковесные действия, которые просто вызывают вашу модель для этой таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...