Symfony2 表单在提交时尝试连接到数据库
Symfony2 form trying to connect to DB on submission
我在 Symfony2 中有一个表单,用户可以在其中提交信用卡信息。该表单最初呈现得很好,但在提交时,我收到错误 "An exception occured in driver: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)".
我的控制器操作代码:
<?php
/**
* Class: PaymentController
*
* This controller is used to serve an iframe that contains a form for
* a person's credit card information.
*
* @see Controller
*/
class PaymentController extends Controller
{
/**
* indexAction
*
* Display a form for a user to enter their credit card information
*
* @param Request $request
*/
public function subscribeAction(Request $request)
{
$ccForm = new CreditCard();
$form = $this->createForm(new CreditCardType(), $ccForm);
//This function attempts to connect to DB on form submission
$form->handleRequest($request);
//Never gets here
if ($form->isValid()) {
}
//render view here (this part works fine)
}
}
我的问题是为什么 $form->handleRequest($request)
尝试连接到数据库?从堆栈跟踪来看,Validator classes 似乎调用了 Doctrine ORM,并且它正在尝试连接到那里的数据库。我不希望它这样做,我只是想将数据保存在内存中并使用它进行一些 API 调用。
我的实体 class 上没有元数据表明 Doctrine 应该尝试将它保存到数据库中。有什么想法吗?
编辑:
如果我像下面这样从 app/config/config.yml
中删除学说配置,那么我可以在 $form-isValid()
之后完美地访问我的表单对象
# Doctrine Configuration
#doctrine:
# dbal:
# driver: "%database_driver%"
# host: "%database_host%"
# port: "%database_port%"
# dbname: "%database_name%"
# user: "%database_user%"
# password: "%database_password%"
# charset: UTF8
# # if using pdo_sqlite as your database driver:
# # 1. add the path in parameters.yml
# # e.g. database_path: "%kernel.root_dir%/data/data.db3"
# # 2. Uncomment database_path in parameters.yml.dist
# # 3. Uncomment next line:
# # path: "%database_path%"
#
# orm:
# auto_generate_proxy_classes: false
# auto_mapping: false
如果您创建一个 CreditCardType()
对象,它将调用您的实体,包括用于检查该对象的原则和连接。您可以尝试像这样在控制器中创建手动表单:
public function subscribeAction(Request $request)
{
$form = $this->createCreditCardForm();
$form->handleRequest($request);
if ($form->isValid()) {
$entity = $form->getData();
// do what you want with the $entity
}
//render view here
}
private function createCreditCardForm()
{
return $this->createFormBuilder()->setAction($this->generateUrl('route_here_if_needed'))
->setMethod('GET')
->add('your_field', 'type')
->add('submit', 'submit')
->getForm()
;
}
如果你能成功做到这一点,那么你可以尝试修改你的类型而不创建 CreditCardType()
对象。
不,$form->handleRequest
没有显式连接到数据库 但 它 does fire form events。根据您 CreditCardType
上的子表单,其中之一可能正在连接到数据库。
我在 Symfony2 中有一个表单,用户可以在其中提交信用卡信息。该表单最初呈现得很好,但在提交时,我收到错误 "An exception occured in driver: SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO)".
我的控制器操作代码:
<?php
/**
* Class: PaymentController
*
* This controller is used to serve an iframe that contains a form for
* a person's credit card information.
*
* @see Controller
*/
class PaymentController extends Controller
{
/**
* indexAction
*
* Display a form for a user to enter their credit card information
*
* @param Request $request
*/
public function subscribeAction(Request $request)
{
$ccForm = new CreditCard();
$form = $this->createForm(new CreditCardType(), $ccForm);
//This function attempts to connect to DB on form submission
$form->handleRequest($request);
//Never gets here
if ($form->isValid()) {
}
//render view here (this part works fine)
}
}
我的问题是为什么 $form->handleRequest($request)
尝试连接到数据库?从堆栈跟踪来看,Validator classes 似乎调用了 Doctrine ORM,并且它正在尝试连接到那里的数据库。我不希望它这样做,我只是想将数据保存在内存中并使用它进行一些 API 调用。
我的实体 class 上没有元数据表明 Doctrine 应该尝试将它保存到数据库中。有什么想法吗?
编辑:
如果我像下面这样从 app/config/config.yml
中删除学说配置,那么我可以在 $form-isValid()
# Doctrine Configuration
#doctrine:
# dbal:
# driver: "%database_driver%"
# host: "%database_host%"
# port: "%database_port%"
# dbname: "%database_name%"
# user: "%database_user%"
# password: "%database_password%"
# charset: UTF8
# # if using pdo_sqlite as your database driver:
# # 1. add the path in parameters.yml
# # e.g. database_path: "%kernel.root_dir%/data/data.db3"
# # 2. Uncomment database_path in parameters.yml.dist
# # 3. Uncomment next line:
# # path: "%database_path%"
#
# orm:
# auto_generate_proxy_classes: false
# auto_mapping: false
如果您创建一个 CreditCardType()
对象,它将调用您的实体,包括用于检查该对象的原则和连接。您可以尝试像这样在控制器中创建手动表单:
public function subscribeAction(Request $request)
{
$form = $this->createCreditCardForm();
$form->handleRequest($request);
if ($form->isValid()) {
$entity = $form->getData();
// do what you want with the $entity
}
//render view here
}
private function createCreditCardForm()
{
return $this->createFormBuilder()->setAction($this->generateUrl('route_here_if_needed'))
->setMethod('GET')
->add('your_field', 'type')
->add('submit', 'submit')
->getForm()
;
}
如果你能成功做到这一点,那么你可以尝试修改你的类型而不创建 CreditCardType()
对象。
不,$form->handleRequest
没有显式连接到数据库 但 它 does fire form events。根据您 CreditCardType
上的子表单,其中之一可能正在连接到数据库。