Symfony 2: вызвать действие внутри контроллера

0

Я работаю над инфраструктурой symfony 2, и у меня есть проблема, вызвав пользовательское действие внутри контроллера. Я подключил свое приложение к базе данных (на xampp), и для каждой таблицы у меня есть класс Entity. Теперь я создаю CRUD-контроллер (с доктриной) для одного из этих объектов (GuestController.php), и мне нужно создать новое действие внутри него и вызвать его. это код действия:

 /**
 *
 * @Route("/", name="my_action")
 * 
 */
public function customAction() {
    return new Response('<html><body>Hello</body></html>');
}

Теперь, если я попытаюсь вызвать его с помощью этой ссылки

http://localhost/TEST/web/app_dev.php/guest/guest_search_by_saloon

я получаю

Unable to find Guest entity.

что не так?

Это полный класс контроллера

/**
 * Guest controller.
 *
 * @Route("/guest")
 */
class GuestController extends Controller {

/**
 * Lists all Guest entities.
 *
 * @Route("/", name="guest")
 * @Method("GET")
 * @Template()
 */
public function indexAction() {
    $em = $this->getDoctrine()->getManager();

    $entities = $em->getRepository('mainDbBundle:Guest')->findAll();

    return array(
        'entities' => $entities,
    );
}

/**
 * Creates a new Guest entity.
 *
 * @Route("/", name="guest_create")
 * @Method("POST")
 * @Template("mainDbBundle:Guest:new.html.twig")
 */
public function createAction(Request $request) {
    $entity = new Guest();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

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

        return $this->redirect($this->generateUrl('guest_show', array('id' => $entity->getId())));
    }

    return array(
        'entity' => $entity,
        'form' => $form->createView(),
    );
}

/**
 * Creates a form to create a Guest entity.
 *
 * @param Guest $entity The entity
 *
 * @return \Symfony\Component\Form\Form The form
 */
private function createCreateForm(Guest $entity) {
    $form = $this->createForm(new GuestType(), $entity, array(
        'action' => $this->generateUrl('guest_create'),
        'method' => 'POST',
    ));

    $form->add('submit', 'submit', array('label' => 'Create'));

    return $form;
}

/**
 * Displays a form to create a new Guest entity.
 *
 * @Route("/new", name="guest_new")
 * @Method("GET")
 * @Template()
 */
public function newAction() {
    $entity = new Guest();
    $form = $this->createCreateForm($entity);

    return array(
        'entity' => $entity,
        'form' => $form->createView(),
    );
}

/**
 * Finds and displays a Guest entity.
 *
 * @Route("/{id}", name="guest_show")
 * @Method("GET")
 * @Template()
 */
public function showAction($id) {
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('mainDbBundle:Guest')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Guest entity.');
    }

    $deleteForm = $this->createDeleteForm($id);

    return array(
        'entity' => $entity,
        'delete_form' => $deleteForm->createView(),
    );
}

/**
 * Displays a form to edit an existing Guest entity.
 *
 * @Route("/{id}/edit", name="guest_edit")
 * @Method("GET")
 * @Template()
 */
public function editAction($id) {
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('mainDbBundle:Guest')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Guest entity.');
    }

    $editForm = $this->createEditForm($entity);
    $deleteForm = $this->createDeleteForm($id);

    return array(
        'entity' => $entity,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    );
}

/**
 * Creates a form to edit a Guest entity.
 *
 * @param Guest $entity The entity
 *
 * @return \Symfony\Component\Form\Form The form
 */
private function createEditForm(Guest $entity) {
    $form = $this->createForm(new GuestType(), $entity, array(
        'action' => $this->generateUrl('guest_update', array('id' => $entity->getId())),
        'method' => 'PUT',
    ));

    $form->add('submit', 'submit', array('label' => 'Update'));

    return $form;
}

/**
 * Edits an existing Guest entity.
 *
 * @Route("/{id}", name="guest_update")
 * @Method("PUT")
 * @Template("mainDbBundle:Guest:edit.html.twig")
 */
public function updateAction(Request $request, $id) {
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('mainDbBundle:Guest')->find($id);

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find Guest entity.');
    }

    $deleteForm = $this->createDeleteForm($id);
    $editForm = $this->createEditForm($entity);
    $editForm->handleRequest($request);

    if ($editForm->isValid()) {
        $em->flush();

        return $this->redirect($this->generateUrl('guest_edit', array('id' => $id)));
    }

    return array(
        'entity' => $entity,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    );
}

/**
 * Deletes a Guest entity.
 *
 * @Route("/{id}", name="guest_delete")
 * @Method("DELETE")
 */
public function deleteAction(Request $request, $id) {
    $form = $this->createDeleteForm($id);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $entity = $em->getRepository('mainDbBundle:Guest')->find($id);

        if (!$entity) {
            throw $this->createNotFoundException('Unable to find Guest entity.');
        }

        $em->remove($entity);
        $em->flush();
    }

    return $this->redirect($this->generateUrl('guest'));
}

/**
 * Creates a form to delete a Guest entity by id.
 *
 * @param mixed $id The entity id
 *
 * @return \Symfony\Component\Form\Form The form
 */
private function createDeleteForm($id) {
    return $this->createFormBuilder()
                    ->setAction($this->generateUrl('guest_delete', array('id' => $id)))
                    ->setMethod('DELETE')
                    ->add('submit', 'submit', array('label' => 'Delete'))
                    ->getForm()
    ;
}

/**
 *
 * @Route("/", name="guest_search_by_saloon")
 * 
 */
public function getBySaloonAction() {
    return new Response('<html><body>Ciao !</body></html>');
}

}

это то, что говорит журнал:

NFO - Matched route "guest_show" (parameters: "_controller": "main\dbBundle\Controller\GuestController::showAction", "id": "guest_search_by_saloon", "_route": "guest_show") 
  • 0
    Вы должны показать нам весь контроллер. Из того, что я вижу, не похоже, что это ваш полный код. Или, по крайней мере, вы должны включить правильное действие (ваш маршрут не соответствует тому, что вы звоните с помощью браузера)
  • 0
    я отредактировал свой ответ с полным кодом контроллера
Показать ещё 7 комментариев
Теги:
doctrine2

1 ответ

0

Хорошо, я предполагаю, что в первую очередь вы не вызываете url, который вы показываете нам, потому что, как говорят журналы, showAction() вызывается вместо getBySaloonAction() и это, связанное с вашей ошибкой, совершенно разумно.

Если вы заметили ошибку журнала, вы передаете guest_search_by_saloon (string) как id (целое число), а запрос db запускается с $id = 'guest_search_by_saloon' и это приведет вас к ошибке.

  • 0
    так showAction вызывается автоматически? потому что я не знаю, почему это называется, с моей ссылкой я просто хочу вызвать getBySaloonAction
  • 0
    @giozh: может быть, вы что-то путаете с маршрутами. Может быть, где-то есть файл routing.yml?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню