0

次のような URL を生成するブログがあります。

/article-name
/my-article
/other-article

次に、次のような URL を使用するスレッドのフォーラムがあります。

/thread-name
/my-thread
/what-do-you-think

この状況を処理するルーターを作成するにはどうすればよいですか? これ以上 URL パラメーター ( など) を使用したくありません/blog/article-name and /forum/thread-name。最善の方法は、最初にブログ管理者にこの URL の記事があるかどうかを尋ね、ない場合はフォーラム管理者に尋ねることです。しかし、どのように?

4

4 に答える 4

2

ルーターは正規表現に基づいているため、直接行うことはできません。しかし、役立つかもしれない1つの解決策は、記事「some-name」があるかどうかをチェックするアクションへの1つのルートを指定し、存在する場合はArticleControllerにリダイレクト(または転送)し、存在しない場合はForumControllerにリダイレクト/転送することです。

于 2012-09-10T10:50:33.723 に答える
2

イベントリスナーを定義する必要があります。

services:
    kernel.listener.subdomain_listener:
        class: Path\To\YourListener\RequestListener
        scope: request
        tags:
           - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

次に、メソッドRequestListenerを定義onKernelRequest()し、そこにルート処理を配置する必要があります。

public function onKernelRequest(GetResponseEvent $event)
{
    if ($event->getRequestType() !== \Symfony\Component\HttpKernel\HttpKernel::MASTER_REQUEST) {
        return;
    }

    //... check if article exists, otherwise forward to blog controller
}

イベント リスナーの詳細については、次のドキュメントを参照してください。

http://symfony.com/doc/current/cookbook/service_container/event_listener.html
http://symfony.com/doc/2.0/cookbook/doctrine/event_listeners_subscribers.html

于 2012-09-10T10:51:43.927 に答える
1

連鎖ルーティングを可能にするバンドルがあります。

http://symfony-cmf.readthedocs.org/en/latest/reference/routing-extra.html

誰かがsymfony2のメール会話で私にそれを勧めました.

于 2012-09-10T20:08:13.140 に答える
1

コントローラーのリダイレクト機能を使用できます。例えば:

//BlogController.php

public function indexAction ($articleName) {
    // ...
    // If article $articleName exists
    if ($article = $repo->findOneByName($articleName) {
        // ...
    // else let the forum controller handle request
    } else {
        return $this->redirect($this->generateUrl('forum_index', array('articleName' => $articleName)));
    }
    // ...
}
于 2012-09-10T10:53:16.810 に答える