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 :: Паттерн Model-View-Controller (MVC). В браузере не отображается содержимое одного из файлов!
Вопрос - почему браузер не находит и не выводит на экран содержимое файла index.tpl? Ведь этот файл лежит в одной папке с main.tpl и 404.tpl.
То есть, по идее, когда открываешь index.php, вместо содержимого 404.tpl, должно выводиться содержимое index.tpl, но так почему-то не происходит.
Файл index.tpl:
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
браузер ничего не ищет по папкам и вообще о них не знает
что ему веб-сервер присылает, то он и отображает(готовый html)
чтобы посмотреть - chrome - ctrl+U
на сервере его собирает php из вот этих вот шаблонов наполненных переменными, а как он это делает это уже тебе смотреть в коде
думаю что в Route::start(); или скорее всего где-то глубже определяется какой шаблон подключать
вот там и смотри логику (Добавление)
в классе Route в методе(функции) start
Pavl
Отправлено: 26 Июля, 2020 - 15:16:20
Новичок
Покинул форум
Сообщений всего: 13
Дата рег-ции: Май 2020
Помог: 0 раз(а)
При заходе на index.php, если нажать ctrl+U, то выводится:
<metahttp-equiv="Content-Type"content="Запрошенная страница не существует.">
<metaname="description"content="Запрошенная страница не существует.">
<metaname="keywords"content="<b>Notice</b>: Undefined variable: meta_keyword in <b>C:\OSPanel\domains\test\www\rusakov\tmpl\main.tpl</b> on line <b>7</b>">
</head>
<body>
<header>
<h1>Добро пожаловать!</h1>
</header>
<hr/>
<divid="content"><h1>Страница не найдена</h1>
<p>Запрошенной страницы не существует!</p>
<p><ahref="index">Главная страница</a></p></div>
<hr/>
<footer>С уваженем, команда нашего сайта.</footer>
</body>
</html>
Класс Route находится в файле route_class.php и выглядит следующим образом:
Покинул форум
Сообщений всего: 13
Дата рег-ции: Май 2020
Помог: 0 раз(а)
LIME пишет:
ох уж эти видеоуроки
ох уж эти сказасьники
судя по стилю урок либо мегадревний либо от не особо качественного учителя
но для начала сойдет
По-правде говоря не слышал ни разу положительных отзывов, как о каких-либо видеоуроках, так и об учебниках! Хотя я согласен, что видеоуроки вырабатывают дурную привычку - сначала, что-то делать, потом думать! А не наоборот!
Урок 2017 года (не слишком, наверное, старый?) от Михаила Русакова. Он и сам пишет, что
это самый простой вариант паттерна MVC, чтобы был понятен принцип работы MVC. Не знаю, хороший Михаил Русаков учитель или плохой, но на просторах интернета его видеоуроки популярны. То тут, то там постоянно на них натыкаешься.
LIME пишет:
http://phpfaq[dot]ru/debug
- мне кажется эта статья всё-таки уже для более-менее профессионалов, чем новичков (или ошибаюсь?). Хотя, всё-равно, спасибо, буду изучать.
Попробовал, с помощью функции var_dump посмотреть код, как Вы предложили. Вот, что вывелось: string(13) "rusakov/index" string(14) "MainController" string(19) "actionrusakov/index" object(MainController)#1 (4) { ["title":protected]=> NULL ["meta_desc":protected]=> NULL ["meta_keywords":protected]=> NULL ["view":protected]=> object(View)#2 (1) { ["dir_tmpl":"View":private]=> string(41) "C:/OSPanel/domains/test/www/rusakov/tmpl/" } }
В коде задействован класс MainController, который находится в файле maincontroller_class.php:
При наведении на extends AbstractController появляется Undefined class AbstractController . Класс не найден. Интересный вопрос - почему класс не найден? Этот класс содержится в файле abstractcontroller_class.php:
И файл abstractcontroller_class.php находится в папке core.
Почему же, тогда появляется сообщение, что этот класс не найден?
LIME
Отправлено: 26 Июля, 2020 - 18:16:06
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Pavl пишет:
это самый простой вариант паттерна MVC
это какраз понятно
дело в стиле наименования переменных и пренебрежении угловыми скобками
и использование глобальных переменных внутри класса
не серьезный он дядька короче
Pavl пишет:
мне кажется эта статья всё-таки уже для более-менее профессионалов
ты в закладки добавь
если щас не понял потом перечитай, когда будешь головой об монитор биться в поисках бага
Pavl пишет:
Почему же, тогда появляется сообщение, что этот класс не найден?
как не найден? найден
object(MainController) выводит же
значит инстанс объекта создан
поудаляй лишние вардампы ато их много и ты путаешься
и кстати там в статье среди прочего сказано
Цитата:
8. И САМОЕ ВАЖНОЕ: запуская скрипт, смотрите не то, что показывает браузер, а ИСХОДНЫЙ HTML код!.
ты бы не ленился а почитал
actionrusakov/index вот этого метода не найдено в if (method_exists(...
<meta http-equiv="Content-Type" content="Описание главной страницы">
<meta name="description" content="Описание главной страницы">
<meta name="keywords" content="<b>Notice</b>: Undefined variable: meta_keyword in <b>C:\OSPanel\domains\test\www\rusakov\tmpl\main.tpl</b> on line <b>7</b>">
<footer>С уваженем, команда нашего сайта.</footer>
</body>
</html>
Возникла следующая проблема. Когда нажимаешь на ссылку "Внутренняя страница", то не подгружается содержимое файла page.tpl. Происходит переход по адресу http://test/page и в браузере выводится "Объект не найден!". Не понимаю, почему?
miketomlin
Отправлено: 26 Июля, 2020 - 19:42:13
Частый гость
Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016
Помог: 5 раз(а)
Pavl, это не роутинг, а полная хрень. Или вы что-то попутали, или автор – идиот.
Получается практически то, о чем я вам писал на др. форуме:
Цитата:
P.S. Конечно, может быть и примитив вроде определения имени файла непосредственно из адреса, например из /page получается имя page.php или page.tpl, потом проверяется существование этого файла и т.д. Но такие вещи даже рассматривать не надо.
(Добавление)
Контроллер походу вообще один на все, поэтому вот это подтверждает мои слова про хрень:
(Добавление)
Про помесь данных с кодом уже молчу. Даже для учебки это отстой. Точнее древность несусветная. (Добавление)
Кстати, самые идиотские уроки больше всего популярны ;) Уроки Попова – это уже давно мем. Русаков (если там именно его авторство) походу не далеко ушел. Возможно, это тот же Попов в новой обертке
LIME
Отправлено: 26 Июля, 2020 - 20:02:46
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
Pavl пишет:
Вырезал следующие строки из класса Route, но оставив в этом же файле:
Pavl это ты зря... хотяя...лучше бы все вырезал вообще... и уроки эти сжег) miketomlin полностью поддерживаю, коллега
Pavl глянь главу MVC Котерова "PHP5 подлиннике"
книга старая, но глава актуально принципы пояснит
я другого стоящего источника просто не знаю (Добавление)
отмена...отмена
появился "PHP 7 в подлиннике" (Добавление)
лучше просто прочитай ее
уроки это - ничего не знаю и не умею зато за 2 дня
если доставляет именно видео формат, то лучшее что видел это - курсы "Специалист" по php от мгту Баумана
miketomlin
Отправлено: 26 Июля, 2020 - 20:27:52
Частый гость
Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016
Помог: 5 раз(а)
P.S. Проверка существования метода немного лучше, чем проверка существования файла, но в общем та же фигня. Я вам на др. форуме перечислил осн. виды роутинга. (Добавление)
Суть в том, что нужно опираться на адреса или адресные маски, а не на имена контроллеров/методов. При роутинге могут всплывать внутренние технические «адреса» с именами контроллера/метода, но это уже результат перевода внешних адресов.
LIME
Отправлено: 27 Июля, 2020 - 01:28:52
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
miketomlin пишет:
Про помесь данных с кодом уже молчу.
ты о чем? (Добавление)
miketomlin пишет:
Суть в том, что нужно опираться на адреса или адресные маски, а не на имена контроллеров/методов.
почему? то есть я знаю почему, но это играет роль для промышленного использования роутинга и MVC тут нипричем.
для учебного примера почему бы и не да
miketomlin
Отправлено: 27 Июля, 2020 - 10:19:39
Частый гость
Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016
Помог: 5 раз(а)
1. Я про содержимое показанных actionIndex и actionPage (прежде всего).
2. Так я про роутинг и писал, а не MVC в целом Доступность экшина не должна определяться его физ. присутствием. Кроме того, должна быть возможность привязки к разным адресам одного и того же экшина. (Добавление) LIME
Pavl
Отправлено: 27 Июля, 2020 - 15:10:53
Новичок
Покинул форум
Сообщений всего: 13
Дата рег-ции: Май 2020
Помог: 0 раз(а)
Вы убедили меня в том, что эти видеоуроки не очень хорошие, хотя сам автор пишет, что у него есть курс, конкретно по паттерну MVC по времени на несколько десятков часов. И я хотел, через некоторое время поизучать его. А теперь не знаю, стоит ли?
Текущий вопрос всё-таки, хотелось бы закончить. Ещё раз подчеркну, что писал код точь-в-точь, как у автора. И у него он работает. Только с одним отличием - в жёстком диске размещал файлы не совсем так, как у него. Может я с путями, что-то напутал? Посмотрите, пожалуйста, в прикреплённом файле скриншот жёсткого диска. Может, быть там, что-то не так? Я сам не вижу ошибки (если она там есть). Прикреплено изображение (Нажмите для увеличения)
LIME
Отправлено: 27 Июля, 2020 - 23:14:33
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
miketomlin
1. не вижу тут ничего страшного для учебного кода
единственный минус в том что при изменении контента придется деплоить код
но опять же это проблемы уже промышленного использования
короче пойдет
miketomlin пишет:
Так я про роутинг и писал, а не MVC в целом
так а роутинг тут какбэ коротко и сбоку, только чтобы понять принцип MVC
можно вообще без него а тупо передавать имя контроллера и экшена в гет-параметрах, почему бы и нет, а значит не надо так уж в дебри лезть
miketomlin пишет:
Кроме того, должна быть возможность привязки к разным адресам одного и того же экшина.
и это касается промышленного использования (Добавление)
Pavl пишет:
А теперь не знаю, стоит ли?
эту тему всю целиком вообще не стоит изучать дольше двух часов если уж по хорошему) ну для совсем новичка может подольше
ну если рассматривать все возможные виды, то ладно - 4 часа может можно
один из паттернов и не более
несколько десятков часов застрелите меня
Pavl пишет:
Только с одним отличием - в жёстком диске размещал файлы не совсем так, как у него
да это уже все поняли на самом деле
либо из папки rusakov все вынь и положи в www
либо в конфиге вебсервера добавь ее к пути до www
если не справишься показывай конфиг...что там у тебя? апач? (Добавление) miketomlin а хотя в чем-то ты прав
моделью то и не пахнет))
в таком исполнении контроллер должен брать данные из модели и передавать вьюхе
короче кругом провал)))
Pavl
Отправлено: 28 Июля, 2020 - 15:10:03
Новичок
Покинул форум
Сообщений всего: 13
Дата рег-ции: Май 2020
Помог: 0 раз(а)
Добрый день!
Прислушиваясь к вашим советам, сначала переместил все файлы относящиеся к данному уроку из папки rusakov в папку www. В результате чего, вообще ничего не изменилось.
Я вспомнил, что есть скаченные исходники автора этого видеоурока. Их разместил в папке www. Теперь, в браузере, кроме ошибок ничего не выводится:
Warning: include(C:\OSPanel\domains\test\www\tmplmain.tpl): failed to open stream: No such file or directory in C:\OSPanel\domains\test\www\core\view_class.php on line 15
Warning: include(): Failed opening 'C:\OSPanel\domains\test\www\tmplmain.tpl' for inclusion (include_path='.;c:/ospanel/modules/php/PHP_7.2-x64;c:/ospanel/modules/php/PHP_7.2-x64/PEAR/pear;core;controllers') in C:\OSPanel\domains\test\www\core\view_class.php on line 15
Файлы исходники: Прикреплено изображение (Нажмите для увеличения)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.