Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593

Роутинг

30.12.2019, 14:54. Показов 684. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Имеется такой код.
route.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 class Route{
        private $page;
        public function run(){
            $data = new Data();
            if(isset($_GET['route'])){
                $route_page = htmlspecialchars(stripslashes(trim($_GET['route'])));
                 if(array_key_exists($route_page,$data->data["pages"])){
                    $this->page = $data->data["pages"][$route_page];
                }else{
                    $this->page = $data->data["pages"]["default"];
                }
            }else{
                $this->page = $data->data["pages"]["default"];         
            }
            $page = $this->page;
            $methodname = "action_$page";
            self::$methodname();
        }
        //Метод загрузки главной
        public static function action_index(){ 
            //Модель вида
            $view = new View();
     
            //Вид
            $view->load("index");
        }
        //Метод загрузки профиля
        public static function action_profile(){ 
            //Модель вида
            $view = new View();
     
            //Вид
            $view->load("profile");
        }
        //Метод загрузки настроек
        public static function action_setting(){ 
            //Модель вида
            $view = new View();
     
            //Вид
            $view->load("setting");
        }
    }
Подскажите, могу ли я объединить три функции и более, чтобы была 1 функция action_page вместо action_index, action_setting, action_profile
Файл загрузки видов.
view.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    class View{
        public function load($name){
            $name = ($name == 'index')?'profile':$name;
            $path = COMMON."/$name.tpl";
            $path_php = MODEL."/$name.php";
           
            if(file_exists($path) && file_exists($path_php)){
                require_once($path_php);
                require_once (VIEW.'/common/head.tpl');
                require_once($path);
                require_once (VIEW.'/common/footer.tpl');
            }else{
                //дефолтный
                $data = new Data();
                require_once (VIEW.'/common/head.tpl');
                $path = COMMON."/".$data->data["pages"]["default"]."tpl";
                require_once (VIEW.'/common/footer.tpl');
                require_once($path);
            }
        }
    }
У меня получается, что подгружает в себя еще файлы, то есть страница в странице получается.
Файл data.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
    class Data{
        public $data;
        function __construct() {   
            $this->data = array(
                "pages" => array(
                    "index"   => "profile",
                    "default" => "profile",
                  "setting" => "setting",
                ),
            );
        }
    }
и controller.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  require_once('config.php');
// константы
require_once('contstant.php');
 
if(empty($_SESSION['token']) && empty($_POST['id'])){
    require_once (COMMON.'/head_log.tpl');
    require_once (COMMON.'/log.tpl');
    require_once (COMMON.'/footer_log.tpl');
}
else{
    require_once("usercp.php");
    // данные
    include_once MODEL."/data.php";
    //Работа с видами
    include_once MODEL."/view.php";
    
    include_once PATH."/system/route.php";
    $route = new Route();
    
    $route->run();
}
Основная проблема в файле view.php, подскажите, пожалуйста, что делаю не так. Заранее спасибо.

Добавлено через 20 минут
Вопрос закрыт, код что выше работает корректно. Дело в другом.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.12.2019, 14:54
Ответы с готовыми решениями:

Роутинг
Всем привет. Такой вопрос: есть вот такой роутер class Route { static function start() { // контроллер и действие по...

Роутинг и POST
Такой вопрос: кто делает роутинг при помощи единой точки входа и explode('/', $_SERVER), как вы обрабатываете POST запросы? Пишете в...

Роутинг и параметры
Всем привет! Хочу сделать ЧПУ на примере example.com/controller/action/param Смотрел статью https://habrahabr.ru/post/150267/....

11
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
30.12.2019, 19:39
Цитата Сообщение от u4en1k Посмотреть сообщение
//Модель вида
это как? модель ничего не знает о шаблоне.
роутер, определяет какой контроллер и метод запускать и запускает
view->load() загружает один шаблон
контроллер - подгружает модель и нужные шаблоны(view->load())
1
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
30.12.2019, 23:18  [ТС]
fanatikus,
Цитата Сообщение от fanatikus Посмотреть сообщение
это как?
Инициализируем модель вида
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
30.12.2019, 23:40
Цитата Сообщение от u4en1k Посмотреть сообщение
Инициализируем модель вида
нет такого понятия, как модель вида. есть просто модель. и с моделью, работает контроллер а не шаблон
1
133 / 118 / 34
Регистрация: 04.04.2018
Сообщений: 593
30.12.2019, 23:47  [ТС]
fanatikus, Благодарю за разъяснение. Может подскажите, если не затруднит.
Цитата Сообщение от u4en1k Посмотреть сообщение
1 функция action_page вместо action_index, action_setting, action_profile
Добавлено через 2 минуты
И вопрос тут же. Каким образом преобразовать ссылки в вид
index.php?route=profile/1
где 1 это было profile.php?id=1
С помощью .htaccess? Если да, подскажите, пожалуйста, как?
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
31.12.2019, 00:25
и вообще, скажем мягко, у вас все не по феншую.

Добавлено через 36 минут
Цитата Сообщение от u4en1k Посмотреть сообщение
могу ли я объединить три функции и более, чтобы была 1 функция
нужно. я уже писал выше
Цитата Сообщение от fanatikus Посмотреть сообщение
роутер, определяет какой контроллер и метод запускать и запускает
а дальше уже в контроллере подключаете нужную модель и подгружаете шаблоны
у вас все наоборот. контроллер запускает роутинг
и view->load напичкано всего
load подгружает только один шаблон и передает в него данные. load('name', $data)
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,874
31.12.2019, 00:51
Цитата Сообщение от u4en1k Посмотреть сообщение
И вопрос тут же. Каким образом преобразовать ссылки в вид
index.php?route=profile/1
Лучше вообще не преобразовывать. А работать с исходными адресами.

Цитата Сообщение от u4en1k Посмотреть сообщение
где 1 это было profile.php?id=1
Не понял.

Цитата Сообщение от u4en1k Посмотреть сообщение
С помощью .htaccess? Если да, подскажите, пожалуйста, как?
Code
1
RewriteRule ^(.*) index.php?route=$1 [QSA]
Цитата Сообщение от fanatikus Посмотреть сообщение
нет такого понятия, как модель вида.
Вообще-то есть. Но к представленному коду это не относится.
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
31.12.2019, 01:00
Цитата Сообщение от estic Посмотреть сообщение
Вообще-то есть.
что вы имеете в виду?
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,874
31.12.2019, 01:04
Цитата Сообщение от fanatikus Посмотреть сообщение
что вы имеете в виду?
Есть понятие "модель вида (представления)".
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
31.12.2019, 01:11
Цитата Сообщение от estic Посмотреть сообщение
Есть понятие "модель вида (представления)".
под словом модель подразумевается модель в контексте mvc?
0
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,874
31.12.2019, 01:20
fanatikus, посмотрите "активный MVC", "MVVM" и т.п.

К слову, автор ничего не писал про MVC У него пока что не пойми что
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
31.12.2019, 01:22
Цитата Сообщение от estic Посмотреть сообщение
У него пока что не пойми что
тут, я полностью согласен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.12.2019, 01:22
Помогаю со студенческими работами здесь

Рекурсивный роутинг
Здравствуйте. Для написания сайта делаю рекурсивный роутинг. Почему? Потому что мои урлы выглядят так:...

Роутинг в php
У меня задан следующий роутинг - адрес сайта/контроллер/экшен/и остальное Делал постраничную наваигацию и при нажатии на страницу <a...

Роутинг php
Принялся изучать MVC . Столкнулся с кучей Вопросов. Ну вот начну с роутера, Как быть с Глубокой вложенностью? там...

Роутинг php
Приветствую, есть страница входа на сайт <? if ($_SERVER == '/') $page = 'home'; else $page = substr($_SERVER, 1); ...

Роутинг и настройка .htaccess
Возникла очередная проблема. Имеется ссылка вида: site.ru/category/sub-category/name category - это папка, sub-category - это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru