1

是否可以将 ZF2 形式用作独立组件?ZF1 可以做到这一点,但 ZF2 无法解决。

我可以创建一个表单和一个验证器,但不知道如何呈现表单:

$form = new AddressBookForm('address_book'); \\ extends Zend\Form\Form

if ($this->input->isPost()) {
    $validator = new AddressBookValidator(); \\ implements Zend\InputFilter\InputFilterAwareInterface
    $form->setInputFilter($validator->getInputFilter());
    $form->setData($this->input->getPost());

    if ($form->isValid()) {
        echo 'valid'; exit;
    }
}

// Render form somehow here???

我尝试创建一个视图,但不知道如何给它视图助手。谢谢。

4

5 回答 5

7

我有一个基本的解决方案,似乎可以完成这项工作

$zfView = new \Zend\View\Renderer\PhpRenderer();
$plugins = $zfView->getHelperPluginManager();
$config  = new Zend\Form\View\HelperConfig;
$config->configureServiceManager($plugins);

然后渲染表单

echo $zfView->form()->openTag($form);
echo $zfView->formRow($form->get('name'));
echo $zfView->formSubmit( $form->get('submit'));
echo $zfView->form()->closeTag();
于 2013-07-04T10:05:26.343 回答
5

查看此博客。

在视图文件中呈现表单

您可以简单地通过 zend 框架表单视图助手来完成。

$form = $this->form;
$form->prepare();
$this->form()->render($form);
于 2013-06-13T04:36:26.527 回答
3

@CodeMonkey 的方法很好,但代码不完整。我从他的答案和我用部分代码找到的其他答案中拼凑了一个工作示例。

<?php
    /*
     * @author Carl McDade
     * 
     * @since 2012-06-11
     * @version 0.2
     *
     */

namespace zftest;

$path = DOCROOT .'/_frameworks/zf/ZendFramework-2.2.2/library';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once($path . '/Zend/Loader/StandardAutoloader.php');

use Zend\Loader;
use Zend\Http\Request;
use Zend\Http\Client;


use Zend\Captcha;
use Zend\Form\Element;
use Zend\Form\Fieldset;
use Zend\Form\Form;
use Zend\Form\FormInterface;
use Zend\InputFilter\Input;
use Zend\InputFilter\InputFilter;
use Zend\Form\View\Helper;

use \Common;

class zftest{


function __construct()
{

    spl_autoload_register(array($this, '_zftest_autoload'));
}

 function _zftest_autoload($class)
 {
     //
     $loader = new \Zend\Loader\StandardAutoloader(array('autoregister_zf' => true));
     $loader->registerNamespaces(array('Zend'));

     // finally send namespaces and prefixes to the autoloader SPL
     $loader->register();
     return;
 }

function zftest()
{



    $uri = 'http://maps.google.com/maps/api/geocode/json';
    $address = urlencode('berlin');
    $sensor = 'false';

    $request = new Request();
    $request->setUri($uri);
    $request->setMethod('GET');

    $client = new Client($uri);
    $client->setRequest($request);
    $client->setParameterGet(array('sensor'=>$sensor,'address'=>$address));
    $response = $client->dispatch($request);        
    if ($response->isSuccess()) {
        print 'Your Request for:<pre>' . print_r($address, 1) . '</pre>';
        print '<pre>' . print_r($response->getBody(), 1) . '</pre>';

    }
}

function zfform()
{



    // Zend Framework 2 form example

    $name = new Element('name');
    $name->setLabel('Your name');
    $name->setAttributes(array(
        'type'  => 'text'
    ));

    $email = new Element\Email('email');
    $email->setLabel('Your email address');

    $subject = new Element('subject');
    $subject->setLabel('Subject');
    $subject->setAttributes(array(
        'type'  => 'text'
    ));

    $message = new Element\Textarea('message');
    $message->setLabel('Message');

    $captcha = new Element\Captcha('captcha');
    $captcha->setCaptcha(new Captcha\Dumb());
    $captcha->setLabel('Please verify you are human');

    $csrf = new Element\Csrf('security');

    $send = new Element('send');
    $send->setValue('Submit');
    $send->setAttributes(array(
        'type'  => 'submit'
    ));


    $form = new Form('contact');
    $form->add($name);
    $form->add($email);
    $form->add($subject);
    $form->add($message);
    $form->add($captcha);
    $form->add($csrf);
    $form->add($send);

    $nameInput = new Input('name');
    // configure input... and all others
    $inputFilter = new InputFilter();
    // attach all inputs

    $form->setInputFilter($inputFilter);

    $zfView = new \Zend\View\Renderer\PhpRenderer();
    $plugins = $zfView->getHelperPluginManager();
    $config  = new \Zend\Form\View\HelperConfig;
    $config->configureServiceManager($plugins);

    $output = $zfView->form()->openTag($form) . "\n";
    $output .= $zfView->formRow($form->get('name')) . "<br />\n";
    $output .= $zfView->formRow($form->get('captcha')) . "<br />\n";
    $output .= $zfView->formSubmit( $form->get('send')) . "<br />\n";
    $output .= $zfView->form()->closeTag() . "\n";

    echo $output;

}
}
?>
于 2014-02-14T12:45:30.307 回答
2

您可以使用Zend\Form\View\Helper视图助手在视图中呈现表单。示例:(查看上下文)

My Form: 
<?php echo $this->form()->openTag($this->form); ?>
<?php echo $this->formCollection($this->form); ?>
<?php echo $this->form()->closeTag($this->form); ?>

请注意,这$this->form$form分配给视图的变量。此外,视图助手总是在视图中可用,只要它们注册为invokables(对于内置助手总是如此)。

这将呈现<form ...> ... </form>标签内的所有元素。检查其他视图助手以获取更多信息。

此外,请参阅示例文档:http: //zf2.readthedocs.org/en/latest/modules/zend.form.quick-start.html 您可以使用它做更多的事情。

于 2012-09-24T10:51:10.387 回答
0

因为我没有设置 Service Manager 也没有 View Helper 方法,所以没有一个更简单的答案对我有帮助。

但匆忙这对我有用:

    $checkbox = new Element\Checkbox('checkbox');
    $checkbox->setLabel('Label');

    $checkbox->setCheckedValue("good");
    $checkbox->setUncheckedValue("bad");

    $form = new FormCheckbox();
    echo $form->render($checkbox);
于 2016-02-22T22:00:15.107 回答