Phalcon PHP发布链接与JavaScript确认对话框

Tij*_*jme 8 confirm post phalcon

我正在开发Phalcon PHP(版本1.3.4)的CRUD系统.

我的目标是创建一个链接(删除行),要求确认点击(JavaScript确认框),然后进入(请求类型POST)链接.

因此,假设用户点击"删除行"按钮.

  1. JavaScript确认"您确定要删除此行吗?"
  2. 用户点击"是"
  3. 网页对"/ users/delete/1"进行POST

我知道CakePHP有一个函数(FormHelper :: postLink())就是这样做的.

我想知道Phalcon PHP是否也有这样的功能.

yer*_*rgo 5

我看到了实现你想要的三种可能性.一种是在Volt模板中创建一个,第二种是在View中添加一个函数.第三和最接近 - 我理解的是你的愿望 - 是扩展Phalcons标签助手,这是我将在这里描述的部分.

Phalcon拥有自己的Tag助手,可以轻松创建一些元素.postLink不是那里实现的部分,但你可以很容易地实现它.在我的例子中,我有Application类的名称空间Tag扩展自\Phalcon\Tag.这是本教程的基础.

// Tag.php

namespace Application;

class Tag extends \Phalcon\Tag
{

    static public function postLink() {
        return '<strong>TEST TAG</strong>';
    }
}
Run Code Online (Sandbox Code Playgroud)

要强制Phalcon DI使用此类,必须通过手动声明它作为新的DI服务来覆盖引擎的标准声明:

// services.php
$di['tag'] = function() {
    return new \Application\Tag();
};
Run Code Online (Sandbox Code Playgroud)

您可以通过键入{{ tag.postLink() }}Volt模板或$this->tag->postLink()使用phtml模板来测试它是否正常工作.

现在,您可以Tag::postLink()使用您希望它生成的HTML和参数来填充您的方法:

namespace Application;

class Tag extends \Phalcon\Tag
{

    static $forms = [];

    static public function postLink($title, $url, $options = array()) {

        // random & unique form ID
        while ($randId = 'f_' . mt_rand(9000, 999999)) {
            if (!isset(self::$forms[$randId])) {
                self::$forms[$randId] = true;
                break;
            }
        }

        // dialog message
        $dialogMessage = isset($options['message']) && $options['message'] ?  $options['message'] : 'Are you sure you want to go on?';


        $html = <<<HTML

            <form action="{$url}" method="post" id="{$randId}">
                <!-- maybe not necessary part -->
                <input type="hidden" name="confirmed" value="1" />
            </form>
            <a href="#" onclick="javascript: confirm('{$dialogMessage}') ? document.forms['{$randId}'].submit() : false;">{$title}</a>

HTML;

        return $html;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以像这样运行它:

{{ tag.postLink('delete', '/users/delete/1') }}

{% set formOptions = ['message' : 'Are you sure you want to delete user Kialia Kuliambro?'] %}
{{ tag.postLink('delete', '/users/delete/1', formOptions) }}

{{ tag.postLink('delete', '/users/delete/1', ['message' : 'Are you sure you want to delete user Kialia Kuliambro?']) }}
Run Code Online (Sandbox Code Playgroud)

玩得开心:)