我正在尝试显示我的投资组合页面,这很好用:
// 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}'?
答案 0 :(得分:7)
从Silex cookbook,您可以添加过滤器以获取公共资源的正确网址,无论您在网站上的路径是什么。
在您注册了所有正在使用的服务提供商后添加此内容。
$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