Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 子实体don';不要在symfony中显示_Php_Forms_Symfony - Fatal编程技术网

Php 子实体don';不要在symfony中显示

Php 子实体don';不要在symfony中显示,php,forms,symfony,Php,Forms,Symfony,我为一个noob问题提前道歉。我刚开始学习symfony,就遇到了障碍。 我创建了RequestForEstimate实体,它可能在RequestForestiMateTail实体下有多个关联记录。现在,我正在尝试创建一个表单,它不仅显示第一个实体的字段,还显示第二个实体的字段。Symfony不会返回任何错误,但不会呈现RequestForEstimateDetail实体中的“数量”字段。我使用以下教程创建此代码: 这是我的RequestForEstimate实体的一个示例: <?php

我为一个noob问题提前道歉。我刚开始学习symfony,就遇到了障碍。 我创建了RequestForEstimate实体,它可能在RequestForestiMateTail实体下有多个关联记录。现在,我正在尝试创建一个表单,它不仅显示第一个实体的字段,还显示第二个实体的字段。Symfony不会返回任何错误,但不会呈现RequestForEstimateDetail实体中的“数量”字段。我使用以下教程创建此代码:

这是我的RequestForEstimate实体的一个示例:

<?php

namespace SourcingBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * RequestForEstimate
 *
 * @ORM\Table(name="request_for_estimate")
 * @ORM\Entity(repositoryClass="SourcingBundle\Repository\RequestForEstimateRepository")
 */
class RequestForEstimate
{
    /**
     * @var int
     *
     * @ORM\Column(name="requestId", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */

    private $id;

    /**
     * @var int
     *
     * @ORM\Column(name="status", type="integer")
     */
    private $status;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="createTime", type="datetime")
     */
    private $createTime;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updateTime", type="datetime")
     */
    private $updateTime;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;
    /**
     * @ORM\OneToMany(targetEntity="RequestForEstimateDetail", mappedBy="detail", cascade={"persist", "remove"}, orphanRemoval=true)
     */
    private $details;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set status
     *
     * @param integer $status
     *
     * @return RequestForEstimate
     */
    public function setStatus($status)
    {
        $this->status = $status;

        return $this;
    }

    /**
     * Get status
     *
     * @return int
     */
    public function getStatus()
    {
        return $this->status;
    }

    /**
     * Set createTime
     *
     * @param \DateTime $createTime
     *
     * @return RequestForEstimate
     */
    public function setCreateTime($createTime)
    {
        $this->createTime = $createTime;

        return $this;
    }

    /**
     * Get createTime
     *
     * @return \DateTime
     */
    public function getCreateTime()
    {
        return $this->createTime;
    }

    /**
     * Set updateTime
     *
     * @param \DateTime $updateTime
     *
     * @return RequestForEstimate
     */
    public function setUpdateTime($updateTime)
    {
        $this->updateTime = $updateTime;

        return $this;
    }

    /**
     * Get updateTime
     *
     * @return \DateTime
     */
    public function getUpdateTime()
    {
        return $this->updateTime;
    }

    /**
     * Set name
     *
     * @param string $name
     *
     * @return RequestForEstimate
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->details = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Add detail
     *
     * @param \SourcingBundle\Entity\RequestForEstimateDetail $detail
     *
     * @return RequestForEstimate
     */
    public function addDetail(\SourcingBundle\Entity\RequestForEstimateDetail $detail)
    {
        $this->details[] = $detail;

        return $this;
    }

    /**
     * Remove detail
     *
     * @param \SourcingBundle\Entity\RequestForEstimateDetail $detail
     */
    public function removeDetail(\SourcingBundle\Entity\RequestForEstimateDetail $detail)
    {
        $this->details->removeElement($detail);
    }

    /**
     * Get details
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getDetails()
    {
        return $this->details;
    }
}

您需要在控制器类中创建一些
RequestForEstimate
实体,并将其添加到
RequestForEstimate
实体中。像这样:

class RequestForEstimateController extends Controller
{
    /**
     * @Route("sourcing/request-for-estimate", name="request_for_estimate")
     */
    public function addRequest(Request $request)
    {
        $RequestForEstimate = new RequestForEstimate();
        $detail1 = new RequestForEstimateDetail();
        $detail2 = new RequestForEstimateDetail();
        $RequestForEstimate->addDetail($detail1); 
        $RequestForEstimate->addDetail($detail2);            

        $form = $this->createForm(RequestForEstimateType::class, $RequestForEstimate);

        return $this->render('sourcing/requestforestimate/create.html.twig', array(
           'form' => $form->createView(),
        ));
    }
}

顺便说一句,你可以看这份文件,它很清楚=)

谢谢斯蒂芬,我昨晚就知道了,但谢谢你的确认。祝您有个美好的一天!
<?php

namespace SourcingBundle\Controller;

use SourcingBundle\Entity\RequestForEstimate;
use SourcingBundle\Form\Type\RequestForEstimateType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class RequestForEstimateController extends Controller
{
/**
     * @Route("sourcing/request-for-estimate", name="request_for_estimate")
     */
    public function addRequest(Request $request)
    {

        $RequestForEstimate = new RequestForEstimate();
        $form = $this->createForm(RequestForEstimateType::class, $RequestForEstimate);

        return $this->render('sourcing/requestforestimate/create.html.twig', array(
           'form' => $form->createView(),
        ));
    }
}
<?php
namespace SourcingBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;

class RequestForEstimateType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
        $builder->add('details', CollectionType::class, array(
            'entry_type' => RequestForEstimateDetailType::class
        ));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'SourcingBundle\Entity\RequestForEstimate',
        ));
    }
}
<?php
namespace SourcingBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class RequestForEstimateDetailType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('quantity',TextType::class);  
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'SourcingBundle\Entity\RequestForEstimateDetail',
        ));
    }
}
<div class="row">
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>Create Request For Estimate</h5>
            </div>
            <div class="ibox-content">
                {{ form_start(form) }}
                    {{ form_errors(form) }}

                    <div>
                        {{ form_widget(form) }}
                    </div>
                    {{ dump(form.details)}}

                    {% for detail in form.details %}
                        <li>{{ form_row(detail.quantity) }}</li>
                    {% endfor %}

                {{ form_end(form) }}
            </div>

        </div>
    </div>
</div>
class RequestForEstimateController extends Controller
{
    /**
     * @Route("sourcing/request-for-estimate", name="request_for_estimate")
     */
    public function addRequest(Request $request)
    {
        $RequestForEstimate = new RequestForEstimate();
        $detail1 = new RequestForEstimateDetail();
        $detail2 = new RequestForEstimateDetail();
        $RequestForEstimate->addDetail($detail1); 
        $RequestForEstimate->addDetail($detail2);            

        $form = $this->createForm(RequestForEstimateType::class, $RequestForEstimate);

        return $this->render('sourcing/requestforestimate/create.html.twig', array(
           'form' => $form->createView(),
        ));
    }
}