예제 #1
0
 /**
  * Install database screen.
  *
  * @param Symfony\Component\HttpFoundation\Request $request
  *
  * @return Symfony\Component\HttpFoundation\Response
  */
 public function databaseAction(Request $request)
 {
     $config = new YamlConfiguration();
     if (false === $config->load()) {
         $config->setConfiguration($config->getDefaultConfiguration());
     }
     $databaseForm = $this->buildDatabaseForm($request, $config);
     if ($databaseForm !== null) {
         $databaseForm->handleRequest($request);
         if ($databaseForm->isValid()) {
             try {
                 $config->testDoctrineConnexion($databaseForm->getData());
                 $tempConf = $config->getConfiguration();
                 foreach ($databaseForm->getData() as $key => $value) {
                     $tempConf['doctrine'][$key] = $value;
                 }
                 $config->setConfiguration($tempConf);
                 /*
                  * Test connexion
                  */
                 try {
                     $fixtures = new Fixtures($this->getService('em'), $request);
                     $fixtures->createFolders();
                     $config->writeConfiguration();
                     /*
                      * Need to clear configuration cache.
                      */
                     $configurationClearer = new ConfigurationCacheClearer();
                     $configurationClearer->clear();
                     /*
                      * Force redirect to avoid resending form when refreshing page
                      */
                     return $this->redirect($this->generateUrl('installDatabaseSchemaPage'));
                 } catch (\PDOException $e) {
                     $message = "";
                     if (strstr($e->getMessage(), 'SQLSTATE[')) {
                         preg_match('/SQLSTATE\\[(\\w+)\\] \\[(\\w+)\\] (.*)/', $e->getMessage(), $matches);
                         $message = $matches[3];
                     } else {
                         $message = $e->getMessage();
                     }
                     $this->assignation['error'] = true;
                     $this->assignation['errorMessage'] = ucfirst($message);
                 } catch (\Exception $e) {
                     $this->assignation['error'] = true;
                     $this->assignation['errorMessage'] = $e->getMessage() . PHP_EOL . $e->getTraceAsString();
                 }
             } catch (\Exception $e) {
                 $this->assignation['error'] = true;
                 $this->assignation['errorMessage'] = $e->getMessage();
             }
         }
         $this->assignation['databaseForm'] = $databaseForm->createView();
     }
     return $this->render('steps/database.html.twig', $this->assignation);
 }