使用symfony 2将Javascript导入控制器
Javascript into Controller with symfony 2
我试图编码一些java脚本到一个控制器symfony 2。下面的代码是:
public function indexAction() {
echo "<script type='"text/javascript'">"
. "alert('" test message! '");"
. "</script>";
return $this->render('TestBundle:Default:GuiLogin.html.twig');
}
但不是这个:
echo "<script type='"text/javascript'">"
. "document.getElementById('"DivInfo'").style.display = 'block';"
. "</script>";
谁知道?
可以先在控制器中定义字符串,然后再在Twig模板中显示它:
h2控制器 public function indexAction() {
$js = '<script type="text/javascript">'.
'document.getElementById("DivInfo").style.display = "block";'.
'</script>';
return $this->render(
'TestBundle:Default:GuiLogin.html.twig',
array(
'js' => $js
)
);
}
<<h2>枝模板/h2>
public function indexAction() {
$js = '<script type="text/javascript">'.
'document.getElementById("DivInfo").style.display = "block";'.
'</script>';
return $this->render(
'TestBundle:Default:GuiLogin.html.twig',
array(
'js' => $js
)
);
}
将此代码放在</html>
标记之前:
<div id="DivInfo" style="display:none;">
DivInfo
</div>
{% if (js is defined) %}{{ js|raw }}{% endif %}
默认隐藏<div id="DivInfo">
,在启用Javascript时显示。
.js
文件或Twig HTML文件中更合乎逻辑。
<标题>更好的解决方案根据您的评论,您正在检查用户凭据,因此您可以在控制器中执行测试:
h2控制器 public function indexAction() {
$message = null;
if (check credentials)
{
$message = 'whatever';
}
return $this->render(
'TestBundle:Default:GuiLogin.html.twig',
array(
'message' => $message
)
);
}
<<h2>枝模板/h2><div id="DivInfo" style="display:none;">
DivInfo
</div>
{% if ((message is defined) and (message is not null)) %}
<div>{{ message }}</div>
{% endif %}
标题>public function indexAction() {
$message = null;
if (check credentials)
{
$message = 'whatever';
}
return $this->render(
'TestBundle:Default:GuiLogin.html.twig',
array(
'message' => $message
)
);
}
<div id="DivInfo" style="display:none;">
DivInfo
</div>
{% if ((message is defined) and (message is not null)) %}
<div>{{ message }}</div>
{% endif %}
好的。首先。你不应该做这样的事。你的控制器动作不应该echo/dump任何东西,除非你正在测试什么。
我的猜测是,第一个例子是有效的,因为alert函数不试图在dom中找到任何元素,浏览器仍然可以执行它。我也相信你的脚本是在呈现方法输出模板之前输出的。这意味着您的脚本在html之前输出,这首先是无效的。第二个例子需要已经加载的html (dom)来根据id查找元素。还可以考虑使用jQuery按id获取元素。当你需要等待加载时,jQuery可以通过选择器和"load"answers"ready"方法来实现。
jQuery - $(document)之间的区别是什么?Ready和$(window).load?
你至少应该把javascript移到模板中。如果必须的话,将javascript放入php变量中并将其传递给模板。然后使用模板引擎(如twig),尝试将该变量输出为html,可能尝试使用原始过滤器或其他一些可以做到的技巧。
相关文章:
- 在指令控制器中使用$attrs时出现问题
- 如何使用url加载程序在webpack中导入多个图像
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 如何将JSON数据导入我的ejs模板
- 从控制器返回后Ajax启动事件激发
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何将不可变的js导入angular 2(alpha)
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- 将数据从javascript文件导入VB.Net页面
- 角度控制器结构
- 如何在Jquery中发布后将值从视图返回到控制器
- 将值从html传递到AngularJS控制器
- Angular JS:使用 $http.get() 导入 JSON 数据 - 在控制器中工作,不在服务中 - 为什么
- 转换angular 1的问题.将x控制器导入TypeScript
- 使用symfony 2将Javascript导入控制器
- ES6导入和角度控制器的初始化顺序
- 导入模块中的Angular控制器无法工作
- 在angular.js控制器中导入jQuery