3

コントローラーへのルーティングをセットアップしていますが、404 または「silverstripe フレームワークの開始」ページが引き続き表示されます。

routes.yaml には次のものがあります。

---
Name: nzoaroutes
After: framework/routes#coreroutes
---
Director:
  rules:
    'view-meetings/$Action/$type': 'ViewMeeting_Controller'

私のコントローラーは次のようになります。

class ViewMeeting_Controller extends Controller {

  public static $allowed_actions = array('HospitalMeetings');

  public static $url_handlers = array(
        'view-meetings/$Action/$ID' => 'HospitalMeetings'
    );

  public function init() {
    parent::init();
    if(!Member::currentUser()) {
      return $this->httpError(403);
    }
  }

  /* View a list of Hospital meetings of a specified type for this user */
  public function HospitalMeetings(SS_HTTPRequest $request) {

    print_r($arguments, 1);

  }
}

そして、単純に $Content を出力するテンプレート (ViewMeeting.ss) を作成しましたが、サイト キャッシュをフラッシュして /view-meetings/HospitalMeetings/6?flush=1 にアクセスすると、

デフォルトの「Silverstripe フレームワークの開始」ページが表示されます

そこでルートを変更して古い URL にアクセスすると 404 が返されるため、routes.yaml のルーティングが機能していることはわかっていますが、リクエストで $Action が起動されないようです...

4

3 に答える 3

2

ルーティングに関する Silverstripe のドキュメントは、この点でまったく明確ではありませんが、$Action正しく解釈するには、routes.ymlファイル内でその前に二重スラッシュを使用する必要があります。

view-meetings//$Action/$type

ドキュメントによると、これは「シフトポイント」と呼ばれるものを設定します。これが正確に何を意味するのかは、ドキュメンテーションにも、ルールに対して URL を照合するソース コードにもあまり詳しく説明されていません。

于 2013-10-05T12:31:27.860 に答える
0

ここで推測を行っていますが、ドロップするとどうなりますか

public static $url_handlers = array(
    'view-meetings/$Action/$ID' => 'HospitalMeetings'
);

一部を変更し、Action メソッドを次のように変更します。

// View a list of Hospital meetings of a specified type for this
public function HospitalMeetings(SS_HTTPRequest $request) {

// Should print 8 if url is /view-meetings/HospitalMeetings/6
print_r($request->param('type');

}

于 2013-08-06T02:00:33.780 に答える