Как бы я хранить значения в базе данных с помощью Symfony? - PullRequest
0 голосов
/ 12 декабря 2011

Я новичок в Symfony. Пройдя несколько онлайн-уроков и блогов, я пытаюсь создать простой проект.Я создал несколько модулей с командной консоли.и теперь я создал форму, используя простой HTML, и теперь мне нужно сохранить значения формы в базе данных.Я пытаюсь сделать это простым способом, например, я получаю массив sfWebRequest $request, а затем я сделал что-то вроде: -

$name = $request->getPostParameters()['name'];
$email = $request->getPostParameters()['email'];
$password = $request->getPostParameters()['password'];

однако я вполне могу хранить поля в базе данных, ноЯ немного смущен тем, как я себя чувствую.Есть ли другой лучший способ сделать то же самое.и если у меня есть одна форма с десятью полями, и я хочу сохранить их в 2 таблицах, как это можно сделать.

ЗДЕСЬ МОЙ КОД HTML

 <form id="formElem" name="formElem" action="/register/register" method="post">
                    <fieldset class="step">
                        <legend>Account</legend>
                        <p>
                            <label for="username">User name</label>
                            <input id="username" name="username" />
                        </p>
                        <p>
                            <label for="email">Email</label>
                            <input id="email" name="email" placeholder="info@tympanus.net" type="email" AUTOCOMPLETE=OFF />
                        </p>
                        <p>
                            <label for="password">Password</label>
                            <input id="password" name="password" type="password" AUTOCOMPLETE=OFF />
                        </p>
       ......
       ......

А вот мойФункция действия: -

public function executeRegister(sfWebRequest $request)
     {
       if ($request->isMethod('post'))
     echo $request->getParameter('password');exit;

         $this->redirect('user/login');
      }

Ответы [ 2 ]

1 голос
/ 12 декабря 2011

Из вашего вопроса не ясно, используете ли вы ORM или нет.

Вы говорите, что «я прекрасно могу хранить поля в базе данных», но я не уверен, как вы делаете это в настоящее время.

@ prodigitalson дал вам хорошее объяснение о том, как создать форму и получить эти поля для сохранения в вашей базе данных, но я хотел добавить, что вам нужна модель, чтобы это работало в первую очередь.

Если вы этого не сделаете, посмотрите на:

http://www.symfony -project.org / Jobeet / 1_4 / Propel / ен / 03

Прямой ответ на ваш вопрос: «Как мне хранить значения в базе данных с помощью Symfony?» это:

1) Определите схему для вашей модели (в schema.xml или schema.yml) 2) Сборка; который создаст ваши таблицы на основе вашей схемы. В случае с propel это ./symfony propel: build-all-load 3) Этот процесс сборки сгенерирует класс Form (который расширяет sfForm), о котором говорит prodigitalson. 4) Делайте то, что предлагали чудеса.

Подробнее об этом можно узнать здесь: http://www.symfony -project.org / forms / 1_4 / ru /

Вы также можете сделать это без использования sfForms. Ваше действие будет выглядеть примерно так:

(очень упрощенный пример):

public function executeSaveUser( sfWebRequest $request ){

  $full_name        = $request->getParameter( 'full_name', null );
  $email_address    = $request->getParameter( 'email_address', null );

  // Validate your input here.. e.g. make sure email is valid etc.

  // Create a new User 
    try{

        $user = new User();

        $user->setFullName( $full_name );
        $user->setEmailAddress( $email_address ) ;

        $user->save();

    }catch( Exception $e ){

        // handle error response here..

    }

  // Respond with JSON  
    if( !$request->isXmlHttpRequest() ){ // if this is an ajax call

        $this->setLayout(false);
        $this->getResponse()->setContentType('application/json');

        $response = array( 'user_id' => $user->getId() );

        $this->renderText( json_encode($response) );

        return sfView::NONE;

    } else {

        return sfView::SUCCESS; // display your template

    }

}

Надеюсь, это поможет.

1 голос
/ 12 декабря 2011

Вы должны использовать sfForm для обработки проверки формы.Если вы используете Doctrine для своих моделей, это будет еще проще, потому что вы можете сгенерировать все основы на основе определения схемы.

Независимо от использования sfForm ваше действие будет выглядеть примерно так:

public function executeSave(sfRequest $request)
{
   $this->form = new MyFormThatExtendsSfForm();
   if($request->isMethod('post')){
      $this->form->bind($request->getParameter($this->form->getName()));
      if($this->form->isValid()){
         // the array of values passed in the form
         $values = $this->form->getValues();

         // do your save logic here
         // if its a doctrine form this logic will look simply like
         // $this->form->save();

         // redirect to your success action
         $this->redirect($successUrl);
      }
   }
}
...