2

Zend Framework を使用したプロジェクトに取り組んでいます

ユーザーは、ウェブサイトにお知らせを投稿できます。

今のところ、次のような形式の URL を使用して相談できます (id = 60 のアナウンスの場合)。

mysite.com/announcement/view/id/60

より良いSEOのために私が望む結果は、次の形式になります

mysite.com/announcement/[CITY NAME]/[ZIPCODE]/[TYPE OF GOOD]/[STREET NAME]-[ID]

[VARIABLE] はすべてデータベースに保存され、簡単にアクセスできます。

ただし、効率の悪い解決策を思いついたので、URL の書き換えを行うさまざまな方法と、最も効率的な方法を知りたいと思います。

今のところ、ユーザーがデータベースにアナウンスを投稿するときに「難しい」方法で URL を生成し、ユーザーが接続したときに Bootstrap.php に新しいルートを作成することを考えました。これは問題ないように思えますが、発表のボリュームが大きくなると、非常に長い時間がかかる可能性があると思います。

私が考えた 2 番目の解決策は、.xml ファイルなどのファイルに URL を直接生成することでした。これは、ユーザーが接続したときにも読み込むことができますが、同じ問題が発生します。

これらのルートを効率的に作成する方法はありますか?

Apache の RewriteEngine のソリューションは、そのような必要な動作に対して非常に柔軟ではないようです ...

ちなみに発表量は10000を超える可能性が高いので、効率の問題はかなり大きいです。

4

2 に答える 2

2

最善の解決策はZend_Controller_Router_Route_Regexを使用することです

$route = new Zend_Controller_Router_Route_Regex(
 'announcement/(.*?)/(.*?)/(.*?)/(.*?)\-([0-9]*)',
  array(
    'announcement' => 'archive',
    'action' => 'view'
  ),
  array(
    1 => 'city_name',
    2 => 'zipcode',
    3 => 'type_of_good',
    4 => 'street_name',
    5 => 'id'
    )
);
$router->addRoute('archive', $route);

サブパターンを変数に割り当てます。ここで、1 => は最初のサブパターン、2 は 2 番目のサブパターンなどです。これらの変数は、アクション メソッドで使用できます。たとえば、必要に応じてREGEX$this->_getParam('zipcode');を調整できます。

于 2013-06-04T21:37:49.683 に答える
2

Zend フレームワークを使用すると、すべてのエンドポイントを割り当てる必要はありません。それはレイアウトだけです。

$route = new Zend_Controller_Router_Route(
            'announcement/:city_name/:zipcode/:type_of_good/:street_name/:id',
            array("controller"=>"accouncement", "action"=>"view-details"));

コントローラー内で、それらを次のように使用できます

$this->_request->getParam("zipcode");
于 2013-06-04T21:30:30.650 に答える