Silex模板中的路径错误

时间:2014-06-09 18:02:06

标签: symfony twig silex

我正在尝试显示我的投资组合页面,这很好用:

// Works
$app->get('/works', function () use ($app) {
        try {
       $yamlFile = file_get_contents(__DIR__.'/../data/work.web.yml');
       $works = Yaml::parse($yamlFile);
       return $app['twig']->render('works.twig',array(
        'pageTitle' => 'Works',
        'works' => $works,
        ));
           } catch (Exception $e) {
            return $e;
        }
})->bind('works');

但是在向路由器添加参数时

// Works
$app->get('/works/{folio}', function ($folio) use ($app) {

        try {
       $yamlFile = file_get_contents(__DIR__.'/../data/work.'.$folio.'.yml');
       $works = Yaml::parse($yamlFile);

       return $app['twig']->render('works.twig',array(
        'pageTitle' => 'Sample '. $folio,
        'works' => $works,
        ));
           } catch (Exception $e) {
            return $e;
        }

});

模板内部的路径搞砸了,例如: 现在图像路径变为:web/works/js/jquery.js 404(未找到)而不是web/js/jquery.js,图像变为:web/works/galeria而不是web/galeria(如第一个示例中所示)。

如何修复网址?

更新: 如果我更改为$app->get('/{folio}', function ($folio) use ($app) {,路径再次正常但是 为什么它能够正确地保持工作/ {folio}'?

2 个答案:

答案 0 :(得分:7)

Silex cookbook,您可以添加过滤器以获取公共资源的正确网址,无论您在网站上的路径是什么。

在您注册了所有正在使用的服务提供商后添加此内容。

Example in production here

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
    $twig->addFunction(new \Twig_SimpleFunction('asset', function ($asset) use ($app) {
        return sprintf('%s/%s',
            $app['request']->getBasePath(),
            ltrim($asset, '/')
        );
    }));

    return $twig;
}));

上面的例子与食谱上的例子不同。

现在您可以使用它:

{{ asset('js/jquery.js') }}

答案 1 :(得分:2)

解决方案:

在模板中,将相对路径替换为:

{{app.request.basepath}} / your / path / js