1. I have a model call ArticleCategory, I have slug field must be unique. I set keepSnapshot equal true.
  2. 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
    }
    
  3. 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;
    }
    
  4. 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 !