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

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

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

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

Q&A

解決済

1回答

2540閲覧

cakephpでbakeした時のカスタマイズ方法

ssk

総合スコア332

CakePHP

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

0グッド

1クリップ

投稿2016/11/15 06:01

編集2016/11/15 06:04

✓質問内容まとめ
・bakeした際に自動生成されるinput要素のカスタマイズ方法
・再度bakeすると上書きされてしまうので、データベース設計が完成してから
再度bakeして上書きはしないことは前提に各ページをカスタマイズが基本ですか?

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Cakephpのバージョンは3です。

bakeした際に自動生成されるinput要素がデフォルトで全ての項目が

HTML

1<label for="username">項目名</label> 2<input type="text" name="カラム名" required="required" maxlength="12" id="カラム名">

となっています。

これを例えば登録画面でセレクトボックスやチェックボックスにしたい場合
以下のような感じで追記してあげれば良いのでしょうか?

PHP

1// コントローラ 2$this->set( 'select1', $this->Prefecture->find( 'list', array( 3 'fields' => array( 'id', 'prefecture') 4))); 5 6// ビュー 7echo $this->Form->input( 'prefecture', array( 8 'type' => 'select', 9 'options' => $select1 10// 'selected' => $selected // 規定値をvalueで指定 11// 'div' => false // div親要素の有無(true/false) 12// 'size' => 5 // 高さ設定(リストボックスとして表示) 13// 'empty' => true // 空白を許可 14));

http://kwski.net/cakephp-2-x/1088/ より抜粋

また、その場合コントローラに追記する箇所は、こちらでしょうか?

PHP

1public function add() 2 { 3 $coordinator = $this->Coordinators->newEntity(); 4 if ($this->request->is('post')) { 5 $coordinator = $this->Coordinators->patchEntity($coordinator, $this->request->data); 6 if ($this->Coordinators->save($coordinator)) { 7 $this->Flash->success(__('The coordinator has been saved.')); 8 9 return $this->redirect(['action' => 'index']); 10 } else { 11 $this->Flash->error(__('The coordinator could not be saved. Please, try again.')); 12 } 13 } 14 $this->set(compact('coordinator')); 15 $this->set('_serialize', ['coordinator']); 16 }

再度bakeすると上書きされてしまうので、データベース設計が完成してから
各ページをカスタマイズが基本ですか?

Cakephp初学者です。
bakeばかりでこれからカスタマイズにしていければと考えています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

どのように開発を進めて行くかによると思うのですが...

bakeはDBから標準的なコードを自動で生成してくれるのでとても便利ですが、
実際にはそのままではプロダクトとしては使えないので、自分でコードを拡張(カスタマイズ)していく必要があると思います。
基本的には、書き出しの1回目だけはbakeを使って、あとは自分で拡張してくようなやり方が普通かと思います。再度bakeを実行するとカスタマイズしたところは全部消えてしまいますし...。

ちなみに、自分はbakeはほとんど使わずに自分で1からコードを書いています。その方が無駄なコードが増えずによかったりもします。

投稿2016/11/15 06:30

popobot

総合スコア6586

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

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

ssk

2016/11/15 06:38

icchii様 ありがとうございます。 データベース設計が全て決まってから、bakeするのがよいのですねm(_ _)m
ssk

2016/11/15 07:12

icchii様 お陰様で、add.ctpは実装することができました。 edit.ctpでセレクトボックスをデータベース情報でselectedにする場合、icchii様はどのように実装されていますか?
popobot

2016/11/15 07:21

通常Form->inputは、selectedを指定しなくてもprefectureに設定されている値がoptionsにあれば、それがselectedになると思いますよ。
ssk

2016/11/15 07:33

かりこまりました。 試してみます。ありがとうございましたm(_ _)m
ssk

2016/11/15 07:47

icchii様 何度もすいません。最後にもう1つだけ質問させてください。 データベースにあるデータがsampleの場合にサンプルと日本語で表示したいのですが どのように処理されていますか? default.poで日本語訳を記載しても反映されず、、、
popobot

2016/11/15 08:00

__()を使えば翻訳されると思いますが、情報が少なすぎてよくわかりません... なお、通常翻訳はDBのデータに使うのは適切ではない気がします。なぜなら動的に変わる値なので、poファイルにそれに対応する翻訳を随時追加するのは少しおかしい気がします。DBの別カラムに日本語データをいれるようにした方がメンテしやすい気がします。
ssk

2016/11/15 08:14

icchii様 ありがとうございます。 DB設計から見直してみます。 度々の質問になってしまい、申し訳ございませんでした。 また、質問するかと思いますが、その際は何卒よろしくお願い致します。
ssk

2016/11/15 08:57

icchii様 DBの別カラムに日本語データを入れられるようにする方法がパッと実装イメージがわかなかったので、add.ctpのselectの値を日本語にすることで対応しました。一応、動作はしているようですが、こちらでも問題ないでしょうか? <select name="sample"> <option value="バナナ">バナナ</option> <option value="アップル">アップル</option> <option value="ブドウ">ブドウ</option> </select> できたら、icchii様のように日本語のカラムを作成して、スマートにCakePHPを利用できるようなりたいです。
popobot

2016/11/15 13:16

すみません...勘違いしていたかもしれません。sampleというのはカラム名ですかね? だったら、poファイルで対応するのが正しいかもしれません。 ※データの値と勘違いしました。
ssk

2016/11/15 15:12

sampleはカラム名です。では、そちらはpoファイルで対応致します。 selectタグで新規追加・編集(DBの値をselected)としたいです><
ssk

2016/11/15 15:28

edit.ctpで以下のコードで実装はできたんですが、、非効率な気がして、、 icchii様はselectをどのように処理していますか? ✓以下、コードです。 $list = array('りんご' => 'りんご', 'バナナ' => 'バナナ', 'ブドウ' => 'ブドウ'); $selected = $table->sample; echo $this->Form->input('sample',array( 'type' => 'select', 'options' => $list, 'selected' => $selected )); ラジオボックスとチェックボックスもやり方はほど同じですかね><
popobot

2016/11/15 20:14

$this->Form->create($table);となっていますか?
ssk

2016/11/16 01:28

仰る通り、そのようになっております。
popobot

2016/11/16 01:32

であれば、それでうまくいくと思うのですが...わかりません。
ssk

2016/11/16 01:35

表示はうまくいっているのですが、記載する場所や書き方が合っているのかと不安で伺いました><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問