J'ai un problème avec l'addition dans mon application CRUD. Sur le contrôleur, la logique ne transmet pas la vérification $ formes-> isvalid (), mais le formulaire ne montre aucun message d'erreur.
J'ai essayé avec ceci (merci Sam): P>
class ProductController extends AbstractActionController { protected $productTable; protected $brandTable; public function indexAction() { return new ViewModel(array( 'products' => $this->getProductTable()->fetchAll(), )); } public function addAction() { $formManager = $this->serviceLocator->get('FormElementManager'); $form = $formManager->get('Administrador\Form\ProductForm'); $form->get('submit')->setValue('Add'); $request = $this->getRequest(); if ($request->isPost()) { $product = new Product(); $product->brand = new Brand(); $form->setInputFilter($product->getInputFilter()); $form->setData($request->getPost()); if ($form->isValid()) { $product->exchangeArray($form->getData()); $this->getProductTable()->saveProduct($product); // Redirect to list of products return $this->redirect()->toRoute('product'); } } return new ViewModel(array( 'form' => $form, )); } public function editAction() { $id = (int) $this->params()->fromRoute('id', 0); if (!$id) { return $this->redirect()->toRoute('product', array( 'action' => 'add' )); } // Get the Product with the specified id. An exception is thrown // if it cannot be found, in which case go to the index page. try { $product = $this->getProductTable()->getProduct($id); } catch (\Exception $ex) { return $this->redirect()->toRoute('product', array( 'action' => 'index' )); } $formManager = $this->serviceLocator->get('FormElementManager'); $form = $formManager->get('Administrador\Form\ProductForm'); $brand = $this->getBrandTable()->getBrand($product->brand); $product->brand = $brand; $form->bind($product); $form->get('submit')->setAttribute('value', 'Edit'); $request = $this->getRequest(); if ($request->isPost()) { $form->setInputFilter($product->getInputFilter()); $form->setData($request->getPost()); if ($form->isValid()) { $this->getProductTable()->saveProduct($form->getData()); // Redirect to list of products return $this->redirect()->toRoute('product'); } } return array( 'id' => $id, 'form' => $form, ); } public function deleteAction() { $id = (int) $this->params()->fromRoute('id', 0); if (!$id) { return $this->redirect()->toRoute('product'); } $request = $this->getRequest(); if ($request->isPost()) { $del = $request->getPost('del', 'No'); if ($del == 'Yes') { $id = (int) $request->getPost('id'); $this->getProductTable()->deleteProduct($id); } // Redirect to list of products return $this->redirect()->toRoute('product'); } return array( 'id' => $id, 'product' => $this->getProductTable()->getProduct($id) ); } public function getProductTable() { if (!$this->productTable) { $sm = $this->getServiceLocator(); $this->productTable = $sm->get('Administrador\Model\ProductTable'); } return $this->productTable; } public function getBrandTable() { if (!$this->brandTable) { $sm = $this->getServiceLocator(); $this->brandTable = $sm->get('Administrador\Model\BrandTable'); } return $this->brandTable; } }
3 Réponses :
Eh bien, j'ai eu la réponse: d
Voici comment l'addition doit être: p> apparemment, j'ai besoin de lier et de vider l'objet de produit sur le formulaire être capable de passer la validation isvalid (). Après cela, je récupère un objet de produit de la formulaire $> getdata (). P> p>
Vous pouvez également faire: $ Form-> setbindonvalidate (false); code> p>
Mon cas a été passé le mauvais filtre d'entrée. isvalid code> renvoie false, mais
$ Form-> getMessages () code> est vide. Formulaire
CommertionForm CODE> eu le suivant:
$form->setInputFilter(new \Application\Form\UserInputFilter($er));
Veuillez fournir des méthodes de contrôleur complètes impliquées.
Ok, je vais fournir l'action Ajout et Modifier le contrôleur.