たとえば、CMSみたいなものでコンテンツを登録するのに、通常登録と下書き、プレビューみたいなボタンがあって、処理を分けたい場合どうしたらいいか?
CakePHP3.x
こんな感じにします。
<?= $this->Form->submit('保存',['name'=>'mode']);?> <?= $this->Form->submit('下書き',['name'=>'mode']);?>
ポストリクエストのmodeにボタンの名前が入ってきますので、
$this->request->getData(‘mode’);
とすると、’保存’とか’下書き’とかが返ってきます。
ただ、これだと、デザイン変更とかで名前が変わった時にバグる可能性があるので
<?= $this->Form->submit('保存',['name'=>'save']);?> <?= $this->Form->submit('下書き',['name'=>'draft']);?>
といった感じにして、save や draft がPostに存在するかどうかで判定したほうが良いかもしれません。
追記
その後調べてみたら、どうもbuttonメソッドでもsubmitできるようで、
例えば、statusでコンテンツの状態(公開とか下書きとか)を管理しているとしたら
<?= $this->Form->button('公開',['name'=>'status','value'=>1]);?> <?= $this->Form->button('下書き',['name'=>'status','value'=>2]);?>
とすると、押したボタンに応じてstatusに値が入ってきていい感じになりました。
普通、buttonだとsubmit扱いになりませんが、勝手にtype=’submit’が入ってました。
※CakePHP3.7 ほかのバージョンはわかりません。