Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Видимость переменных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Из области ООП
razorg1991
Отправлено: 24 Июня, 2014 - 21:14:13
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Использую MVC
Контроллер выглядит так:

PHP:
скопировать код в буфер обмена
  1.  
  2. class mod_contact extends modBaseController {
  3.         protected $objmm = array("info" => "info");
  4.         public function getmodule() {
  5.             $a = $this->objmm["info"]->getdata();
  6.             var_dump($a);
  7.             $this->view("mod_contact");
  8.         }
  9.     }
  10.  


Модель:

PHP:
скопировать код в буфер обмена
  1.  
  2. class Info extends BaseModel {
  3.            public function getdata() {
  4.                return $this->sel("*","info");
  5.            }
  6.         }
  7.  


Вид:

PHP:
скопировать код в буфер обмена
  1.  
  2. э<h2>Это вид модуля контактов!</h2>
  3. <?PHP
  4.     echo $a['adress'];
  5. ?>
  6.  


Все работает, var_dump показывает все что хотел вывести
array(6) { ["adress"]=> string(43) "пр.Косиора, 2А, г.Харьков" ["nav"]=> string(0) "" ["phone"]=> string(19) "+38 (096) 042 78 38" ["day"]=> string(15) "Пн-Сб, Вс" ["time"]=> string(23) "9.00-18.00, 10.00-18.00" ["weekend"]=> string(23) "без выходных" }

А вот с с выводом в виде возникла проблема:
Notice: Undefined variable: a in W:\home\localhost\www\avtocms\templates\default\views\mod_contact.php on line 3

Почему вид не видит переменную "a" из контроллера, данные которой пришли из модели?

Базовый класс контроллера выглядит так:

PHP:
скопировать код в буфер обмена
  1.  
  2. abstract class modBaseController {
  3.        
  4.         // массив для объектов моделей используемых модулем
  5.         protected $objmm = array();
  6.        
  7.         public function __construct() {
  8.             // создаем объекты моделей при вызове контроллера модуля
  9.             foreach ($this->objmm as $obj => $classmodel) {
  10.                 $this->objmm[$obj] = new $classmodel;
  11.             }
  12.            
  13.         }
  14.        
  15.         // подключаем вид модуля
  16.         public function view($view) {
  17.             $path_view = Config::$template_folder.Config::$template.Config::$view_folder.$view.'.php';
  18.             $path_view_default = Config::$template_folder.Config::$template_default.Config::$view_folder.$view.'.php';
  19.            
  20.             if(file_exists($path_view)){
  21.                 require_once $path_view;
  22.             }
  23.            
  24.             elseif(!file_exists($path_view_default)) {
  25.                 echo 'Файл'.$view.'.php не существует!';
  26.             }
  27.             else {
  28.                 require_once $path_view_default;
  29.             }
  30.         }
  31.  
  32.     }
  33.  

(Отредактировано автором: 24 Июня, 2014 - 21:18:04)

 
 Top
Мелкий Супермодератор
Отправлено: 24 Июня, 2014 - 21:31:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А почему должен?


-----
PostgreSQL DBA
 
 Top
razorg1991
Отправлено: 24 Июня, 2014 - 22:08:36
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Мелкий пишет:
А почему должен?

А почему нет?
Ну хорошо, а как тогда мне сделать видимые переменные для вида? Или как мне вообще в вид делать вставки кода для вывода данных из контроллера?

(Отредактировано автором: 24 Июня, 2014 - 22:10:07)

 
 Top
caballero
Отправлено: 25 Июня, 2014 - 00:35:01
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




передавай модель вторым параметром в функцию view()
либо сделай модель членом класса контроллера


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Мелкий Супермодератор
Отправлено: 25 Июня, 2014 - 08:37:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Обыкновеннейшая область видимости в функциях. Переменные одной функции не видны в другое.


-----
PostgreSQL DBA
 
 Top
DlTA
Отправлено: 25 Июня, 2014 - 13:08:26
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




extract()

PHP:
скопировать код в буфер обмена
  1. funcrion view($inData){
  2.   extract($inData);
  3.   echo $a;
  4. }
  5.  
  6. $data = array('a'=>10);
  7. view($data);


но как потом это задолбетесь отлаживать))
 
 Top
razorg1991
Отправлено: 26 Июня, 2014 - 08:16:26
Post Id


Частый гость


Покинул форум
Сообщений всего: 131
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




caballero пишет:
передавай модель вторым параметром в функцию view()


Спасибо, так и сделал, все заработало Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB