Ну вообще, ИМХО, модель не обязательно должна быть сторого привязана к контроллеру. Модель это фактически набор правил, методов, аттрибутов (еще бог знает чего), описывающая какую-то конкретную сущность (например, таблицу из БД) и предоставляющая функционал для работы с этими данными (типа create update delete). А ты "пришил" модель к контроллеру. Контроллер часто вообще без модели работает, а модель без контроллера. "но это получается как-то не рационально, создавать в каждой модели метод с получением этого блока" - не совсем понял о чем ты... Не нужно "В модель news" подгружать другие модели. Вообще, у нас немного разнится понимание что такое модель, свое понимание я описал выше, и на его основе могу сказать, что создать хоть 10 разных моделей в одном контроллере вполне нормально, если они тебе конечно там нужны. С другой стороны для тех же "пользователей online", имхо, лучше сделать отдельный блок, в УИИ например это виджет, в Симфони - компонент, это как раз позволит тебе использовать блок кода в разных местах сайта, не "создавая в каждой модели метод с получением этого блока". Если я правильно понял о чем ты...Нет, не фреймворк, где-то вычитал, где-то скопировал, где-то сам
Да, я в принципе сейчас понимаю как можно передать другую модель, но, я думаю что есть какие-то более рациональные способы.
Допустим, пользователь перешел в раздел "Новости" (www.../news), соответственно подгружается контроллер "controller_news", далее там идет обращение к модели "model_news", там реализуется вся логика, далее возвращается массив с полученными данными, то бишь $data. В нем хранятся только данные полученных новостей. Дальше все поступает в вид и там реализуется. Вот в чем вопрос. Я могу конечно в модели "model_news" подгружать другие модели, допустим модель с пользователями online и потом в представлении уже выводить этот блок, но это получается как-то не рационально, создавать в каждой модели метод с получением этого блока. Может быть можно как-то обойтись без этого ?
Может быть я чего-то не допонимаю, подскажите! Спасибо !
Спасибо большое, очень благодарен, стараюсьА вообще, конечно, для 15 лет хороший код )) Некоторые в 25 такое не пишут... Но, сильно ZF1 напоминает...
Да, ты правильно меня понялНу вообще, ИМХО, модель не обязательно должна быть сторого привязана к контроллеру. Модель это фактически набор правил, методов, аттрибутов (еще бог знает чего), описывающая какую-то конкретную сущность (например, таблицу из БД) и предоставляющая функционал для работы с этими данными (типа create update delete). А ты "пришил" модель к контроллеру. Контроллер часто вообще без модели работает, а модель без контроллера. "но это получается как-то не рационально, создавать в каждой модели метод с получением этого блока" - не совсем понял о чем ты... Не нужно "В модель news" подгружать другие модели. Вообще, у нас немного разнится понимание что такое модель, свое понимание я описал выше, и на его основе могу сказать, что создать хоть 10 разных моделей в одном контроллере вполне нормально, если они тебе конечно там нужны. С другой стороны для тех же "пользователей online", имхо, лучше сделать отдельный блок, в УИИ например это виджет, в Симфони - компонент, это как раз позволит тебе использовать блок кода в разных местах сайта, не "создавая в каждой модели метод с получением этого блока". Если я правильно понял о чем ты...
Ну да, как-то так. Это Base Controller от которого уже наследуются классы контроллеров с экшенамиСпасибо большое, очень благодарен, стараюсь
Да, ты правильно меня понял
Вот сейчас у меня навеяло мысли.
Что если сделать один главный контроллер, который получает данные из роутера, далее он там уже реализует подключение модулей, разных виджетов и вызывает другой контроллер, где уже реализуется модель, которую запрашивает пользователь. Вроде как-то так. Сейчас попробую сделать, может что-то полезное получится. Потом сразу вам отпишу что получилось
Нет, немного не то, Base controller он и так уже есть. Я имею в виду один - главный контроллер, через который уже присоединяются другие контроллеры, а там уже реализуется модель, если она есть и передается опять-же в главный контроллер и там генерируется вид.Ну да, как-то так. Это Base Controller от которого уже наследуются классы контроллеров с экшенами
*facepalm*главный контроллер, через который уже присоединяются другие контроллеры, а там уже реализуется модель, если она есть и передается опять-же в главный контроллер
Может быть, это только суждения, я сейчас попробую реализовать, может понятней будет что я имею в виду*facepalm*
различные типы. редирект и вьюха - как бы не одно и тоже, требует разных правил обработки.Василий М., с каждым instanceof где-то умирает котёнок. Зачем вводить различия между XML и PNG с точки зрения фронт-контроллера?
controller не может сам по себе запускаться, это лишь мотор, который нужно кому-то запускать.отсюда front-controller это не обязательный элемент это часть controller!
Чем твой Krugozor_Notification отличается от пустого View? Заголовки всё равно через response тащишь, как я вижу.различные типы. редирект и вьюха - как бы не одно и тоже, требует разных правил обработки
Спасибо! начинал уже читать про спейсы, но не усвоилЕщё про namespace почитай, лишним не будет, и более правильный маршрутизатор построишь...
В любом случае все к ним и идет.
именноcontroller не может сам по себе запускаться, это лишь мотор, который нужно кому-то запускать.
/**
* Front controller interface
*/
interface FrontControllerInterface extends ControllerInterface {
/**
* Executes the front controller
*/
public function run();
}
тем что это два разных объекта, с разным назначением.Чем твой Krugozor_Notification отличается от пустого View? Заголовки всё равно через response тащишь, как я вижу.
<?php
class Route {
private $parseArray;
public function __construct($controller = 'index', $action = 'index'){
$this->parseURL();
$controller = $this->getController();
$action = $this->getAction();
$option = $this->getOptions();
}
public function parseURL($url = null){ // Работаем с URL, распределяем в массив
if($url == null) $url = $_SERVER['REQUEST_URI'];
$url_path = array();
$url_path = parse_url($url, PHP_URL_PATH);
$uri_parts = explode('/', trim($url_path, ' /'));
$this->parseArray = $uri_parts;
}
public function getController(){ // Получаем имя контроллера
if(empty($this->parseArray[0])) $controller = 'index';
else $controller = array_shift($this->parseArray);
return $controller;
}
public function getAction(){ // Получаем имя экшена
return self::getController();
}
public function getOptions(){ // Получаем опции экшена
if(!empty($this->parseArray) and !(count($this->parseArray) & 1)){ // Проверяем четность
$option = array();
do{
array_push($option, array(array_shift($this->parseArray) => array_shift($this->parseArray)));
}while(!empty($this->parseArray));
return $option;
}
}
}
?>