7
if ($u = $this->generateUrl('_'.$specific.'_thanks'))
  return $this->redirect($u);
else
  return $this->redirect($this->generateUrl('_thanks'));

URLが存在する場合はリダイレクトしませ_specific_thanksん。では、URLが存在するかどうかを確認するにはどうすればよいですか?

私がそれをしたとき、私はこのエラーがありました:

ルート「_specific_thanks」は存在しません。

4

5 に答える 5

11

ルートが存在するかどうかを直接確認する方法はないと思います。ただし、ルーターサービスを介してルートの存在を探すことができます。

$router = $this->container->get('router');

次に、ルートコレクションを取得して、指定されたルートを呼び出すget()ことができます。ルートが存在しない場合はnullを返します。

$router->getRouteCollection()->get('_'. $specific. '_thanks');
于 2013-01-03T10:01:13.150 に答える
9

getRouteCollection()実行時に使用することは正しい解決策ではありません。このメソッドを実行するには、キャッシュを再構築する必要があります。これは、ルーティングキャッシュがリクエストごとに再構築されることを意味し、アプリが必要以上に遅くなります。

ルートが存在するかどうかを確認する場合は、try...catch構文を使用します。

use Symfony\Component\Routing\Exception\RouteNotFoundException;

try {
    dump($router->generate('some_route'));
} catch (RouteNotFoundException $e) {
    dump('Oh noes, route "some_route" doesn't exists!');
}
于 2016-07-02T14:41:29.480 に答える
1

次のようなことを試して、ルートがすべてのルートの配列に存在することを確認してください。

    $router = $this->get('router');

    if (array_key_exists('_'.$specific.'_thanks',$router->getRouteCollection->all())){
        return $this->redirect($this->generateUrl('_'.$specific.'_thanks'))
    } else {
        return $this->redirect($this->generateUrl('_thanks'));
    }
于 2013-01-03T10:03:19.033 に答える
0

キャストをチェックしましたか?そして、あなたはルートについて確信していますか?通常、ルートは

'WEBSITENAME_'。$specific.'_ thanks '

于 2013-01-03T10:09:44.423 に答える
-4

これを試して:

if ($u == $this->generateUrl('_'.$specific.'_thanks') )
于 2013-01-03T09:57:25.627 に答える