如何调试"警告:preg_match()期望参数2是字符串,对象给定"在Symfony / Twig加载页面?

时间:2016-12-08 00:25:10

标签: symfony twig

UtilisateurType.php

<?php

namespace biblioBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;

class UtilisateurType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('ncin')
        ->add('pseudo')
        ->add('motdepasse')
        ->add('idpersonne', EntityType::class, array(
                     'class' => 'biblioBundle:Personne',
                     'choice_label' => function ($category) {
                      return $category->getIdpersonne();
                                                             } ))
        ->getForm();

}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'biblioBundle\Entity\Utilisateur'
    ));
}
}

Utilisateur.php

<?php

  namespace biblioBundle\Entity;

  use Doctrine\ORM\Mapping as ORM;

  /**
   * Utilisateur
   *
   * @ORM\Table(name="utilisateur", indexes={@ORM\Index(name="AK_NCIN",       columns={"NCIN"})})
   * @ORM\Entity
   */
  class Utilisateur
  {
/**
 * @var string
 *
 * @ORM\Column(name="NCIN", type="string", length=8, nullable=false)
 */
private $ncin;

/**
 * @var string
 *
 * @ORM\Column(name="Pseudo", type="string", length=100, nullable=false)
 */
private $pseudo;

/**
 * @var string
 *
 * @ORM\Column(name="MotDePasse", type="string", length=100, nullable=false)
 */
private $motdepasse;

/**
 * @var \biblioBundle\Entity\Personne
 *
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="NONE")
 * @ORM\OneToOne(targetEntity="biblioBundle\Entity\Personne")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="idPersonne", referencedColumnName="idPersonne")
 * })
 */
private $idpersonne;



/**
 * Set ncin
 *
 * @param string $ncin
 * @return Utilisateur
 */
public function setNcin($ncin)
{
    $this->ncin = $ncin;

    return $this;
}

/**
 * Get ncin
 *
 * @return string 
 */
public function getNcin()
{
    return $this->ncin;
}

/**
 * Set pseudo
 *
 * @param string $pseudo
 * @return Utilisateur
 */
public function setPseudo($pseudo)
{
    $this->pseudo = $pseudo;

    return $this;
}

/**
 * Get pseudo
 *
 * @return string 
 */
public function getPseudo()
{
    return $this->pseudo;
}

/**
 * Set motdepasse
 *
 * @param string $motdepasse
 * @return Utilisateur
 */
public function setMotdepasse($motdepasse)
{
    $this->motdepasse = $motdepasse;

    return $this;
}

/**
 * Get motdepasse
 *
 * @return string 
 */
public function getMotdepasse()
{
    return $this->motdepasse;
}

/**
 * Set idpersonne
 *
 * @param \biblioBundle\Entity\Personne $idpersonne
 * @return Utilisateur
 */
public function setIdpersonne(\biblioBundle\Entity\Personne $idpersonne)
{
    $this->idpersonne = $idpersonne;

    return $this;
}

/**
 * Get idpersonne
 *
 * @return \biblioBundle\Entity\Personne 
 */
public function getIdpersonne()
{
    return $this->idpersonne;
}
  }

UtilisateurController.php

<?php

  namespace biblioBundle\Controller;

  use Symfony\Component\HttpFoundation\Request;
  use Symfony\Bundle\FrameworkBundle\Controller\Controller;

  use biblioBundle\Entity\Utilisateur;
  use biblioBundle\Form\UtilisateurType;

  /**
   * Utilisateur controller.
   *
   */
  class UtilisateurController extends Controller
  {
/**
 * Lists all Utilisateur entities.
 *
 */
public function indexAction()
{
    $em = $this->getDoctrine()->getManager();

    $utilisateurs = $em->getRepository('biblioBundle:Utilisateur')->findAll();

    return $this->render('utilisateur/index.html.twig', array(
        'utilisateurs' => $utilisateurs,
    ));
}

/**
 * Creates a new Utilisateur entity.
 *
 */
public function newAction(Request $request)
{
    $utilisateur = new Utilisateur();
    $form = $this->createForm('biblioBundle\Form\UtilisateurType', $utilisateur);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($utilisateur);
        $em->flush();

        return $this->redirectToRoute('utilisateur_show', array('id' => $utilisateur->getIdpersonne()));
    }

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

/**
 * Finds and displays a Utilisateur entity.
 *
 */
public function showAction(Utilisateur $utilisateur)
{
    $deleteForm = $this->createDeleteForm($utilisateur);

    return $this->render('utilisateur/show.html.twig', array(
        'utilisateur' => $utilisateur,
        'delete_form' => $deleteForm->createView(),
    ));
}

/**
 * Displays a form to edit an existing Utilisateur entity.
 *
 */
public function editAction(Request $request, Utilisateur $utilisateur)
{
    $deleteForm = $this->createDeleteForm($utilisateur);
    $editForm = $this->createForm('biblioBundle\Form\UtilisateurType', $utilisateur);
    $editForm->handleRequest($request);

    if ($editForm->isSubmitted() && $editForm->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($utilisateur);
        $em->flush();

        return $this->redirectToRoute('utilisateur_edit', array('id' => $utilisateur->getIdpersonne()));
    }

    return $this->render('utilisateur/edit.html.twig', array(
        'utilisateur' => $utilisateur,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    ));
}

/**
 * Deletes a Utilisateur entity.
 *
 */
public function deleteAction(Request $request, Utilisateur $utilisateur)
{
    $form = $this->createDeleteForm($utilisateur);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->remove($utilisateur);
        $em->flush();
    }

    return $this->redirectToRoute('utilisateur_index');
}

/**
 * Creates a form to delete a Utilisateur entity.
 *
 * @param Utilisateur $utilisateur The Utilisateur entity
 *
 * @return \Symfony\Component\Form\Form The form
 */
private function createDeleteForm(Utilisateur $utilisateur)
{
    return $this->createFormBuilder()
        ->setAction($this->generateUrl('utilisateur_delete', array('id' => $utilisateur->getIdpersonne())))
        ->setMethod('DELETE')
        ->getForm()
    ;
}
  }

index.html.twig - &gt; utilisateur

{% extends 'base.html.twig' %}

{%block body%}     

Utilisateur list

<table>
    <thead>
        <tr>
            <th>Ncin</th>
            <th>Pseudo</th>
            <th>Motdepasse</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
    {% for utilisateur in utilisateurs %}
        <tr>
            <td><a href="{{ path('utilisateur_show', { 'id': utilisateur.idpersonne }) }}">{{ utilisateur.ncin }}</a></td>
            <td>{{ utilisateur.pseudo }}</td>
            <td>{{ utilisateur.motdepasse }}</td>
            <td>
                <ul>
                    <li>
                        <a href="{{ path('utilisateur_show', { 'id': utilisateur.idpersonne }) }}">show</a>
                    </li>
                    <li>
                        <a href="{{ path('utilisateur_edit', { 'id': utilisateur.idpersonne }) }}">edit</a>
                    </li>
                </ul>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>

<ul>
    <li>
        <a href="{{ path('utilisateur_new') }}">Create a new entry</a>
    </li>
</ul>
  {% endblock %}

每次我尝试加载页面时都会收到此错误。在我向数据库添加内容之前,它可以完美地工作,只要我添加,我就会遇到问题:

  

警告:preg_match()期望参数2为字符串,对象为

然后当我刷新时,我得到第二个错误。

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为你需要传递一个Personne的id,在你的情况下如果我没有弄错它会是这样的:

<a href="{{ path('utilisateur_show', { 'id': utilisateur.idpersonne.idpersonne }) }}">

另一方面,你可以转储对象来检查这样的值:

{{ dump(utilisateur.idpersonne) }}