[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверить есть ли действующий экземпляр
McLotos
Добрый вечер!
Есть базовый класс Controller. Все остальные контроллеры работают через него. Возникла такая ситуация. На одной из страниц нужно подключить 2 контроллера. Получается что при создании объекта второго контроллера, данные переданные первым объектом теряются. Как сделать так чтобы базовый контроллер не создавал отдельные экземпляры для каждого потомка, чтобы все потомки работали с одним общим объектом?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
chee
Цитата (McLotos @ 8.10.2015 - 15:02)
Все остальные контроллеры работают через него.

Что это означает?
Цитата (McLotos @ 8.10.2015 - 15:02)
На одной из страниц нужно подключить 2 контроллера.

Зачем?
Цитата (McLotos @ 8.10.2015 - 15:02)
данные переданные первым объектом теряются.

Почему?
Цитата (McLotos @ 8.10.2015 - 15:02)
Как сделать так чтобы базовый контроллер не создавал отдельные экземпляры для каждого потомка, чтобы все потомки работали с одним общим объектом?

Тут придется пояснять кодом.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
McLotos
Цитата (chee @ 8.10.2015 - 17:09)
Цитата (McLotos @ 8.10.2015 - 15:02)
Все остальные контроллеры работают через него.
Что это означает?

Есть базовый класс Controller, остальные классы например menuController являются его потомками.
Цитата (chee @ 8.10.2015 - 17:09)
Цитата (McLotos @ 8.10.2015 - 15:02)
На одной из страниц нужно подключить 2 контроллера.
Зачем?

Мне нужно подключить контроллер, который создает страницу и контроллеры разных модулей, которые нужны на этой странице.
Цитата (chee @ 8.10.2015 - 17:09)
Цитата (McLotos @ 8.10.2015 - 15:02)
данные переданные первым объектом теряются.
Почему?

Есть Controller и есть его потомок, например MainPage extends Controller
Но на этой же странице нужно к примеру построить меню, которое создается объектом MenuBuilder extends Controller
Так вот второй потомок перезапускает базовый контроллер


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Guest
Так вот второй потомок перезапускает базовый контроллер
1 контроллер всегда должен запускаться, но можно сделать какую-нибудь function init() и запускать parent::init() где определить нужные параметры
chee
McLotos, у тебя обязаности между слоями MVC распределены не правильно, то есть у тебя как я понял толстые контроллеры. Но это оффтоп.

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

Нужен код запуска базового контролера и иницализации дочернего, что бы точно сказать, что тебе нужно сделать.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
McLotos
Вот смотри. Бредокод конечно, но пока по-другому не придумал.
controller.php
class Controller{
public $model;
public $view;
protected $cfg;

public function __construct($cfg){
$this->cfg = $cfg;
$this->model = new Model($cfg);
$this->view = new View($cfg);
}
}

main
class Main extends Controller{

private $pageData = array('Id'=>array(), 'name'=>array(),'value'=>array());


public function __construct($cfg, $request){
parent::__construct($cfg);
$this->request = $request;
$this->model = new mainModel($cfg);
}

public function index(){
$block = array();
$page = array('BreadCrumbValue'=>'Краткая статистика');
$data = $this->model->getStat();
foreach ($data as $k=>$v){
$block[count($block)]['Id'] = count($block);
$block[count($block)-1]['Status'] = '{LANG.'.ucwords($k).'}';
$block[count($block)-1]['Count'] = $v;
}
$files['mainBlock'] = 'main'; //можно передать 1 файл, а можно нумерованный массив файлов
$this->view->assign('page', $page);
$this->view->assign('block', $block);
$this->view->assign('file', $files);
$this->view->generate();
}
}

menu

class MenuBuilder extends Controller{
private $request;
public $model;

public function __construct($cfg, $request){
parent::__construct($cfg);
$this->request = $request;
$this->model = new menuModel($cfg);
}

public function addMenu(){
$arr = $this->model->getUserMenu($this->request->session('access'), 'left');

for($i=0; $i<count($arr); $i++){
$menu[$arr[$i]['MenuSection']][$i] = $arr[$i];
$menu[$arr[$i]['MenuSection']][$i]['id'] = $i;
}
$file['LeftBlock'] = 'menu';
$this->view->assign('menu', $menu);
$this->view->assign('file', $file);
}

private function array_column($arr, $key){
for($i=0; $i<count($arr); $i++){
foreach($arr[$i] as $k=>$v){
if($k==$key){
$new[$i] = $v;
}
}
}

return $new;
}
}


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.