0

プロジェクトにzendフレームワークを使用しています-クリーンリンクを使用してセットアップしようとしました-しかし、リンクが非常に長くなっているように見えることに気づき、この時点で組み込む方法があるかどうか疑問に思いますより小さなリンクを使用できる構造。

これが私のウェブサイトの例です。ディレクトリコントローラーには、idパラメーターを受け取るpersonアクションがあります。したがって、certinidのpersonを表示するためのリンクは次のようになります。

www.mywebsite.com/directory/person/id/1809

大丈夫なようですが、ユーザーID1809の名前がJohnSmithであると仮定して、リンクをより読みやすく、検索エンジンに適したものにするために現在取り組んでいます。

www.mywebsite.com/directory/person/John-Smith-1809

次のような本当に基本的なものはさらに良いでしょう:

www.mywebsite.com/John-Smith-1809

コントローラーやアクションについて言及せずにそれをどのように管理できるかはわかりませんが...どんなアイデアでも本当に役に立ちます...

4

3 に答える 3

3

ルートの使用方法については、ZFマニュアルをご覧ください。

基本的に、それを機能させるには次のようなものが必要です。

$route = new Zend_Controller_Router_Route_Regex(
    '(.+)-(\d+)',
    array(
        'controller' => 'directory',
        'action'     => 'person'
    ),
    array(
        1 => 'name',
        2 => 'id'
    ),
    '%s-%d'
);
$router->addRoute('directoryPerson', $route);

注:これがすぐに使用できるとは思わないでください。おそらくそれを変更する必要があります。しかし、あなたを正しい方向に導くはずです。

于 2010-02-22T09:25:36.410 に答える
2

前の回答のように、正規表現ルートを使用できますが、初心者にとっては、次のような「通常の」ルートを使用する方がおそらく簡単です。

http://yoursite.com/1234/John-Smith/

ブートストラップでは、次のことを行います。

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();

$router->addRoute('user', new Zend_Controller_Router_Route(
    ':user-id/:user-name/',
    array(
        'module' => 'user',
        'controller' => 'user',
        'action' => 'read'
    )
));

これにより、「user」というルートがルーターに追加されます。このルートの形式は/ user-id / user-nameであるため、/ 1234 /John-Smith/になります。ユーザーモジュールでユーザーコントローラーを探し、読み取りアクションに進みます。もちろん、必要に応じて、それを別のモジュール/コントローラー/アクションに変更できます。

次に、readAction()を持つUserモジュールにそのUser_UserControllerがあります。そのアクションでは、次のようにIDを取得できます。

$userId = $this->_getParam('user-id');

同様に、必要に応じて、名前を取得できます。

$userName = $this->_getParam('user-name');

ビュースクリプトでは、次のコマンドを使用してそのルートへのURLを生成できます。

<?php echo $this->url(array('user-id' => 1234, 'user-name' => 'John Smith'), 'user', true); ?>

'user'パラメータに注意してください。これは、前に定義した「user」ルートを使用するようにルータに指示します。

于 2010-02-24T10:33:27.367 に答える
0

apacheモジュールmod_rewriteを使用して、URLを書き換えることができます

http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteCond ###blah blah blah###
  RewriteRule ###blah blah blah###

</IfModule>
于 2010-02-22T09:20:09.153 に答える