Чат Telegram
Группа ВКонтакте

Конструктор класса

Всем здравствуйте!

Возник вопрос, насколько можно загружать конструктор класса, особенно если от него наследуются все остальные классы пример: AbstractController?

Почему возник вопрос:

Решил реализовать через конструктор заполнение полей в <head> таких как <meta>, <link> и т.д.

Если есть метод проще и стандартизированние будет интересно посмотреть!
Но вопрос насколько загруженность конструктора влияет на быстроту приложения так же остаётся.

Спасибо!


Вопрос задал excent63 23.10.2019 в 20:33

Ответы на вопрос (4)


Делать заполнение этих полей в конструкторе контроллера не имеет никакого смысла. На момент создания контроллера у нас просто не может быть этих данных. Они появляются гораздо позже, после обращения экшена к модели.

Ну и заполнением этих полей должен заниматься слой View. Изучайте курс ООП в PHP.

Ответил ivashkevich 25.10.2019 в 19:24

Хотел таким методом избавится от дублирования кода в каждом контроллере к примеру стили и скрипты. Чтобы можно было изменять и подключать их примеру из админки в одном месте.

Ответил excent63 26.10.2019 в 18:39

Пример мета тэг base:

abstract class AbstractController
{
    /** @var View */
    protected $view;

    /** @var User|null */
    protected $user;

    /** @var string */
    protected $base;

    /**
     * AbstractController constructor.
     * @throws DbException
     */
    public function __construct()
    {
        $this->user = UsersAuthService::getUserByToken();
        $this->view = new View(__DIR__ . '/../../templates');
        $this->view->setVar('user', $this->user);
        $this->base = $_SERVER['HTTP_X_FORWARDED_PROTO'] . '://' . $_SERVER['HTTP_HOST'];
    }
}

MainController:

    public function main()
    {
        $title = 'Главная страница';
        $description = 'Мой блог обо всём!';
        $articles = Article::findAll();

        $this->view->renderHtml('main/main.php', [
            'articles' => $articles,
            'title' => $title,
            'description' => $description,
            'base' => $this->base,
        ]);
    }

Head:

<head>
    <meta charset="UTF-8">
    <title><?php echo $title ?? 'Заголовок' ?></title>
    <?php if ($description) { ?>
        <meta name="description" content="<?php echo $description ?>">
    <?php } ?>
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href='/css/style.css'>
    <script src="/script/jquery-3.4.1.min.js"></script>
    <script defer src="/script/script.js"></script>
    <base href="<?php echo $base ?>">
</head>
Ответил excent63 26.10.2019 в 18:50

Такое проще положить в константу, а шаблоне это просто выводить. Ведь этот base будет один для всего сайта.

Ответил ivashkevich 28.10.2019 в 04:51

Добавить новый ответ