Symfony2 — отображение результатов с разными маршрутами показа

#symfony #search #show #routes

#symfony #Поиск #показать #маршруты

Вопрос:

У меня есть настройка веб-приложения с использованием разных категорий с отношением «один ко многим» для публикации.

Это нормально, и я показываю это как category1 , category2 , category3 префикс /{slug} .

Мой вопрос в том, что у меня есть результаты поиска, которые возвращают сообщения из разных категорий, которые используют разные showactions.

Как я могу настроить это так, чтобы после отображения результатов поиска я мог выбирать их, даже если они используют разные showactions? (Без использования универсального маршрута, например /{slug} , минус начальный префикс типа category .)

например, следующее не будет работать для сообщений в категории 2 или категории 3

 <h1><a href="{{ path('acme_demo_category1_show', { slug: post.slug }) }}">{{ post.title }}</a></h1>
  

showCategory1Action

 /**
 * @Route("/category1/{slug}", name="acme_demo_category1_show")
 * @Template("AcmeDemoBundle:Category:show.html.twig")
 */
public function showCategory1Action($slug)
{
    $article = $this->getDoctrine()->getRepository('AcmeDemoBundle:Category1')
        ->findOneBy(array(
            'slug' => $slug
        ));

    if (null === $article) {
        throw $this->createNotFoundException('Post was not found');
    }

    return array(
        'article' => $article,
    );
  

Ответ №1:

Обновление (см. Комментарии)

Итак, вам нужны URL-адреса, отражающие категорию сообщения, то есть: football/launch-world-cup.html Для этого вам необходимо иметь свойство slug для объекта Post, а также для объекта Category.

Ваша маршрутизация должна выглядеть примерно так

 acme_demo_show:
    pattern:  /{catslug}/{postslug}.html
    defaults: { _controller: AcmeDemoBundle:Default:show  }
  

showAction Затем метод вашего контроллера будет принимать 2 параметра, и в twig вы можете использовать

 <h1><a href="{{ path('acme_demo_show' , { catslug: post.category.slug, postslug: post.slug }) }}">{{ post.title }}</a></h1>
  

Сообщение о запуске slug world-cup, опубликованное в категории, содержащей slug football, приведет к www.mywebsite.com/football/world-cup-launch.html

Комментарии:

1. Итак, какой будет наилучшая практика? Использовать универсальный маршрут показа, который работает для всего? Я видел некоторые сайты, которые используют разные префиксы перед slug и хотели сделать что-то подобное.

2. Да. Эти веб-сайты используют два слизней, один для категории (т.е.: «новости»), один для сообщения (т.е.: the-post-title.html ). Что дало бы {{ path(‘acme_demo_show’, { postslug: post.slug, catslug: post.category . slug }) }} и в конечном итоге как /news/the-post-title.html . Если вам не нужны конкретные контроллеры для каждой категории, это правильный путь.

3. Я вижу, можете ли вы обновить свой ответ с помощью примера настройки, и я приму его. Итак, мне нужно будет добавить новое свойство в объект категории под названием category slug?

4. Возможно, вы также захотите взглянуть на расширение doctrine sluggable. это отличный способ генерировать slug из заголовка сообщения.

5. Вы имеете в виду тот, который из пакета stof?