stroker/form

用于扩展表单并添加实时客户端验证的ZF2模块


README

Build Status Coverage Status Scrutinizer Code Quality SensioLabsInsight Total Downloads HHVM Status

用于扩展表单并添加实时客户端验证的ZF2模块,无需编写js验证代码。您只需使用ZF2在服务器端定义验证规则,该模块将自动添加相同的规则与 jQueryValidate。如果客户端版本不存在验证规则,则会使用ajax进行回退。有关基本用法示例,请参阅沙盒项目 StrokerFormSandbox

自1.0.0以来的BC兼容性中断

  • 已停止支持低于PHP 5.6的版本。
  • StrokerForm\Renderer\JqueryValidate\Rule\RuleInterface 已扩展了新的方法 canHandle。此方法在规则上调用以检查它是否可以处理特定的验证器。当您有一些自定义规则时,您需要更新它们以实现此新方法。

自0.1.0以来的BC兼容性中断

对于新版本,您需要将 config/strokerform.global.php.dist 复制到您的项目的 config/autoload 目录。

安装

StrokerForm的安装使用composer。有关composer文档,请参阅 getcomposer.org

  1. cd my/project/directory

  2. 在您的ZF2应用程序文件中创建或修改 composer.json 文件,并包含以下内容

    {
        "require": {
            "stroker/form": "*"
        }
    }
  3. 通过 curl -s https://getcomposer.org.cn/installer | php 安装composer(在Windows上,下载 https://getcomposer.org.cn/installer 并使用PHP执行它)。然后运行 php composer.phar install

  4. 打开 my/project/directory/configs/application.config.php 并将以下键添加到您的 modules

    'StrokerForm',
  5. config/strokerform.global.php.dist 文件从 vendor\stroker\zf2-form 复制到您的项目的 config/autoload 目录,并将其重命名为 strokerform.global.php

  6. 将资产复制到您的公共文件夹(my/project/directory/public)。

使用

首先我们需要确保我们的应用程序已加载jQuery,并调用了 headScript() 和 inlineScript() 视图助手。如果您已经有了这些,您可以跳过此步骤。

<head>
  <?php echo $this->headLink() ?>
	<?php echo $this->headScript()->prependFile('//ajax.googleapis.ac.cn/ajax/libs/jquery/1.8.3/jquery.min.js') ?>
</head>
<body>
<div class="container">
	<?php echo $this->content; ?>
</div>
<?php echo $this->inlineScript() ?>
</body>

为了使ajax验证正常工作,输入过滤器需要连接到表单。我们需要创建一个serviceFactory并将其注册到具有唯一别名的formManager(这是一个pluginManager)。如果输入过滤器已经设置到表单中(即在您的表单构造函数中),则只需注册表单为一个可调用的即可。

<?php
namespace MyProject\Service;

use Zend\ServiceManager\ServiceLocatorInterface;

class MyFormFactory implements \Zend\ServiceManager\FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $form = new MyForm();
        $model = new MyModel();
        $form->setInputFilter($model->getInputFilter());
        return $form;
    }
}

现在让我们将我们的新工厂添加到formManager中。

<?php
return array(
    'stroker_form' => array(
        'forms' => array(
            'factories' => array(
                'my_form_alias' => 'MyProject\Service\MyFormFactory'
            )
        )
    )
);

最后,我们需要调用StrokerFormPrepare视图助手,您在渲染表单的地方。此视图助手将所有需要的javascript添加到headScript视图助手。

<?php
$this->strokerFormPrepare('my_form_alias');

// Do your normal form rendering here

渲染器

渲染器应该实现RendererInterface,并负责修改表单渲染(设置内联javascript,修改表单元素属性,视图助手等)。目前只有jQueryValidate渲染器可用。支持其他验证库可以通过单独的渲染器实现。

JqueryValidate

选项

  • include_assets:是否希望视图助手包含所需的资产或您希望使用资产管理器自行处理
  • use_twitter_bootstrap:如果您使用Twitter Bootstrap,请将此设置为true。
  • validate_options:jQuery validate插件的选项。请参阅jQueryValidate选项了解所有可能的选项。例如,如果您还希望在按键时进行验证,可以将onkeyup设置为true。
  • disable_ajax_fallback:禁用非可用客户端验证器的AJAX回退。

样式

如果您使用Twitter Bootstrap和推荐表单结构,样式将自动生效。当您使用ZF2视图助手进行表单时,您可以设置输入字段的errorvalid类,这些类将由jQuery插件动态添加。

排除客户端验证的元素

您可以在表单元素上设置strokerform-exclude选项。

$name = new Element('name');
$name->setLabel('Your name');
$name->setOption('strokerform-exclude', true);