Как реализовать хлебные крошки PHP MVC?

121
23 августа 2019, 16:20

Как реализовать автоматические "хлебные крошки" в MVC на PHP? На данный момент все работает хорошо, но я заметил, что по моему методу код выполняется, что мне вообще не желательно.

private static function getTitle($url, $is_module=FALSE)
{
    if ($is_module) {
        $prefix = \Config\Config::getPrefixTitle($url);
        if (!is_null($prefix)) {
            return $prefix;
        }
    }        
    $meta_tags = get_meta_tags($url);
    if (array_key_exists('breadcrumb_title', $meta_tags)) {
        return $meta_tags['breadcrumb_title'];
    }
    $str = file_get_contents($url);
    if (strlen($str) > 0) {
        $str = trim(preg_replace('/\s+/', ' ', $str)); // supports line breaks inside <title>
        preg_match("/\<title\>(.*)\<\/title\>/i", $str, $title); // ignore case
        return $title[1];
    }
    return NULL;
}

Я из запроса http://localhost.localhost/admin/users/update определенными операциями получаю такой массив путей:

  • http://localhost.localhost/
  • http://localhost.localhost/admin/main/
  • http://localhost.localhost/admin/users/
  • http://localhost.localhost/admin/users/update

В контроллерах, которые отвечают за страницы я делаю назначение $this->view->breadcrumb_title = "Сайт";. Этот реализовано в базовом классе представления:

public function __set($name, $value) {
    $this->$name = $value;
}
public function __get($name) {
    if ($name == "breadcrumb_title") {
        return isset($this->breadcrumb_title) ? $this->breadcrumb_title : $this->title;
    }
    return isset($this->$name) ? $this->$name : NULL;
}

Так вот заметил интересную вещь, если использовать функцию, что я в начале указал (get_meta_tags/file_get_contents), то вся страница выполняется... Это не очень хорошо, поскольку там я могу что-то создавать. Лично у себя заметил на тестах функций, что мол заголовки получаются хорошо, то создается файл, который я удалял... Это происходит из-за того, что в index действии контроллера есть создание файла.

Вопрос такой: как можно этого избежать, какие есть методы?

Спасибо.

Answer 1

Решил вопрос тем, что дал возможность задавать руками заголовки и хлебные крошки. Это также применяется в большинстве современных фреймворках, так что я решил поступил именно так. Избежать выполнения кода не возможно, так как делается запрос на страницу. В теории можно было попробовать в контроллере отлавливать какой-то параметр и на основе его игнорировать выполнение. Но это слишком муторно, как по мне. Наверняка тоже не сработает, поскольку задается заголовок в action, а его придется выполнить. Каждый раз руками проверку пилить - ну неее.

READ ALSO
Функция mail() php

Функция mail() php

Вот код php

109
POST запросы на file_get_contents или fsockopen

POST запросы на file_get_contents или fsockopen

у меня есть сайт на козе, мне нужно к нему через API делать POST запросы, НО из за отсутствия CURL на бесплатном хостинге, я не понимаю как сделать...

110
INSERT or UPDATE mysql, php

INSERT or UPDATE mysql, php

Не знаю как реализовать данную задачу(таблица cron_planning_figure):

107
Как наследовать шаблонный класс?

Как наследовать шаблонный класс?

Как создать обычный (не шаблонный класс), который наследовал бы шаблонный без явного определения типа? Хочу сделать подобие итератора,

136