0

可能であれば、いくつかのパラメーターに基づいて、新しいルートを動的に追加/登録できるかどうかを知りたいです。

ルートが次のようなものであることを知っています

newsdetail:
    url: /newsdetail/:id/:title
    class: sfDoctrineRoute
    options: { model: News, type object }
    param: { module: articles, action: articledetail }
    requirements: 
        id: \d+
        sf_method: [get]

しかし今、この種のルートをアクションに追加または前置する方法はありますか? 私の問題は、モジュールとアクションがサイトインスタンスに応じて変わる可能性があることです...

したがって、何かを実行するコンポーネントと 2 つの異なるモジュールを作成しました。module1 と module2 の両方にコンポーネントが含まれているとします。さまざまな理由で、これらすべてのルートをルーティング ファイルに登録することはできません。ここで、user1 には module1 へのルートが必要であり、user2 には module2 へのルートが必要です。そこで、アクションにルートを追加したいと思います。私はそれをよりよく説明したことを願っています

4

2 に答える 2

1

これは、動的ルートの構築に関する例です。

基本的:

  • イベントにリスナーを追加しますrouting.load_configuration
  • このリスナーは、データベースからルートを取得し、それらを現在のルーティング キャッシュの先頭に追加します

ここにきれいなスニペットがあります:

<?php

class frontendConfiguration extends sfApplicationConfiguration
{
  public function configure()
  {
    $this->dispatcher->connect('routing.load_configuration', array($this, 'listenToRoutingLoadConfigurationEvent'));
  }

  public function listenToRoutingLoadConfigurationEvent(sfEvent $event)
  { 
    $routing    = $event->getSubject(); 
    $products   = Doctrine::getTable('Product')->findAll();

    foreach ($products as $product)
    {
      if (0 == strlen($product->route))
      {
        continue;
      }

      $name  = 'product_'.$product->id;
      $route = new sfRoute(
        $product->route,
        array('module' => 'browse', 'action' => 'catalog', 'product' => $product->id),
        array('product' => '\d+'),
        array('extra_parameters_as_query_string' => false)
      );

      $routing->prependRoute($name, $route);
    }
  }
}

編集:

コンテキストを使用して、アクションからルーティングを取得できます。

$this->getContext()->getRouting()

したがって、アクションからルートを追加する場合は、次のようにします。

$route = new sfRoute(
  '/my-route',
  array('module' => 'browse', 'action' => 'catalog', 'product' => 456),
  array('product' => '\d+'),
  array('extra_parameters_as_query_string' => false)
);

$this->getContext()->getRouting()->prependRoute('my-route', $route);

とにかく、私はまだあなたがそれをどのように作りたいのか本当に理解していません.最後の編集の後でも.

于 2013-01-25T10:39:38.980 に答える
0

同じルーティングを使用して、資格情報に基づいてコンテンツを変更してみませんか?

于 2013-01-28T17:11:21.010 に答える