Помогите получить модель в мои контроллеры, с MVC - PullRequest
1 голос
/ 31 августа 2011

Я некоторое время работаю над собственной библиотекой / структурой для обучения.MVC - одна из тех вещей, которые мне потребовались некоторое время, чтобы по-настоящему понять, но я наконец-то понял «Get it».

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

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

Абстрактный класс контроллера ...

/**
 * MVC Example Project
 */


/**
* Extend this class with your Controllers
* Reference to the model wrapper / loader functions via $this->model
* Reference to the view functions via $this->view
*/
abstract class Core_Controller {
    protected $view;
    protected $model;

    function __construct($dependencyContainer){
        $this->view = new Core_View();
        //$this->view = $dependencyContainer->get(view);


    }

}

Абстрактный класс модели ...

/**
* Extend this class with your models and reference to the database object via $this->$db
*/
abstract class Core_Model {
    protected $db;
    protected $session;

    function __construct($dependencyContainer) {
        $this->db = $dependencyContainer->get(database);
        $this->session = $dependencyContainer->get(session);
    }

}

Просмотр класса, может сделать его также абстрактным ...

class Core_View {

    protected $data;

    # Load a view file (views/$view.php);
    # $param data this gets extracted and be thus be used inside the view
    # When loading another view from inside the view file the data is 'cached' so you
    # don't have to pass them again
    public function load($view,$data = null) {

        if($data) {
            $this->data = $data;
            extract($data);
        } elseif($this->data != null) {
                extract($this->data);
        }

        require(APP_PATH . "Views/$view.php");
    }

    public function set($data = null) {

        if($data) {
            $this->data = $data;
            extract($data);
        } elseif($this->data != null) {
                extract($this->data);
        }

    }
}

Пример его объединения ...

/**
 * Example Controller
 */
class User_Controller extends Core_Controller {

    public function profile()
    {
        $profileData = array();
        $profileData = //GET from Model

        $this->view->load('userProfile', $profileData);
    }
}
?>

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Мое предложение - вообще не привязывать вид и модель к контроллеру. Пусть они будут инстанцируемыми из кода контроллера, как и любые другие классы. Затем вы можете получить данные модели (и передать их в представление) стандартным объектно-ориентированным способом.

1 голос
/ 31 августа 2011

Будете ли вы использовать уровень доступа к данным (DAL) / объектно-реляционное отображение (ORM)? Взгляните на Zend_Db , Doctrine или Propel

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

Лучший способ получить данные модели от вашего контроллера - просто вызвать его. Но обычно мы используем своего рода «указатель», который знает, как заполнить вашу объектную модель. Этот указатель называется «Mappers» ( Data Mapper Pattern ):

$MyModelMapper = new MyModelMapper();
$Profile = $MyModelMapper->getProfileById($id); // return Core_Model.

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

Тогда вы передадите эту модель на ваше усмотрение.

Я думаю, вам стоит взглянуть на быстрый старт Zend Framewok. Это даст вам некоторые идеи.

См. Также этот вопрос: В чем разница между DAO и Data Mapper

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