データベースに既に保存されている値を編集するためのフォームが表示されています。値の 1 つは画像 (相対ファイル パスの形式) です。フォーム内にリンクを作成して、クリックすると画像が別のビューに表示されるようにしたいと考えています。
私の質問は、このビュー (編集ビュー) の画像フィールド データを、画像を個別に表示するビューのコントローラーに渡す最良の方法は何ですか?
私はむしろURL経由でそれをしたくありません。
編集しているレコードのIDを渡します。次に、コントローラーに、渡された$ idフィールドに基づいて、データベースから画像の相対パスをフェッチするview_image($ id)のような関数があります。
次に、view_image.ctpビューファイルで必要に応じて画像を表示できます。
アップデート:
まず第一に、問題は、なぜURLにIDを含めたくないのかということです。IDを公開することに不安を感じることもありますが、ほとんどの場合、問題はありません。
とにかく、正当なIDをURLに含める必要がないと仮定すると、他の方法は、URL(GET)ではなくPOSTを介してID(またはそのことについては画像パス)を渡すことです。 。あなたは違いを知っていますか?GETはURLにパラメーターを含めますが、POSTはパラメーターをリクエスト自体にラップするため、URLには含まれません。
これを行う例が必要な場合、CakePHPは、Bakeコンソールによって生成されるデフォルトのDelete関数とリンクの場合にそれを行います。
レコードを削除する場合、ビュー内のPOSTリンクの例を次に示します。
echo $this->Form->postLink(__('Delete'), array('action' => 'delete', $product['Product']['id']),array('class'=>'delete'), __('Are you sure you want to delete %s?', $product['Product']['list_title']));
また、コントローラーメソッドの例は次のようになります。
public function admin_delete($id = null) {
if (!$this->request->is('post')) {
throw new MethodNotAllowedException();
}
$this->Product->id = $id;
if (!$this->Product->exists()) {
throw new NotFoundException(__('Invalid product'));
}
if ($this->Product->delete()) {
$this->Session->setFlash(__('Product deleted'));
$this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Product was not deleted'));
$this->redirect(array('action' => 'index'));
}
ですから、それを自分の目的に適応させるのはそれほど難しいことではありません。