2015-02-13 2 views
1

Я использую PHP и разбираюсь, у меня был этот вопрос в течение длительного времени в моем сознании, думая, что я разрешу это сам, но я не мог найти для этого хорошего ответа.PHP OOP & MVC хорошая практика

Например, этот сценарий:

Я подклассы разбора таблицы в модели, так это выглядит следующим образом:

Класс здания

class Building extends ParseObject { 
    public static $parseClassName = "Building"; 


    public static function getCityBuildings($city = null) { 
     $query = new ParseQuery("Building"); 
     if($city){ 
      $query->equalTo("city", $city); 
     } 
     $myBuildings = $query->find(); 

     if(empty($myBuildings)){ 
      return new Building(); 
     }else{ 
      return $myBuildings; 
     } 
    } 

    public static function removeBuilding($objectId){ 
     $query = new ParseQuery("Building"); 
     $Building = $query->get($objectId); 
     $Building->destroy(); 
    } 
} 

Теперь давайте скажем я PHP-страницу, которая нуждается чтобы показать мои здания, но поскольку мы не хотим, чтобы пользователь перезагружал страницу каждый раз, когда он менял город, мне нужно использовать AJAX на странице PHP после того, как он изменит выпадающий список.

index.php

//getting some default values. 
$myBuildings: Building::getMyBuildings(); 

<hmtl combobox with default buildings> 
<html combobox with cities> 

// Imagine some code in where i can AJAX to a php page and change the combobox based on the changed city combobox. passing the chosen city value. 

Что я должен сделать, чтобы подключиться через AJAX:

  1. Go непосредственно в моей модели класса добавить некоторые проверки на POST методы и вызывать функции. (can not right)
  2. Создайте страницу контроллера php, которая вызывает функции класса модели и возвращает результат на страницу. (это используется только для запросов этой страницы и т. д.).
  3. Создайте класс, который обрабатывает все соединения с моделью.

Или, есть ли другой способ сделать это?

+0

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

+1

Этот класс горит глазами. :) Открытое свойство и ключевое слово 'new' в методе. Требуется некоторая инъекция зависимостей. Во всяком случае, я согласен с людьми, которые рекомендуют рамки. Поскольку Lavavel состоит из основных компонентов Symfony, я предлагаю изучить Symfony с самого начала. – keyboardSmasher

+0

@ tereško hmm Как вы собираете данные? – MichaelAngelo

ответ

-1

О вариантах, которые вы упомянули, является более точным для моего понимания. Но я буду использовать структуру, которая уже решает эту проблему. Таким образом, ваш проект станет безопасным. И он добавляет преимущества сотрудничества с другими людьми быстрее, внедряет идиомы и практики, которые протестированы сообществом, использующим эту инфраструктуру ... и многое другое

+0

Какие рамки? или это не имеет значения ...? никогда не использовал фреймовую структуру. – MichaelAngelo

+0

Это не имеет значения. Это ваш вариант и ваша команда. Я Зенд может быть подавляющим, возможно, симфонией или ларавелем. выбрал то, что вам нравится больше всего – Raulucco

+3

@Raulucco, рекомендующий «использовать фреймворк» - худший совет, который вы можете дать тому, кто пытается понять Разделение проблем. И большинство этих «преимуществ», которые вы указали, не существует. –

Смежные вопросы