使用Symfony2为AngularJS部分提供服务的最佳方法是什么?

时间:2013-10-31 03:48:03

标签: angularjs symfony

我不确定如何将Symfony的部分内容提供给Angular。

我在想我应该在Symfony中设置路由,然后让控制器输出文件?

我不确定如何简单地从控制器输出一个文件(即没有树枝的东西,没有真正渲染任何东西等等)并且这个方法会正确地缓存它吗?

例如,如果我想要角度下载partials / button.html,我应该设置一条路线,如:

partials:
    pattern:  /web/partials/{partial}
    defaults: { _controller: AcmeWebBundle:Partials:show, _format: html }

然后,在我的控制器中,

...
public function showAction() {
    return file_get_contents(' ... path to file ...');
}
....

这显然不起作用..我不知道如何在不经过树枝的情况下输出直接文件。或者也许我所有的部分应该只是twig文件(只是没有任何树枝的东西)?

1 个答案:

答案 0 :(得分:8)

如果您想要返回类似的内容,则需要将文件内容添加到响应正文中。

use Symfony\Component\HttpFoundation\Response;
...

public function showAction() {
    return new Response(file_get_contents(' ... path to file ...'),200);
}
...

但实际上你应该让你的网络服务器提供文件。我所做的是将我的部分放在网络目录下的子文件夹中:

web/
     partials/
     img/
     js/
     css/

然后只需要调用它们domain.com/parials/partialFileName.html,因为文件存在,symfonys重写默认情况下应该忽略它,只是提供文件。

另一种方法(提到here)是将文件放在bundle的Resources / public文件夹中,然后运行

php app/console assets:install --symlink

(其中web是实际目录web /)

这将在指向公共目录的web目录中生成符号链接。所以,如果你有:

Acme/DemoBundle/Resources/public/partials/myPartial.html

它将在以下地址提供:

http://www.mydomain.com/bundles/acmedemo/partials/myPartial.html