CakePHP5入門【コラム⑭】linkとpostLink

A子
元の「デフォルト画像」に戻したいときって、(現状)ワンクリックでは無理だよね?

B美
Webサーバ上での操作が必要になるかな

C菜
(「確認ダイアログ」付きで~)

A子
(問答無用で変更しちゃうと、「うっかり」が発生したときに困るしね(苦笑))

C菜
「templates/Users」の中にある「change_image.php」内にコードを追加しますね~


A子
…って、エラーだ!
何で?


C菜

B美
「postLink」の箇所を「link」に変更するだけで、問題なく動くわよ
それ以外は何も変えずに…

A子
問い合わせのダイアログって、普通のリンクでも出せるの?

B美
あと、「src/Controller」の中にある「UsersController.php」だけど、勝手に「defaultImage」メソッドを追加しといたから…
public function defaultImage($id = null)
{ $this->copyImage($id); return $this->redirect(['controller' => 'Top', 'action' => 'index']); } |
まぁ、親クラス(AppController)で定義している「copyImage」メソッドを呼び出してるだけなんだけど…



↓

↓


C菜
それにしても、なぜ「postLink」ではダメだったのでしょうか~?

B美
「postLink」を使うと、勝手にformタグを補完する(埋め込む)のよ

A子
さっきのコードってformタグの内側に書いたから、formの中にformが入れ子で存在する形になっちゃったんだ
そりゃエラーになるわな(苦笑)

C菜
(「link」と「postLink」の~)

B美
…ってことは、(この場合)本来ならば「postLink」を使うべきなのよね
(GoogleのクローラなんかがGETリクエストしてくるかもしれないし…)

A子
その言い方だと、(「postLink」の利用は)難しいってことかな?

B美
なにしろ、このページにはすでにformタグが存在しているからね

C菜

B美
https://192.168.1.205/authapp/users/default-image/1 |
あ、C菜のアカウントで試してみてね
(C菜のidは「3」だけど…)

C菜
何も起こりませんけど~

A子
私のアイコン画像が勝手にデフォルトに戻ってるじゃん

B美
…ってなわけで、「UsersController.php」の「defaultImage」メソッドはこう書くべきなのよ
public function defaultImage()
{ $this->copyImage($this->identity->id); return $this->redirect(['controller' => 'Top', 'action' => 'index']); } |


C菜
(GETパラメータを渡さないように~)


B美
「postLink」が使えたならば、最初のコードでも良かったんだけどね(苦笑)

A子
GETリクエストって、URL内にパラメータ(引数)を指定できるから(直接操作される可能性があって)怖いってことか…
てか、私のアイコン画像設定を(勝手に)実験で使わないでよ(怒)