0

私はZF 1でモジュール構造を使用せずに開始したプロジェクトウィッチャを使用しました。ユーザー管理のためにモジュール構造 を配置する必要があります。ZF Zend_Controller_Router_Route_Moduleモジュールのデフォルトルートを使用して、そのまま使用する

私の問題 "default"ルートはコントローラ/:action /:idとモジュールルート
と一緒に行かなければなりません:module /:controller /:action /:id ZFからのデフォルトは1です。 id:
私の "ロジック"には:idフィールドが必要です。どうすればこの作業をすることができますか?私がしようとしてきた何

に来た:

protected function _initModuleAutoload() 
{ 
    $modelLoader = new Zend_Application_Module_Autoloader(
        array('namespace' => 'DM', 
         'basePath' => APPLICATION_PATH . '/modules/default') 
        , array('namespace' => 'UM', 
       'basePath' => APPLICATION_PATH . '/modules/users') 
    ); 

    $modelLoader->addResourceType('service', 'services', 'Service'); 
    $modelLoader->addResourceType('serviceplugin', 'services/plugins', 'Service_Plugin'); 

    return $modelLoader; 
} 

public function _initFrontController() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 

    $route1 = new Zend_Controller_Router_Route(
        ':module/:controller/:action/:id/', 
        array(
         'id' => '\d+' 
         , 'module' => 'default' 
         , 'controller' => 'index' 
         , 'action' => 'index' 
        ) 
    ); 

    $router->addRoute('default', $route1); 

    $front->addModuleDirectory(APPLICATION_PATH . "/modules/"); 

    $front 
      ->registerPlugin(new Far_Access_Plugin_Identity(), 1) 
      ->registerPlugin(new Far_Access_Plugin_Access(), 2) 
      ->throwExceptions(true) 
    ; 

    return $front; 
} 

はまた、代わりにデフォルトのユーザーのための第2の経路を作成しようとしましたが、うまくいきませんでした。

アイデア?私は間違って何をしていますか?

私がこのリンクを提供したとき、freenodeのircのヘルプは#zftalkチャンネルで与えられました。

Bittarman:または、単にだけで ますZend_Controller_Router_Routeに連鎖 Zend_Controller_Router_Route_Moduleですのインスタンスを追加します:その中にIDをcrash82:それは[\ D] +
Bittarmanなければならないので、IDに要件を追加、falseのようなidのデフォルト設定は です。
Bittarman:また、_initModuleAutoloadは、無意味 Bittarmanです:モジュールディレクトリにあなたの「デフォルト」モジュールを持つ、ちょっと 間違っ
Bittarmanです:あなたは_initFrontController
Bittarmanを持つことにより、作業 からfrontcontrollerリソースを停止しますので、 resources.frontControllerは動作しなくなります。

crash82:ハム...だから、多くの問題:(ので、私はちょうどアプリケーションディレクトリに 「デフォルト」モジュールを配置することができますし、他のモジュール は、モジュール/パスからロードし続けることができる

Bittarman:はい:)

crash82:あなたはより多くのそのような作成行けばそう、あなたは終わり:と、ブートストラップを持っている各モジュールは、独自のモジュールのリソースローダ
Bittarmanを提供: Bittarmanことをしようとするつもり各モジュールに2つずつ追加されています。
ビットタマン:あなたはどれくらい多くの人々が驚いているでしょうか。
Bittarman:S/THT /その/

+1

での現在のバージョンではデフォルトのルーティングを開始する可能性がありますZFはルーティング時に常にモジュールをテストします。デフォルトルートを使用している場合、モジュールを追加してもルーティングには影響しません。モジュールを最初のパラメータとして追加するだけで動作します。あなたが望むなら、 'Zend_Controller_Router_Route_Module'のコードをチェックしてください。 – RockyFord

+0

答えの一部であるはい。 :-)ありがとう –

答えて

0

私は、メソッドのカップルのいずれかを使用する私のスクリプトでURLにパラメータを渡す必要がある場合。ほとんどの簡単なことでは、新しいルートを作成する必要はありません。

  1. <a href="/music/index/album/id/<?php echo $variable->id ?>"><?php echo $track->album ?></a>。/id/album_id
  2. url()ビューヘルパーを使用:<?php echo $this->url(array('controller' => 'index', 'action' => 'index', 'id' => $variable->id)); ?>このヘルパーもモジュールを最初のパラメータとして使用します。
  3. コントローラーで同じことをするために、ビュースクリプトの最初の2つの作業は、コントローラー、モジュール、およびパラメーターがデフォルトでNULLの場合は、レイドレクターアクションヘルパー:$this->getHelper('Redirector')->gotoSimple('action'=> 'someAction', 'controller' => 'someController', 'module' => 'someModule', array('id' => $id);を使用できます。
  4. 、またはアクションユーティリティメソッド_forward()を使用することができます。$this->_forward($action, $controller, $module, array($params)) gotoSimple()と同じ構文です。

ルーティングのこの種を達成するために他の方法がありますが、私は残りの部分を見つけるためにあなたにそれを残しておきますが、あなたはAction Helpersutility methodsview helpers

+0

はい、私はid/1だけを指定したくない/ 1、私は怠惰だ... :) –

+0

あなたの変数、あなたの選択を指定する必要がありますあなたのやり方について – RockyFord

関連する問題