Вызов функции-члена getId () для NULL в Symfony 3 - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь получить значения атрибута, переданного в запросе, я пытался, я не могу, и он возвращает NULL, когда я делаю var_dump для атрибута.

СначалаЯ создал форму для ввода комментария, и когда мы нажмем кнопку «Подтвердить», на этой странице вам нужно будет вернуться на страницу, где у меня есть список комментариев для каждого врача, но я получаю только эту ошибку, которая говорит мне: «Позвоните».к функции-члену getId () на нуле ", потому что я не могу восстановить значение доктора

Контроллер создания комментариев

public function commentCreateAction(Request $request, Booking $bookings)
{

    $em = $this->getDoctrine()->getEntityManager();

    //  $medecin = $booking->getMedecin();
    $patient = $bookings->getPatient();

    $repoMedecin = $em->getRepository('DoctixMedecinBundle:Medecin');

    $medecin = $repoMedecin->findOneBy(array(
        'id' => $request->query->get("medecin")
    ));

    $bookings = $em->getRepository("DoctixFrontBundle:Booking")->findBy(array(
        "patient" => $patient
    ));

    $comments = new Comment();
    $comments->setMedecin($medecin);
    $comments->setPatient($patient);

    $form = $this->createForm('Doctix\PatientBundle\Form\CommentType', $comments);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $em = $this->getDoctrine()->getEntityManager();
        $em->persist($comments);
        $em->flush();

        return $this->render('DoctixPatientBundle:Patient:comments.html.twig', array(
            'id' => $comments->getMedecin()->getId(),
            'comments' => $comments, 
            'bookings' => $bookings
        ));

    }

    return $this->render('DoctixPatientBundle:Patient:create.html.twig', array(
        'comment' => $comment,
        'form'    => $form->createView()
    ));
}

Контроллер изсписок комментариев

public function commentsAction(Request $request){

    $em  = $this->getDoctrine()->getManager();
    $repoMedecin = $em->getRepository('DoctixMedecinBundle:Medecin');

    $medecin = $repoMedecin->findOneBy(array(
        'id' => $request->query->get("medecin")
    )); 

    $patient = $em->getRepository("DoctixPatientBundle:Patient")->findOneBy(array(
        'user' => $this->getUser(),
    ));

    $bookings = $em->getRepository("DoctixFrontBundle:Booking")->findBy(array(
        "patient" => $patient
    ));


    ***
    $comments = $em->getRepository("DoctixPatientBundle:Comment")
        ->getCommentsForDoc($medecin->getId());
    ***

    return $this->render('DoctixPatientBundle:Patient:comments.html.twig', array(
        'comments' => $comments,
        'bookings' => $bookings
    ));
}

Моя ошибка в этом контроллере.

чтобы иметь комментарии врача, у меня есть функция в моем хранилище

Репозиторий

public function getCommentsForDoc($docId, $approved = true)
{
    $qb = $this->createQueryBuilder('c')
        ->select('c')
        ->where('c.medecin = :medecin_id')
        ->addOrderBy('c.created')
        ->setParameter('medecin_id', $docId);

    if (false === is_null($approved))
        $qb->andWhere('c.approved = :approved')->setParameter('approved', $approved);

    return $qb->getQuery()->getResult();
}

Маршрутизация комментариевДействие и создание комментария

patient_comments:
    path:  /patient/medecin/comments
    defaults: { _controller: DoctixPatientBundle:Patient:comments}

patient_comments_create:
    path:  /patient/medecin/{id}/create
    defaults: { _controller: DoctixPatientBundle:Patient:commentCreate}

Просмотр комментариевДействие

{% for booking in bookings %}

    <div class="list_general" id="liste">
    <a href="#0" class="wish_bt"></a>
    <ul>
    <li>
    <figure>
        <img src="{{ vich_uploader_asset(booking.medecin.media, 'imageFile') }}"
            alt="{{ booking.medecin.media.imagename }}">
    </figure>

    <h4>
        Dr. {{ booking.medecin.user.prenom|capitalize }} {{ booking.medecin.user.nom|upper }} 
        <i class="pending">Pending</i>
    </h4>

    <a href="{{ path('patient_comments_create', {'id': booking.id}) }}?medecin={{ booking.medecin.id }}">
        Ajouter un Commentaire
    </a>

    <header>
        {% for comment in comments %}

        {% if comment is defined %}

        <label>Nom</label>
        <input type="text" class="form-control" readonly
            value=" {{ comment.patient.user.nom }} ">

        <label>Nom</label>
        <input type="text" class="form-control" readonly
            value=" {{ comment.patient.user.prenom }} ">

        <p> a commenté </p> 
        <p>
            <time datetime="{{ comment.created|date('c') }}"> 
                {{ comment.created|date('l, F j, Y') }}
            </time> 
        </p>
    </header>

    <label>My Comments</label>
    <input type="text" class="form-control" readonly
        value=" {{ comment.comment }} ">
    {% else %}
        <p> Il n'y a pas encore de commentaires à propos de ce médecin. Soyez le premier à commenter....</p>
    {% endif %}

    {% endfor %} 

{% endfor %}

мой макет, где есть вкладка Обратная связь и где я называю мойМаршрут

   <li class="nav-item" data-toggle="tooltip" data-placement="right" title="Mon profil">
                    <a class="nav-link link-white" href="{{ path('patient_comments')}}">
                        <i class="fa fa-fw fa-comments"></i>
                        <span class="nav-link-text">FeedBack</span>
                    </a>
                </li>

1 Ответ

0 голосов
/ 30 ноября 2018

Хотя по-прежнему не хватает информации о том, как именно вы получаете доступ к этому маршруту - то есть, почему вы сделали предположение, что идентификатор лекарства будет передан в параметрах запроса - мне кажется, что в вашем определении маршрута отсутствуетid:

patient_comments:
    path:  /patient/medecin/{id}/comments
    defaults: { _controller: DoctixPatientBundle:Patient:comments}

и

public function commentsAction(Request $request, $id)
{
    $em  = $this->getDoctrine()->getManager();
    $repoMedecin = $em->getRepository('DoctixMedecinBundle:Medecin');

    $medecin = $repoMedecin->find($id);
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...