Когда я пытаюсь повторить свой код заголовка, php-код для этого отображается в виде обычного текста

#php

Вопрос:

PHP-код в верхней части моей страницы просмотра выглядит следующим образом:

 <?php
echo $this->view('includes/header');
?>
 

$this->view (); — это функция внутри моего основного класса контроллера. Класс домашнего контроллера, отображающий представление, расширяет этот класс контроллера.

Основной Класс Контроллера:

 <?php

/*
 * main controller class
 */

class Controller
{

    public function view($view, $data = array())
    {
        extract($data);
        // code...

        if(file_exists("../private/views/". $view . ".view.php"))
        {
            return file_get_contents("../private/views/". $view . ".view.php");
        } else {
            return file_get_contents("../private/views/404.view.php");
        }
    }
}
 

Класс Домашнего Контроллера:

 <?php 

/**
 * home controller
 */
class Home extends Controller
{
    public function index()
    {
        // code...
        echo $this->view('home');
    }
}
 

Когда я просматриваю свою страницу, все, что я вижу, это:

https://i.stack.imgur.com/2uTpX.png

Вместо того, чтобы видеть мою страницу с файлами заголовка.

Заранее спасибо за любую помощь! Прости за то, чего я не понимаю. Я относительно новичок в PHP и MVC.

Ответ №1:

Что вы хотите сделать в своем методе представления, так это return require "paths/there" . Если вы вернете результат file_get_content() , вы получите файл в виде открытого текста, поэтому он не анализируется как php-файл. Вы можете захотеть использовать require require_once , include или include_once следовать вашим потребностям.

Комментарии:

1. Хорошо, спасибо за ответ. Я попробую это прямо сейчас и дам вам знать, сработает ли это.

2. Ух ты! Большое спасибо. Я, наверное, никогда бы об этом не подумал; кажется, я все исправил! Еще раз спасибо!

3. Нп! Возможно, вы захотите взглянуть на функции буфера, такие как ob_start и ob_get_clean, в зависимости от того, что вам нужно сделать. Они могут быть действительно полезны.

4. Хорошо. Большое спасибо!

Ответ №2:

Вы уверены, что приведенный ниже блок кода вызывается после инициализации класса с помощью метода view()?

 <?php
echo $this->view('includes/header');
?>
 

Похоже, что у этого нет никаких методов.

Комментарии:

1. Я думал, что $this-> идет в домашний класс, потому что именно туда вводится код. Но, может быть, это неправильно.

Ответ №3:

Итак, проблема вашего кода здесь:

 require_once('*Your controller url file*');
$Controller = new Controller();

echo $Controller->view('includes/header');
 

В этом режиме вы выполняете поиск в файле контроллера и создаете экземпляр объекта.

Функции функциональны, но экспорт контроллера неверен.