Как заставить Symfony2 работать на виртуальном хостинге, используя только .htaccess - PullRequest
2 голосов
/ 19 февраля 2012

Я искал это 4 дня и не смог найти работающего решения. Я хочу, чтобы Symfony2 работал на виртуальном хостинге без доступа к командной строке или httpd.conf (нет способа настроить виртуальный хост). Все, что я могу сделать, это просто отредактировать .htaccess файлы. В моем корневом веб-каталоге у меня также есть несколько других проектов (например, форум). Структура каталогов:

public_html
 |-forum
 |-ox
 '-Symfony
    |-app
    |-bin
    <...>

Я могу заставить его работать как в среде разработки, так и при маршрутизации, НО он не загружает никаких ресурсов (js, css, images). В журнале ошибок всегда одно и то же:

request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /bundles/acmedemo/images/welcome-demo.gif" (uncaught exception)

То же самое происходит, если актив загружен не из связок , а также в веточку как:

{{ asset('css/main.css') }}

Тогда это заканчивается

request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /css/main.css" (uncaught exception)

Мой .htaccess в public_html:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# DEV ENVIRONMENT #
RewriteRule ^$ Symfony/web/app_dev.php [QSA]
RewriteRule ^(.*)$ Symfony/web/app_dev.php/$1 [QSA,L]

# PROD ENVIRONMENT #
#RewriteRule ^$ Symfony/web/app.php [QSA]
#RewriteRule ^(.*)$ Symfony/web/app.php/$1 [QSA,L]

Есть предложения, как все исправить?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Интересная проблема.Покопавшись в коде, я нашел следующее решение.

Создайте класс с именем PathPackage.php в папке src/Vendor/YourBundle/Templating/Asset со следующим кодом.

<?php

namespace Vendor\YourBundle\Templating\Asset;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Templating\Asset\PathPackage as BasePathPackage;

class PathPackage extends BasePathPackage
{
    /**
     * Constructor.
     *
     * @param Request $request The current request
     * @param string  $version The version
     * @param string  $format  The version format
     */
    public function __construct(Request $request, $version = null, $format = null)
    {
        parent::__construct("/Symfony", $version, $format);
    }
}

Затем в app/config/config.yml добавьте следующий параметр.

parameters:
  // ...
  templating.asset.path_package.class: Vendor\YourBundle\Templating\Asset\PathPackage

Теперь он добавит /Symfony к параметру url актива.

Для суммирования asset вызовов функции twig getUrl метод для определения URL.Который продлен на этот класс.Объект класса передается в качестве аргумента при templating.helper.assets создании сервиса.К счастью, класс PathPackage настраивается .Так что решение было возможно:).

1 голос
/ 20 февраля 2012

Делайте php app/console assets:install ./web локально и загружайте содержимое веб-папки на ваш удаленный общий хостинг.

...