Zend Framework - แบบฟอร์มและการตรวจสอบความถูกต้อง
Zend Framework มีองค์ประกอบแยกต่างหาก zend-formเพื่อเร่งการสร้างแบบฟอร์มและกระบวนการตรวจสอบความถูกต้อง มันเชื่อมต่อโมเดลและเลเยอร์มุมมอง มันมีชุดขององค์ประกอบฟอร์มเพื่อสร้างแบบฟอร์ม html ที่สมบูรณ์จากแบบจำลองที่กำหนดไว้ล่วงหน้าซึ่งเป็นไฟล์InputFilter คลาสเพื่อตรวจสอบความถูกต้องของโมเดลกับฟอร์มและอ็อพชันเพื่อผูกข้อมูลจากฟอร์มกับโมเดลและในทางกลับกัน
ติดตั้งส่วนประกอบของฟอร์ม
สามารถติดตั้งคอมโพเนนต์ฟอร์ม Zend โดยใช้ไฟล์ Composer คำสั่งตามที่ระบุด้านล่าง -
composer require zendframework/zend-form
กรอบรูปแบบ Zend มีองค์ประกอบย่อยสามส่วนในการจัดการแบบฟอร์ม ดังที่อธิบายไว้ด้านล่างโดยละเอียด -
Elements - ใช้เพื่อกำหนดตัวควบคุมอินพุต html เดียวที่แมปกับคุณสมบัติในโมเดล
Fieldset - ใช้เพื่อจัดกลุ่มองค์ประกอบและอื่น ๆ fieldset ในลักษณะที่ซ้อนกัน
Form - ใช้เพื่อสร้างรูปแบบ html และประกอบด้วยองค์ประกอบและชุดฟิลด์
แบบฟอร์ม Zend มักจะสร้างขึ้นภายใต้ module//src/Form ไดเรกทอรี
ตัวอย่าง
ตอนนี้ให้เราสร้างแบบฟอร์มง่ายๆเพื่อเพิ่ม bookลงในฐานข้อมูล ในการดำเนินการนี้เราควรปฏิบัติตามขั้นตอนต่อไปนี้ -
ขั้นตอนที่ 1: สร้าง BookForm
สร้าง“ BookForm.php” ภายใต้ไดเร็กทอรี * myapp / module / Tutorial / src / Form” เพิ่มการเปลี่ยนแปลงต่อไปนี้ในไฟล์ -
<?php
namespace Tutorial\Form;
use Zend\Form\Form;
class BookForm extends Form {
public function __construct($name = null) { parent::__construct('book'); $this->add(array(
'name' => 'id',
'type' => 'Hidden',
));
$this->add(array( 'name' => 'author', 'type' => 'Text', 'options' => array( 'label' => 'Author', ), )); $this->add(array(
'name' => 'title',
'type' => 'Text',
'options' => array(
'label' => 'Title',
),
));
$this->add(array(
'name' => 'submit',
'type' => 'Submit',
'attributes' => array(
'value' => 'Go',
'id' => 'submitbutton',
),
));
}
}
Form คลาสให้ไฟล์ add methodเพื่อแมปโมเดลและรายละเอียดแบบฟอร์มที่เกี่ยวข้อง เราได้สร้างไฟล์BookForm โดยการขยายไฟล์ Form ชั้นเรียนและเพิ่มรายละเอียดแบบฟอร์มสำหรับ Book แบบ.
ขั้นตอนที่ 2: อัปเดตโมเดลหนังสือ Book.php
อัปเดตโมเดล ‘Book’ พร้อมตัวกรองและการตรวจสอบตามที่ระบุด้านล่าง -
<?php
namespace Tutorial\Model;
use Zend\InputFilter\InputFilterInterface;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilter;
class Book implements InputFilterAwareInterface {
public $id;
public $author; public $title;
protected $inputFilter; public function setInputFilter(InputFilterInterface $inputFilter) {
throw new \Exception("Not used");
}
public function getInputFilter() {
if (!$this->inputFilter) { $inputFilter = new InputFilter();
$inputFilter->add(array( 'name' => 'id', 'required' => true, 'filters' => array( array('name' => 'Int'), ), )); $inputFilter->add(array(
'name' => 'author',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 100,
),
),
),
));
$inputFilter->add(array( 'name' => 'title', 'required' => true, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'StringLength', 'options' => array( 'encoding' => 'UTF-8', 'min' => 1, 'max' => 100, ), ), ), )); $this->inputFilter = $inputFilter; } return $this->inputFilter;
}
public function exchangeArray($data) { $this->id = (!empty($data['id'])) ? $data['id'] : null;
$this->author = (!empty($data['author'])) ? $data['author'] : null; $this->title = (!empty($data['title'])) ? $data['title'] : null;
}
}
แต่ละรุ่นควรใช้ InputFilterAwareInterface. InputFilterAwareInterface มีสองวิธีคือsetInputFilter() และ getInputFilter().
getInputFilter ใช้เพื่อรับรายละเอียดการตรวจสอบความถูกต้องของโมเดล Zend framework มีชุดตัวกรองและตัวตรวจสอบความถูกต้องมากมายเพื่อตรวจสอบความถูกต้องของแบบฟอร์ม ตัวกรองและตัวตรวจสอบความถูกต้องบางส่วนที่ใช้ในแบบจำลองหนังสือมีดังนี้ -
StripTags - ลบ HTML ที่ไม่ต้องการ
StringTrim - ลบพื้นที่สีขาวที่ไม่จำเป็น
StringLength validator - ตรวจสอบให้แน่ใจว่าผู้ใช้ไม่ได้ป้อนอักขระเกินจำนวนที่กำหนด
ขั้นตอนที่ 3: อัปเดตคลาส BookTable
รวมไฟล์ saveBook วิธีการเพิ่มหนังสือลงในฐานข้อมูล
BookTable.php
<?php
namespace Tutorial\Model;
use Zend\Db\TableGateway\TableGatewayInterface;
class BookTable {
protected $tableGateway; public function __construct(TableGatewayInterface $tableGateway) {
$this->tableGateway = $tableGateway;
}
public function fetchAll() {
$resultSet = $this->tableGateway->select();
return $resultSet; } public function getBook($id) {
$id = (int) $id;
$rowset = $this->tableGateway->select(array('id' => $id)); $row = $rowset->current(); if (!$row) {
throw new \Exception("Could not find row $id"); } return $row;
}
public function saveBook(Book $book) { $data = array (
'author' => $book->author, 'title' => $book->title,
);
$id = (int) $book->id;
if ($id == 0) { $this->tableGateway->insert($data); } else { if ($this->getBook($id)) { $this->tableGateway->update($data, array('id' => $id));
} else {
throw new \Exception('Book id does not exist');
}
}
}
}
ขั้นตอนที่ 4: อัปเดตคลาส TutorialController
เพิ่มการดำเนินการ addAction ใหม่ในตัวควบคุมบทช่วยสอน - myapp / module / Tutorial / src / Controller / TutorialController.php
public function addAction() {
$form = new BookForm(); $form->get('submit')->setValue('Add');
$request = $this->getRequest();
if ($request->isPost()) { $book = new Book();
$form->setInputFilter($book->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) { $book->exchangeArray($form->getData()); $this->bookTable->saveBook($book); // Redirect to list of Tutorial return $this->redirect()->toRoute('tutorial');
}
}
return array('form' => $form);
}
addAction วิธีการทำกระบวนการต่อไปนี้ -
รับวัตถุคำขอ
ตรวจสอบว่าเมธอด http ของคำขอเป็นไฟล์ post วิธี.
หากวิธีการ http ของคำขอไม่ใช่ postเพียงแค่แสดงเทมเพลต add.phtml
หากวิธีการ http ของคำขอไม่ใช่ postจากนั้นจะตั้งค่า inputfilterรับข้อมูลคำขอและตั้งค่าลงใน inputfiler
ตรวจสอบว่าแบบฟอร์มถูกต้องหรือไม่โดยใช้ isValid() วิธีการของคลาสแบบฟอร์ม
ถ้าแบบฟอร์มไม่ถูกต้องฟอร์มจะแสดงเทมเพลตอีกครั้ง add.phtml
หากแบบฟอร์มถูกต้องจะบันทึกหนังสือลงในฐานข้อมูลและเปลี่ยนเส้นทางไปที่โฮมเพจ
ขั้นตอนที่ 5: เพิ่มเทมเพลต add.phtml
สร้างเทมเพลต - add.phtml ใต้ myapp / module / Tutorial / view / tutorial / tutorial / add.phtml
Add.phtml
<?php
$title = 'Add new Book';
$this->headTitle($title);
?>
<h1><?php echo $this->escapeHtml($title); ?></h1>
<?php
if(!empty($form)) { $form->setAttribute('action', $this->url('tutorial', array('action' => 'add'))); $form->prepare();
echo $this->form()->openTag($form);
echo $this->formHidden($form->get('id'));
echo $this->formRow($form->get('author'))."<br>";
echo $this->formRow($form->get('title'))."<br>";
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();
}
ที่นี่เรากำลังสร้างแบบฟอร์มหนังสือโดยใช้ไฟล์ Form ตัวอย่าง, $form.
ขั้นตอนที่ 6: เรียกใช้แอปพลิเคชัน
ตอนนี้เราสามารถเรียกใช้แอปพลิเคชัน - http://localhost:8080/tutorial/add.
Form Page
Validate Error Page