如何将一个对象从symfony控制器传递给angularjs,以便用它定义一个变量?



我最初需要用一些数据预先填充文本类型,但 Angularjs 不断将我的文本类型重置为空,即使我为其设置了值属性......那么,如何在页面加载时使用该值最初定义它?我需要使用用户电子邮件设置此关键字模型,将值添加为属性不起作用......

{{ form_row(form.keyword,  {'attr': {'ng-model': 'keyword'}} )}}

我的用户作为参数在控制器中发送。

public function addAction(User $user = null, Request $request)

这是我的Angularjs控制器,我希望实现的是最初使用用户电子邮件声明关键字。

//$scope.keyword = $user.email.

我现在正在做的是最初将其设置为空,这就是为什么它一直将 value 属性预设为空的原因。

在你的控制器中,你必须使用Symfony Serializer组件来序列化你的用户,然后将这个序列化的对象作为属性传递给你的树枝,并在javascript中反序列化它:

use SymfonyComponentSerializerSerializerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class DefaultController extends AbstractController {
...
public function addAction(User $user = null, Request $request, SerializerInterface $serializer){
...
$serializedUser = $serializer->serialize($user, 'json');
return $this->render('default/add_action.html.twig', [
'user' => $serializedUser,
'form' => $form->createView()
]);
}

请注意,如果用户实体中有实体关联,则可能会遇到循环引用问题。

在这种情况下,在序列化用户时,您必须使用序列化组(此处为doc(,如下所示:

$serializedUser = $serializer->serialize($user, 'json', ['groups' => ['add-action']]);

最后在你的树枝中,你必须在你的容器div 中做类似的事情:

<div id="form-container" ng-init="user = {{ user|e('html_attr') }}">

试试这个:

$scope.keyword = "{{ user.email }}";

由于twig和Angularjs使用相同的插值"{{}}"。您可以将 angularjs 配置为使用其他插值字符串,例如 "[[ ]]";

最新更新