如何在 php phalcon 框架中插入自定义内联 javascript 代码

How to insert custom inline javascript code in php phalcon framework

我想像这样在某些视图代码的末尾插入控制器

"<"script> setInterval(function(){ alert("Hello"); }, 3000);"<"/script>

如何操作?

在 PhalconPHP 中有多种方法可以做到这一点。根据您的需要,您可能只需:

$js='setInterval(function(){alert("Hello");},3000);';
$this->view->js=$js;

然后从视图中,你会做:

<script><?php echo $js; ?></script>

如果您需要从嵌套视图将 JavaScript 插入到 top-level index.phtml 中,完成此操作的方法是首先编辑您的 ControllerBase.php 并定义一个新的 collection:
$this->assets->collection('footer');

然后从您的 top-level index.phtml 文件中添加对 footer collection 的引用:

<body>
    <?php echo $this->getContent(); ?>
    <?php $this->assets->outputJs('footer'); ?>
</body>

如果您只想在文档中插入一个动态位置,您也可以使用 output('footer'),您可以插入任何类型的 HTML。请注意,collection 专门管理 CSS 和 JavaScript,因此是 outputJS 方法,但也可以处理用于其他目的的杂项代码。还有 outputCSSoutputInlineJsoutputInlineCssoutputInlineoutput。参见:
http://php-phalcon-docs.readthedocs.org/en/latest/api/Phalcon_Assets_Manager.html

然后编辑您的 ControllerBase.php 以将资产初始化为空 collection:
$this->assets->collection('footer');
(如果您跳过此步骤,如果您的 top-level index.phtml 文件试图输出 non-existent collection 的内容,您的代码将看到错误,如果您从不写入它,所以总是将它初始化为空 collection 所以它存在。)

最后,从你想使用的控制器,你会做:
$this->assets->collection('footer')->addInlineJs($js);
其中 $js 是您的内联 JavaScript,不包括脚本标签。
您还可以使用
处理外部 JavaScript 文件 ->addJs(...)。默认情况下,它将相对于您的应用程序目录,自动插入 /。如果您不喜欢此功能,您可以将第二个参数设置为 false 然后它将允许您指定自己的前导 / 或将您的资源指向另一个域。
至于您可以添加到 collection 的资产,请参阅: https://docs.phalconphp.com/en/latest/api/Phalcon_Assets_Collection.html

请注意,您还可以从视图中向 collection 添加资产,更改仍会显示在 top-most index.phtml 中。

还值得注意的是,您不需要实际使用 collections,您可以简单地使用没有 collection 的资产,但我认为 collections 更强大之处在于您可以为它们命名,因此在您需要管理不止一种 collection 数据时,还有另一个级别的分离。

就你想要完成的事情而言,如果你只是想给用户一个消息,这就是 Phalcon 的 flash 的目的,不要与 Adob​​e Flash 混淆用于播放视频。 Phalcon 的 flash 用于向用户闪烁消息,例如错误消息,或者您的表单提交成功的消息。参见:
https://docs.phalconphp.com/en/latest/reference/flash.html

如果您仍然对 flash 是什么感到困惑,请看它的输出演示,您可以在此处的屏幕截图中看到:https://docs.phalconphp.com/en/latest/_images/invo-2.png 那分别是 ->error(...)->notice(...) 的输出。 Flash 组件跟踪 collection 您想要向用户显示的消息。然后,一旦您准备好向用户显示它们,您就可以调用:
<?php echo $this->flash->output(); ?> 从你的角度来看。最好从您的 top-most 模板或始终包含在您的 top-most 模板中的模板(例如您的导航模板)进行此调用,以便您可以轻松地向用户显示消息。它对于调试也很有用。我建议使用 twitter bootstrap 来设置 flash 输出的样式。

一些您可能会觉得有用的示例应用程序:
https://github.com/phalcon/invo
https://github.com/phalcon/vokuro
https://github.com/phalcon/website
https://github.com/phalcon/forum

延伸阅读:
https://docs.phalconphp.com/en/latest/index.html