#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');
}
}
Когда я просматриваю свою страницу, все, что я вижу, это:
Вместо того, чтобы видеть мою страницу с файлами заголовка.
Заранее спасибо за любую помощь! Прости за то, чего я не понимаю. Я относительно новичок в 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');
В этом режиме вы выполняете поиск в файле контроллера и создаете экземпляр объекта.
Функции функциональны, но экспорт контроллера неверен.