Zend Framework CSS изображение просто URL с котроллером, но не с действием - PullRequest
0 голосов
/ 04 октября 2011

Я изучаю Zend Framework ... возникла эта проблема ...

Если я перейду на URL, www.mydomain.com/Index будет работать FINE, но я перейду на URL www.mydomain.com / Index / index CSS и IMAGE НЕ РАБОТАЮТ ...

ИЛИ например:

Если я зайду по URL-адресу, www.mydomain.com/Faq будет работать FINE, но я идуна URL www.mydomain.com/Faq/test CSS и IMAGE НЕ РАБОТАЮТ ...

Я не понимаю, почему это работает, только если вы укажете Controller, а не Action ...

В моем layout.phtml у меня есть:

<?php
$this->headLink()->appendStylesheet(BASE_URL . 'css/style.css');
$this->headLink()->appendStylesheet(BASE_URL . '/css/header.css');
    $this->headLink()->appendStylesheet(BASE_URL . 'css/footer.css');
echo $this->headLink();
?>

А в public / index.php у меня есть:

$config = new Zend_Config_Ini(
    APPLICATION_PATH . '/configs/application.ini', APPLICATION_ENV);
$baseUrl = $config->baseHttp;
define('BASE_URL', $baseUrl);

И, например, изображение в layout.phtml:

<img src="<?= BASE_URL ?>immagini/footer_info.png" alt="info" />

Что не так?

Может быть, проблема в .htaccess или подобных вещах ... Так что я расскажу вам больше ...

Мой хостинг общедоступенroot: public_html

Внутри public_html У меня есть другая папка проекта.Пример: Project1 и Project2 (оба с Zend Framework).

В папке public_html / Project1 у меня есть:

  • Приложение
  • Public
  • ....
  • index.php

    include 'public / index.php';

  • .htaccess

    SetEnv APPLICATION_ENV разработка RewriteEngine On RewriteRule. * Index.php

В public_html / Project1 / public У меня есть:

  • папка CSS
  • imagesпапка
  • js папка
  • .htaccess

    SetEnv APPLICATION_ENV development RewriteEngine On RewriteCond% {REQUEST_FILENAME} -s [OR] RewriteCond% {REQUEST_FILENAME} -l [ИЛИ] RewriteCond% {REQUEST_FILENAME} -d RewriteRule ^. $ - [NC, L] RewriteRule ^. $ index.php [NC, L]

  • index.php (еще один)

    // Определить путь к определенному каталогу приложения ('APPLICATION_PATH') ||define ('APPLICATION_PATH', realpath (dirname ( FILE ). '/../application'));

    // Определить определенную среду приложения (' APPLICATION_ENV ') ||define ('APPLICATION_ENV', (getenv ('APPLICATION_ENV')? getenv ('APPLICATION_ENV'): 'production'));

    // Убедитесь, что библиотека / находится в include_path set_include_path (implode (PATH_SEPARATOR, array (realpath)(APPLICATION_PATH. '/../Library'), get_include_path (),)));

    / ** Zend_Application * / require_once 'Zend / Application.php';

    // Создатьapplication, начальной загрузки и запуска $ application = new Zend_Application (APPLICATION_ENV, APPLICATION_PATH. '/configs/application.ini');

    $ config = new Zend_Config_Ini (APPLICATION_PATH. '/configs/application.ini', APPLICATION_);$ baseUrl = $ config-> baseHttp;define ('BASE_URL', $ baseUrl);

    $ application-> bootstrap () -> run ();

Еще раз спасибо ...

Samuele

1 Ответ

1 голос
/ 04 октября 2011

Полагаю, BASE_URL на самом деле пусто, поэтому ваша проблема в том, что вы используете относительные пути для таблиц стилей и изображений, которые не будут работать в подпапках. Например, в www.mydomain.com/Faq таблица стилей, включаемая для css/style.css, преобразуется в www.mydomain.com/css/style.css, что, вероятно, является правильным. На www.mydomain.com/Faq/test он разрешится до www.domain.com/Faq/css/style.css, что не правильно.

Решение состоит в том, чтобы всегда использовать абсолютные пути:

$this->headLink()->appendStylesheet(BASE_URL . '/css/style.css');
$this->headLink()->appendStylesheet(BASE_URL . '/css/header.css');
$this->headLink()->appendStylesheet(BASE_URL . '/css/footer.css');

(обратите внимание на косую черту перед css). Затем, если вы устанавливаете базовый URL, убедитесь, что он не содержит завершающий слеш, например, http://www.mydomain.com. Тогда все должно работать правильно.

...