protected function processCreate(sfWebRequest $request, ProjectFormCustom $form) { $form->bind($request->getParameter($form->getName())); if ($form->isValid()) { $values = $form->getValues(); // Slugify name, and check if slug generated does not already exist and generate a new one if needed if (empty($values['name_slug'])) { $slug = MiscUtils::slugify($values['name']); } else { $slug = $values['name_slug']; } $size = 1; while (Doctrine_Core::getTable("Project")->checkSlugForProject(NULL, $slug, true)) { $slug = MiscUtils::slugify($values['name']) . substr(microtime(), -$size); $size++; } // Create the project into database $projectObject = new Project(); $projectObject->setName($values['name']); $projectObject->setDescription($values['description']); $projectObject->setUserId($values['user_id']); $projectObject->setCreatedAt($values['created_at']); $projectObject->setStatus($values['status']); $projectObject->setSecurityLevel($values['security_level']); $projectObject->setNameSlug($slug); $projectObject->save(); // Get the project's id $projectId = $projectObject->getId(); // Create a new relationship between projects, products and project groups for each checked form's product foreach ($values['product'] as $product) { $ptpObject = new ProjectToProduct(); $ptpObject->setProjectGroupId($values['group']); $ptpObject->setProjectId($projectId); $ptpObject->setProductId($product); $ptpObject->save(); } if ($request->hasParameter('_save_and_add')) { $this->getUser()->setFlash('notice', $notice . ' You can add another one below.'); $this->redirect('@project_new'); } else { $this->getUser()->setFlash('notice', $notice); $this->redirect(array('sf_route' => 'project_edit', 'sf_subject' => $projectObject)); } } else { $this->getUser()->setFlash('error', 'The item has not been saved due to some errors.', false); } }