[CakePHP3]Formでボタンによって処理を分けたい場合

たとえば、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 ほかのバージョンはわかりません。

タイトルとURLをコピーしました