我目前正在做一个项目,计划不同目的地之间的交通。因此,我使用Symfony 3.3。
我创建了一个表单,它在我的开发环境中很好地工作,但是在我的生产平台上崩溃了。
表单由主表单(transportFormType.php)和包含的子表单(truckFormType.php)组成,您可以看到它们都附在了附件中。该表单在TwigFile (_form.html.twig)中正确添加。
在我的开发环境中,在填写表单之后,我可以保存它,并将它保存到数据库中。在我的生产服务器上部署项目之后,我还可以看到常规的表单并填充它的内容,但是在单击“保存”之后什么都没有发生,我的prod日志也提到了缺少的列。
有人知道我的错吗?
谢谢!
日志消息:
request.CRITICAL: SQLSTATE23000:完整性约束违反: 1048列‘内容’不能为空“在/.第112行{“异常”:“对象(Doctrine\DBAL\Exception\NotNullConstraintViolationException(code: 0”:执行“插入卡车类型、承运人、预订、内容、loading_time、license_plate、driver_name、签出、结帐、delivery_time、shift_start、驾驶时间、netto_steering_time_in_seconds、gros_drive_time_in_seconds_with_driver、check_out_information、优先级、transport_id、booker_id、check_in_by_id、check_out_by_id、loading_place_id)值(?、)‘对于params \"7,5t Koffer\",空,0,1,空,1:n\n\nSQLSTATE23000 23000:完整性约束违反: 1048列'content‘在/www/htdocs/w01759ff/www/disponentMe/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:112,上不能为空原则\DBAL\Driver\PDOException(代码: 23000):/.../lib/Doctrine/DBAL/Driver/PDOStatement.php:107,PDOException(代码: 23000):SQLSTATE23000:完整性约束违反: 1048列'content‘不能为空(代码:23000):SQLSTATE23000:完整性约束违反: 1048列'content’在/www/.../lib/Doctrine/DBAL/Driver/PDOStatement.php:105)"}上不能为空[]
TransportFomType.php:
$builder
->add('origin', EntityType::class, [
'class' => 'AppBundle\Entity\Address',
'choice_label' => 'station',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('a')
->where('a.isStation = true');
},
'attr' => [
'onchange' => "filterLoadingPlaces()"
],
])
->add('destination', AddressFormType::class)
->add('trucks', CollectionType::class, [
'entry_type' => TruckFormType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
]);TruckFormType.php:
$builder
->add('content')
->add('loadingPlace', EntityType::class, [
'class' => 'AppBundle\Entity\LoadingPlace',
'choice_label' => 'name',
'choice_attr' => function(LoadingPlace $place, $key, $index) {
return ['station' => $place->getAddress()->getId()];
},
'attr' => [
'class' => "loadingPlace",
]
])
->add('trucktype', ChoiceType::class, [
'choices' => [
'7,5t Koffer' => '7,5t Koffer',
'Sattel mit Plane' => 'Sattel mit Plane',
'Sattel mit Koffer' => 'Sattel mit Koffer',
'Sattel mit Plattform' => 'Sattel mit Plattform',
]
])
->add('deliveryTime', DateTimeType::class, [
'widget' => 'single_text',
'html5' => false,
'attr' => ['class' => 'js-datepicker'],
'format' => 'dd.MM.yyyy hh:mm',
])
;_form.html.twig:
{% import _self as formMacros %}
{% macro printTruckRow(truckFormType) %}
<div class="js-truck-item row" style="padding-bottom: 10px;">
<div>{{ form_widget(truckFormType.content) }}</div>
<div>{{ form_widget(truckFormType.loadingPlace) }}</div>
<div>{{ form_widget(truckFormType.trucktype) }}</div>
<div>{{ form_widget(truckFormType.deliveryTime) }}</div>
<div class="removeTruck"><a class="js-remove-truck btn btn-danger pull-right" href="#"><i class="fa fa-close"></i></a></div>
</div>
{% endmacro %}
{{ form_start(transportForm) }}
{{ form_errors(transportForm) }}
<div class="container-fluid">
<div class="row">
<div>
{{ form_row(transportForm.origin) }}
</div>
<div>
{{ form_row(transportForm.destination.station) }}
</div>
<div>
{{ form_row(transportForm.destination.street) }}
</div>
<div>
{{ form_row(transportForm.destination.postalnumber) }}
</div>
<div>
{{ form_row(transportForm.destination.city) }}
</div>
<div>
{{ form_row(transportForm.destination.country) }}
</div>
</div>
<div class="js-trucks-wrapper" data-prototype="{{ formMacros.printTruckRow(transportForm.trucks.vars.prototype)|e('html_attr') }}" data-index="{{ transportForm.trucks|length }}">
<div>Content</div>
<div>Loadingdock</div>
<div>Trucktype</div>
<div>DeliveryTime</div>
<div></div>
{% for truck in transportForm.trucks %}
{{ formMacros.printTruckRow(truck) }}
{% endfor %}
<a href="#" class="btn btn-success js-add-truck" style="margin-top: 10px"><i class="fa fa-plus"></i> {{ 'transport.button.addTruck'|trans() }}</a>
</div>
<button type="submit" class="btn btn-primary" formnovalidate>{{ 'transport.button.save'|trans() }}</button>
{{ form_end(transportForm) }}
</div>控制器功能:
public function newAction(Request $request) {
$transport = new Transport();
$truck = new Truck();
$transport->addTruck($truck);
$transport->setOrderer($this->get('security.token_storage')->getToken()->getUser());
$transport->setIsReturn(false);
$form = $this->createForm(TransportFormType::class, $transport);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($form->getData());
$em->flush();
$this->addFlash('success','Transport created.');
return $this->redirectToRoute('open_transport_list');
}
return $this->render(':transport:newTransport.html.twig', ['transportForm' => $form->createView()]);
}和卡车的实体类(没有getter和setter):
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\TruckRepository")
* @ORM\Table(name="truck")
*/
class Truck
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Transport", inversedBy="trucks")
* @ORM\JoinColumn()
*/
private $transport;
/**
* @ORM\ManyToOne(targetEntity="User")
*/
private $booker;
/**
* @ORM\ManyToOne(targetEntity="User")
*/
private $checkInBy;
/**
* @ORM\ManyToOne(targetEntity="User")
*/
private $checkOutBy;
/**
* @ORM\Column(type="string")
*/
private $trucktype;
/**
* @ORM\Column(type="string",nullable=true)
*/
private $carrier;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $booked;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $content;
/**
* @ORM\ManyToOne(targetEntity="LoadingPlace")
*/
private $loadingPlace;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $loadingTime;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $licensePlate;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $driverName;
/**
* @ORM\Column(type="datetime",nullable=true)
*/
private $checkin;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $checkout;
/**
* TODO Sicherstellen, dass Datum neuer als NOW() ist.
* @ORM\Column(type="datetime")
*/
private $deliveryTime;
/**
* TODO Sicherstellen, dass Datum älter als NOW() ist.
* @ORM\Column(type="datetime", nullable=true)
*/
private $shiftStart;
/**
* Lenkzeit in Minuten
* @ORM\Column(type="integer", nullable=true)
* @Assert\Range(min=0, minMessage="Negative Lenkzeiten gibt es nicht.")
* @Assert\Range(max=36000, maxMessage="Mehr als 10 Stunden Lenkzeiten sind nicht erlaubt." )
*/
private $steeringtime;
/**
* @ORM\Column(type="integer",nullable=true)
*/
private $nettoSteeringTimeInSeconds;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $grosDriveTimeInSecondsWithDriver;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $checkOutInformation;
/**
* @ORM\Column(type="integer")
*/
private $priority = 0;发布于 2017-11-29 10:34:35
$em->persist($form->getData());我觉得应该是
$em->persist($transport);发布于 2017-11-29 11:50:13
谢谢你的贡献。没有任何改变,从我身边,坚持现在也工作在生产机器。我认为这必须是任何类型的缓存,但老实说,我不知道为什么这是可能的:
我已经从我的git存储库中建立了全新的生产环境,并创建了所有的数据库和模式结构,也是新的。
所以这个问题就从我这边解决了。
https://stackoverflow.com/questions/47533447
复制相似问题