- I have a model call ArticleCategory, I have slug field must be unique. I set keepSnapshot equal true.
-
Here is my EditForm init code (Edit form of 1 category):
public function initialize(ArticleCategory $category) { // Slug $slug = (new Text('slug', [ 'class' => 'form-control', 'placeholder' => 'Slug' ]))->addValidator(new PresenceOf([ 'message' => 'Slug is required' ])); if($category->hasChanged('slug')){ $slug->addValidator(new Uniqueness([ 'message' => 'Slug exists', 'field' => 'slug', 'model' => 'App\Models\Entities\ArticleCategory' ])); } $slug->addFilter('trim'); $this->add($slug); // other element }
-
Controller code:
public function editAction($id) { // Get article category by id $articleCategory = $this->_articleCategoryService->getById($id); if (!$articleCategory) { return $this->show404(); } $editForm = new EditForm($articleCategory); // Post if ($this->request->isPost()) { $postData = $this->request->getPost(); if (!$editForm->isValid($postData)) { $editForm->setDefaultsFromObject($articleCategory); } else { // Form valid $editForm->bind($postData, $articleCategory); if ($articleCategory->save()) { $this->flash->success("Save success."); return $this->redirectToIndex(); } else { $this->flash->error("Save fail"); } } } $this->view->editForm = $editForm; }
- I try to change slug with an slug that exist in db, the category alway save success, not validate unique because the hasChanged return false. My question: How can I add uniqueness validator in EditForm class when slug field change ??? Thank alot !