param はデフォルト ルートによって処理され、'args'
引数としてアクション メソッドに渡されます。
これを試して:
<?=$this->html->link($question->title, array('Questions::view', 'args' => array($question->id))); ?>
パラメータでルーティングするにはid
、 を介して id パラメータを探すルートを指定する必要があります{:id}
。「データベース オブジェクト ルート」セクションのデフォルトの routes.php ファイルを調べます。これには、完全を期すために以下にコピーするいくつかの例があります。
/**
* ### Database object routes
*
* The routes below are used primarily for accessing database objects, where `{:id}` corresponds to
* the primary key of the database object, and can be accessed in the controller as
* `$this->request->id`.
*
* If you're using a relational database, such as MySQL, SQLite or Postgres, where the primary key
* is an integer, uncomment the routes below to enable URLs like `/posts/edit/1138`,
* `/posts/view/1138.json`, etc.
*/
// Router::connect('/{:controller}/{:action}/{:id:\d+}.{:type}', array('id' => null));
// Router::connect('/{:controller}/{:action}/{:id:\d+}');
/**
* If you're using a document-oriented database, such as CouchDB or MongoDB, or another type of
* database which uses 24-character hexidecimal values as primary keys, uncomment the routes below.
*/
// Router::connect('/{:controller}/{:action}/{:id:[0-9a-f]{24}}.{:type}', array('id' => null));
// Router::connect('/{:controller}/{:action}/{:id:[0-9a-f]{24}}');
したがって、ID の形式に応じて、これら 2 つのセクションのいずれかのコメントを解除する必要があります。ID パラメーターで正規表現を使用して、ID ではない URL 引数と一致しないようにします。ちなみに、最初のルートは id のデフォルト値を設定してnull
いますが、ルートが null 値と一致するとは思わないため、正確には意味がありませんが、とにかく、それがデフォルト値を設定する方法ですパラメータ。
これを行う場合、コントローラー アクション メソッドは次のようにする必要があることに注意してください。
public function view() {
$id = $this->request->id;
// or an alternative that does the same thing
// $id = $this->request->get("params::id");
// ... etc ...
}
コントローラー アクション メソッドに引数として渡された URL の断片を取得する唯一の方法は、'args'
param を使用することです。