我将如何使用symfony将值存储在数据库中?

时间:2011-12-12 18:02:49

标签: symfony1 symfony-1.4

我是symfony的新手,经过几个在线教程和博客后,我正在尝试创建一个简单的项目。我用命令控制台创建了一些模块。现在我使用简单的html创建了一个表单,现在我需要将表单值存储在数据库中。我试图以一种简单的方式来做,就像我得到一个sfWebRequest $request的数组然后我做了类似的事情: -

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

但是我完全能够在数据库中存储字段,但我对我的工作方式感到有点困惑。有没有其他更好的方法来做同样的事情。如果我有一个包含十个字段的单个表单,并且我想将它们存储在两个表中,那怎么办呢。

这是我的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 个答案:

答案 0 :(得分:1)

您应该使用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);
      }
   }
}

答案 1 :(得分:1)

您的问题不清楚您是否使用ORM。

你说“我完全能够在数据库中存储字段”,但我不确定你目前是怎么做的。

@prodigitalson为您提供了有关如何创建表单并将这些字段保存到数据库的详细说明,但我想补充一点,您需要先为此工作模型。

如果您不这样做,请查看:

http://www.symfony-project.org/jobeet/1_4/Propel/en/03

直接回答你的问题:“我如何使用symfony在数据库中存储值?”是:

1)为模型定义模式(在schema.xml或schema.yml中) 2)建立;这将根据您的架构创建表。在推进的情况下,它是./symfony推进:build-all-load 3)这个构建过程将生成prodigitalson正在谈论的Form类(扩展sfForm)。 4)做什么prodigitalson建议。

有关详情,请点击此处:http://www.symfony-project.org/forms/1_4/en/

您也可以在不使用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

    }

}

希望有所帮助。