質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

6076閲覧

cakephp3 フォームのセレクトボックスからコントローラ側に値を渡したい

hgleam

総合スコア26

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/11/03 07:23

編集2016/11/03 07:44

タイトルの件で質問させてください。

フォームのセレクトボックス(MultiSelect)から選択し、その選択結果をコントローラ側に
渡したいのですが、渡されるのは選択された位置で実際に表示されている値は渡せません。
これはそういうものなのでしょうか?
それとも渡す手段があるのでしょうか?

イメージを下記に記します。

セレクトボックス
・ユーザー1
・ユーザー2(選択)
・ユーザー3(選択)

実際にコントローラ側に渡されるのは、ユーザー2、3の位置である"1,2"となる。
渡したいのは"ユーザー2、3の文字列"。
$this->request->dataで内容は確認済み。

以下にselect文のHTML文を記載します。

<?= $this->Form->input('purchaser', array('type'=>'select', 'multiple'=>'true', 'div'=>false, 'label'=>false, 'options'=> array_column($user_list, 'name'), 'value'=>$user_selected_list)); ?>

フォーム内で使用している変数は以下となります。
$user_list(ユーザー情報)

int) 1 => ['name' => 'ユーザー1', 'selected' => false, 'id' => (int) 1],
(int) 2 => [ 'name' => 'ユーザー2', 'selected' => true, 'id' => (int) 2],
(int) 4 => ['name' => 'ユーザー3', 'selected' => true,'id' => (int) 4]

$user_selected_list(選択情報)
(int) 0 => (int) 1,
(int) 1 => (int) 2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiim

2016/11/03 07:26

selectあたりのhtmlを載せてください
hiim

2016/11/03 07:58

追記ありがとうございます、しかし、これはhtmlではなくその前段階のcakeのviewテンプレートの部分と思います。問題解決には最終出力されているhtmlを掲載いただいたほうが早いと思います
guest

回答2

0

公式ドキュメントでは

$sizes = ['s' => 'Small', 'm' => 'Medium', 'l' => 'Large']; echo $this->Form->select('size', $sizes, ['default' => 'm']);

という記述でかけとのことになってますが この記述だとどうでしょう

投稿2016/11/03 09:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

最終吐き出されたselectタグの要素が

<select> <option value='1'>ユーザー2</option> <option value='2'>ユーザー3</option>

のようになっているのではないでしょうか?

<select> <option value='ユーザー2'>ユーザー2</option> <option value='ユーザー3'>ユーザー3</option>

こうなるようにしてみては?

array_column($user_list, 'name')

array('0'=>ユーザー1,'1'=>ユーザー2,'2'=>ユーザー3)
のような値になって

<select> <option value='0'>ユーザー1</option> <option value='1'>ユーザー2</option> <option value='2'>ユーザー3</option>

になってませんか?
array('ユーザー1'=>ユーザー1,'ユーザー2'=>ユーザー2,'ユーザー3'=>ユーザー3)
のようにして

<select> <option value='ユーザー1'>ユーザー1</option> <option value='ユーザー2'>ユーザー2</option> <option value='ユーザー3'>ユーザー3</option>

このようなhtmlを出力するようにできますか?cakePHP等の区別なしに基本的にformで渡される値はvalueの部分です。

具体的には
optionsに渡す部分のarray_column($user_list, 'name')を

$arr = array( array('name' => 'ユーザー1', 'value' => 'ユーザー1'), array('name' => 'ユーザー2', 'value' => 'ユーザー2'), array('name' => 'ユーザー3', 'value' => 'ユーザー3'), ); 'options'=>$arr

に変えたらいけませんか

$arr = array( 'ユーザー1'=>'ユーザー1', 'ユーザー2'=>'ユーザー2', 'ユーザー3'=>'ユーザー3' );

はどうですか?

投稿2016/11/03 07:31

編集2016/11/03 09:42
hiim

総合スコア1689

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hgleam

2016/11/03 09:33

アドバイスありがとうございます。 しかし、試してみたところ期待通りの結果が得られません。 下記のように記載してみましたが、 <?php $arr = array( array('name' => 'ユーザー1', 'value'=>'ユーザー1'), array('name' => 'ユーザー2', 'value'=>'ユーザー2'), array('name' => 'ユーザー3', 'value'=>'ユーザー3'), ); ?> <?= $this->Form->input('purchaser', array('type'=>'select', 'multiple'=>'true',  'div'=>false, 'label'=>false, 'options'=>$arr)); ?> 最終的に吐き出されたHTMLタグが下記のようになるようです。 原因は調査中です。 <select name="purchaser[]" multiple="multiple" id="purchaser"><option value="0">ユーザー1ユーザー1</option><option value="1">ユーザー2ユーザー2</option><option value="2">ユーザー3ユーザー3</option></select>
hgleam

2016/11/03 09:51

期待通りの結果を得られること確認出来ました。 ありがとうございます。 もう1つ質問なのですが、ユーザー2、3を選択状態にする場合はどのように$arr変数に情報を 追加してあげればよろしいのでしょうか?
hgleam

2016/11/13 17:28

色々と試した結果、選択状態にするにはvalueにインデックス情報を持たせないと駄目そうです。 最終的にはvalueにセレクトボックスの選択位置情報を持たせて、コントローラ側でセレクト ボックスの選択位置情報からユーザー名を取得するようにしてみました。 報告までに。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問