Tij*_*jme 8 confirm post phalcon
我正在开发Phalcon PHP(版本1.3.4)的CRUD系统.
我的目标是创建一个链接(删除行),要求确认点击(JavaScript确认框),然后进入(请求类型POST)链接.
因此,假设用户点击"删除行"按钮.
我知道CakePHP有一个函数(FormHelper :: postLink())就是这样做的.
我想知道Phalcon PHP是否也有这样的功能.
我看到了实现你想要的三种可能性.一种是在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)
玩得开心:)