setScriptPath в Zend не может найти файл - PullRequest
4 голосов
/ 12 февраля 2012

Я работаю с книгой по Zend Framework и застрял на несколько дней на примере, где я меняю расположение вида по умолчанию. Метод такой, как указано:

$this->view->setScriptPath("/views/");
$this->render("news");

Я помещаю свой news.phtml файл в каталог views (а не по умолчанию views/scripts/artist, но все, что я получил, это сообщение о том, что страница не найдена. Я пробовал много методов из Интернета, таких как набрав

$this->view->setScriptPath("/application/views/");

или

$this->view->setScriptPath(APPLICATION_PATH."/views/");

но все не работают.

Может кто-нибудь, пожалуйста, просветите меня? <ч /> Для большей ясности, я подозреваю, что это связано с настройкой моей машины. Я работаю на Mac 10.7, и я активировал встроенный PHP и Apache. Поскольку Zend предоставляет свой собственный стек, будут ли какие-либо конфликты в файлах настроек, таких как php.ini? <ч /> Больше правок: Я записываю весь метод:

public function newsAction()
{
    //Check if the user is logged in

    //Get the user's id
    //
    //Get the artists
    $artists = array("Thievery Corporation",
        "The Eagles",
        "Elton John");

    //Set the view vairables
    $this->_helper->viewRenderer->setRender('news');
    $this->view->setScriptPath(APPLICATION_PATH.'/views/');
    $this->_helper->viewRenderer->setNeverController(true)->setRender('news');
}

Я поместил news.phtml в каталог views. Я набираю URL http://localhost:10088/loudbite/artist/news. artistController находится в папке контроллеров. Все еще не работает. Что случилось?

Ответы [ 3 ]

5 голосов
/ 12 февраля 2012

При использовании setScriptPath() или addScriptPath необходимо указать абсолютный путь к каталогу или путь относительно текущего каталога.Для переносимости лучше использовать абсолютный путь.

При вызове Zend_View::render() вы должны передать имя сценария, включая его расширение.

На основе вашего последнего примера попробуйте что-то вроде этого:

$view->setScriptPath(APPLICATION_PATH . '/views/');
$html = $view->render('news.phtml');

Просто убедитесь, что путь правильный.В моем примере предполагается, что у вас есть views в папке application.

EDIT: Если вы находитесь в контроллере и хотите использовать другой скрипт вида используйте взамен View Renderer helper вместо:

$this->_helper->viewRenderer->setRender('news');

Это говорит рендереру представления искать скрипт вида news.phtml вместо имени вашего действия.Тем не менее, он все еще ищет в views/scripts/controller/ файл news.phtml.Поэтому вам также необходимы следующие изменения:

// set view script path to the base of the views folder
$this->view->setScriptPath(APPLICATION_PATH . '/views/');

$this->_helper
     ->viewRenderer
     ->setNeverController(true) // do not render into controller subdirectories
     ->setRender('news');       // set render script to news.phtml

Когда вы используете Zend Application, он выполняет свой собственный рендеринг представлений, поэтому, если вы не пытаетесь отобразить html для непосредственного использования, вы не должны использовать Zend_Viewсам.После того, как ваш метод действия контроллера завершится, Zend Application автоматически отобразит скрипт представления и попытается вывести его вместе с любым макетом в браузер.Если вы создали свой собственный Zend_View, вам необходимо прекратить запрос до завершения действия, чтобы не отображать какой-либо другой контент.Есть также способы отключить компоновку или просмотр представления в качестве альтернативы.

0 голосов
/ 19 февраля 2012

Я нашел ответ. Ошибка с моей стороны, но я не знал, что это важно. При первой загрузке проекта в Netbeans он запросил индексный файл, который находится в папке public index.php. Я оставил это пустым. Это должно быть четко определено при создании проекта в Netbeans. Если вы уже допустили ошибку, вы можете перейти на index.php, чтобы изменить определения.

0 голосов
/ 12 февраля 2012

Используете ли вы Zend_Application? Или вы просто пытаетесь использовать Zend_View самостоятельно?

Код, который у вас есть, создает объект Zend_View и назначает его $ view, но затем вы вызываете setScriptPath для $ this-> view, а не для Zend_View, который вы только что создали.

Если вы используете Zend_Application, вы можете установить путь к сценарию в application.ini

// Layout
resources.layout.layout = "layout"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

// Views
resources.view.encoding = "UTF-8"
resources.view.basePath = APPLICATION_PATH "/views/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...