За последние 24 часа нас посетили 16463 программиста и 1677 роботов. Сейчас ищут 815 программистов ...

php mvc Как передать метод из model во view

Тема в разделе "Прочие вопросы по PHP", создана пользователем sharomet, 22 мар 2014.

  1. sharomet

    sharomet Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    13
    Симпатии:
    0
    Всем привет. У меня такая проблема

    Fatal error: Call to a member function gethello() on a non-object

    эта ошибка вылазит если url равен site.com но если туда вписать site.com/index то всё отрабатывает отлично.
    Как можно это исправить?
    Может нужно какой то дополнительный класс создать во view специально для главной страницы? Я просто что только не пробовал..
    Спасибо!

    Я не использую никаких фреймворков
    система построена на видео некоего JREAM
    https://www.youtube.com/playlist?list=PL7A20112CF84B2229&feature=view_all

    Смысл в том что бы я мог передать данные между modеl и view через controller при этом не добавляя в урл сайта site.com/index а просто site.com
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    можно я не буду смотреть видео?
    тебе надо подсказать как строку "name/" превратить в "name/index", так?
     
  3. sharomet

    sharomet Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    13
    Симпатии:
    0
    мне нужно передать данные из модели во вью через контроллер при этом урл стартовой страницы должен быть не "site.com/index" а "site.com"

    а сейчас
    "site.com/index" - отрабатывает а
    "site.com" - не работает.
    Спасибо

    даже если в контроллере прописать метод то он не работает во view пока к урл не допишешь index
     
  4. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    А как у вас работает роутинг? Вполне возможно, что без /index не находится нужный контроллер.
     
  5. sharomet

    sharomet Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    13
    Симпатии:
    0
    Роутинг работает. При входе на сайт он сразу загружает страницу index проблема в том что на эту страницу я не магу передать данные из БД или любые другие
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ты же написал
    , значит данные поступают. проблема в адресе?
     
  7. sharomet

    sharomet Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    13
    Симпатии:
    0
    вероятно да. в адресе.
    то есть должны быть страницы:
    site.com - эта страница index (главная) в которую не поступают данные, а так - site.com/index поступают данные
    site.com/search - страница поиска
    site.com/message - страница сообщений
    site.com/и т п

    то есть я так понимаю что нужно создать отдельное условие для страницы index но незнаю как это сделать и где именно.

    Fatal error: Call to a member function gethello() on a non-object in Z:\home\site.com\www\controllers\index.php on line 8

    Добавлено спустя 48 минут 33 секунды:
    Ладно я так понял что легче создать метод для вызова данных из БД в контроллере а потом создать копию класса во view и всё
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    вот я тебе пытаюсь подсказать: если в твоей схеме роутинга проблематично описать обработчик адреса типа "/" сделай в роутере проверку на такое условие и обрабатывай как "/index".

    как правило, если в папке «folder» есть «index.html», то на обращение просто к «folder/» выдается этот файл! аналогия понятна?
     
  9. sharomet

    sharomet Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    13
    Симпатии:
    0
    Я понял спасибо.
    Только причём тут роутинг?

    вот роутинг он просто переводит пользователя в контроллер index если отсутствует $url[0] то есть site.com/'index'

    Код (Text):
    1. if(empty($url[0])){
    2.             require_once 'controllers/index.php';
    3.             $controller=new Index();
    4.             $controller->index();
    5.             return false;
    6.         }
    а вот сам контроллер index
    Код (Text):
    1. class Index extends Controller {
    2.     function __construct() {
    3.         parent::__construct();
    4.     }
    5.    
    6.     function index(){
    7.         $this->view->gethello=$this->model->gethello();
    8.         $this->view->render('index/index');
    9.     }
    10.  
    11. }
    index view
    Код (Text):
    1. echo $this->gethello; //и это не работает
    А в view уже идёт обработка что показывать
    Код (Text):
    1. public function render($name,$noinclude=false){
    2. if($noinclude){
    3. require_once 'views/'.$name.'.php';
    4. }else{
    5. require_once 'views/header.php';
    6. require_once 'views/'.$name.'.php';
    7. require_once 'views/footer.php';
    8. }
    9. }
    Я так понимаю вся проблема вот в этом коде. хотя я магу ошибаться. Та и вообще я уже блин сам запутался
     
  10. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    sharomet можешь предоставить (когда сделаешь) реализацию регистрации или авторизации в своем MVC, мне просто хотелось бы взглянуть на реализацию, т.к. я не понимаю зачем разделять controller и model,по мне это должен быть один класс, один файл.
     
  11. sharomet

    sharomet Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    13
    Симпатии:
    0
    Да. конечно если я когда нибудь доделаю её(
     
  12. maxycwebber

    maxycwebber Новичок

    С нами с:
    25 мар 2014
    Сообщения:
    263
    Симпатии:
    11
    Адрес:
    Gdansk
    почему нельзя взять какой либо фреймворк и не насиловать свой мозг? для развития? дак ты больше вырастишь, посматривая как делать правильно. не теряй времени (его мало). выбирай инструменты, а не изобратай. ты же берешь нож, чтоб намазать масло,, а не выколачиваешь его из камня
     
  13. sharomet

    sharomet Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    13
    Симпатии:
    0
    Да. Это верно.