我一直在寻找这个4天,但找不到合适的解决方案。 我想让Symfony2在没有访问命令行或 httpd.conf 的情况下在共享主机上工作(没有办法设置虚拟主机)。我所能做的就是编辑 .htaccess 文件。在我的Web根目录中,我还有一些其他项目(比如论坛)。目录结构是:
public_html
|-forum
|-ox
'-Symfony
|-app
|-bin
<...>
我可以让它在dev ant prod环境中工作(路由工作正常),但它不加载任何资产(js,css,images)。错误日志中始终存在相同的内容:
request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /bundles/acmedemo/images/welcome-demo.gif" (uncaught exception)
如果资产不是从捆绑加载,而是在 twig 中加载,则会发生同样的情况:
{{ asset('css/main.css') }}
然后以
结束request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /css/main.css" (uncaught exception)
public_html中的 .htaccess 是:
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]
有关如何做正确的任何建议吗?
答案 0 :(得分:2)
有趣的问题。在挖掘代码后,我找到了以下解决方案。
使用以下代码在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
附加到资产网址参数。
总结asset
twig函数调用getUrl方法以确定网址。哪个由this类扩展。在templating.helper.assets服务创建期间,类的对象作为参数传递。幸运的是PathPackage类是configurable。所以解决方案是可能的:)。
答案 1 :(得分:1)
在本地执行php app/console assets:install ./web
,并上传远程共享托管的网络文件夹内容。