Silex模板中的路径错误

Kan*_*ski 1 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');
Run Code Online (Sandbox Code Playgroud)

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

// 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;
        }

});
Run Code Online (Sandbox Code Playgroud)

模板内部的路径混乱,例如:现在图像路径变为:web/works/js/jquery.js404(未找到),而web/js/jquery.js图像变为:web/works/galeria相反web/galeria(如第一个示例中所示).

如何修复网址?

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

Ada*_*ney 7

Silex cookbook中,您可以添加过滤器以获取公共资产的正确URL,无论您在网站上的哪个路径.

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

这里的生产示例

$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;
}));
Run Code Online (Sandbox Code Playgroud)

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

现在您可以使用它:

{{ asset('js/jquery.js') }}
Run Code Online (Sandbox Code Playgroud)