あべてっく

役に立ったり立たなかったりする内容を備忘録的にちょこちょこと。
 

Yii Framework : 初期設定からフォーム入力画面作成まで・・・(・ω・`

投稿日 2012年4月17日  カテゴリ : PHP  タグ :

Yii Frameworkでフォーム入力を実装してみます。
今回はとりあえずプロジェクト作成からインデックスページに入力フォーム表示まで。
入力後の処理はまだ勉強が追いついてないので次回書く予定ですw

■ MySQLデータベースにテーブルt_hoge作成。

CREATE TABLE t_hoge
(
id INT(11) AUTO_INCREMENT,
hoge_date date,
hoge_name VARCHAR(100),
hoge_text VARCHAR(10),
PRIMARY KEY (id)
)

■ SSHでサーバーに入ってYii Frameworkフォルダに行き、yiicでプロジェクトhoge作成。

sudo -u apache ./yiic webapp ../hoge

■ protected/config/main.phpでサイト名とかパス定義とかgiiアクセスとかDBとか基本内容設定。

基本設定

‘basePath’=>dirname(__FILE__).DIRECTORY_SEPARATOR.’..’,
‘name’=>’ほげサイト’,
‘sourceLanguage’=>’ja’,
‘language’=>’ja’,
‘timeZone’=>’Asia/Tokyo’,

gii設定

‘modules’=>array(
‘gii’=>array(
‘class’=>’system.gii.GiiModule’,
‘password’=>’hogehoge’,
// giiにアクセスできるホストはlocalhostとローカルネットワークのみ
‘ipFilters’=>array(‘127.0.0.1′,’192.168.*’,’::1′),
),
),

URLパス設定

// デフォルトコントローラーをHogeControllerに変更したいので、
// array(‘rules’) に ”=>’hoge/index’,を追加
‘urlManager’=>array(
‘urlFormat’=>’path’,
‘rules’=>array(
”=>’hoge/index’,
‘<controller:\w+>/<id:\d+>’=>'<controller>/view’,
‘<controller:\w+>/<action:\w+>/<id:\d+>’=>'<controller>/<action >’,
‘<controller:\w+>/<action:\w+>’=>'<controller>/<action>’,
),
‘showScriptName’ => false,
),

DB設定

// SQLite設定をコメントアウトし、MySQL設定を有効化
/*
‘db’=>array(
‘connectionString’ => ‘sqlite:’.dirname(__FILE__).’/../data/testdrive.db’,
),
*/
// uncomment the following to use a MySQL database
/**/
‘db’=>array(
‘connectionString’ => ‘mysql:host=localhost;dbname=db_hoge’,
‘emulatePrepare’ => true,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
),
/**/

■ .htaccess設置
Yii FrameworkでurlManagerを有効化した後のYii Code Generatorログイン参照

■ gii Code GeneratorでモデルTHoge・コントローラーHogeController・ビューファイルprotected/views/hoge作成。

ここまでは多分どんなプロジェクト作る時もだいたい一緒だと思います。

こっから下が今回主にやった事です。とりあえず手探りでやっと動くようになった、という状態なので、
なんでこんなことやってんの?という質問には全くお答えしかねます (‘A`)
追記 この次の記事Yii Framework : 入力フォームに入れられた値のajaxを使ったバリデートとページ遷移を参考にした方がいいかもです。

■ コントローラー編集
HogeController内actionIndexを編集

public function actionIndex()
{
// モデル設定
$model = new THoge;// フォーム設定
$form = new CForm(‘application.views.hoge.hogeForm’, $model);// すみません。ちょっとこの辺あやしいです(。。;
if(isset($_POST[‘THoge’]) && $form -> validate()){
$this->redirect(array(‘hoge/hage’));
} else {
$this-> render(‘index’, array(‘form’ => $form));
}
}

上記POSTパラメータ

$_POST[‘THoge’]

のTHogeについては、最初何が飛んできてるのかわかんなかったので、後にvar_dump($_POST)で
飛んできてる連想配列名を確認して設定しました(^^;

また、

$form = new CForm(‘application.views.hoge.hogeForm’, $model);

でフォームビルダを使う為のフォーム定義を読む設定をしてます。
んではその中身を書いていきます。

■ フォーム定義作成
protected/views/hoge/hogeForm.php

<?php
return array(‘title’=–>’ほげほげ情報を入力してください’,

‘elements’=>array(

‘hoge_date’=>array(
‘type’=>’text’,
),
‘hoge_name’=>array(
‘type’=>’text’,
‘maxlength’=>100,
),
‘hoge_word’=>array(
‘type’=>’text’,
‘maxlength’=>10,
),
‘hoge_type’=>array(
‘type’=>’dropdownlist’,
‘items’=>THoge::model()->getHogeListOptions(),
),
),

‘buttons’=>array(
‘login’=>array(
‘type’=>’submit’,
‘label’=>’発射’,
),
),
);
?>

使う入力フォームをelements内に書きます。ただし一番最後のhoge_typeはDBで定義していないパラメータです。
よってこの定義をモデルTHoge内に書きます。またhoge_typeはドロップダウンリスト形式のフォームを使うよう設定したので、
その内容を定義するメソッドgetHogeListOptions()も書きます。

■ モデル編集
protected/models/THoge.php
class THoge extends CActiveRecord内に以下を追加

public $hoge_type;public function getHogeListOptions()
{
return array(
0 => ‘かっこいいほげ’,
1 => ‘かわいいほげ’,
2 => ‘いかしたほげ’,
);
}

同モデルクラス内、public function rules()の配列に以下を追加

array(‘hoge_type’, ‘required’),

同モデルクラス内、public function attributeLabels()の配列に以下を追加

‘hoge_type’ => ‘ほげタイプ’,

ビューを書いていきます。

■ ビュー編集
protected/views/hoge/index.php

<h1>ほげフォーム</h1>

<div class=”form”>
<?php echo $form; ?>
</div>

なお、今回はレイアウトファイルprotected/views/layout/main.phpからパンくずとかナビとか使わないものは消しました。
また、このビューファイルindex.phpはデフォルトでシステムから作成されますが、ここからもいらないものは消してあります。

ここまででとりあえず入力フォームが表示できました。(これが正しいかどうかは分かりませんが^^;)
今のとこまだあまりフレームワークでよかったてのはありませんねw
多分恩恵を受けていくのはAJAXでバリデーションをするとか、この後の処理からだと思います。

まだ初心者なのでわかんないことだらけですが、ぼちぼちと書いていきます。
 
 

Yii Rapid Application Development Hotshot
Lauren O’meara James Hamilton
Packt Publishing
売り上げランキング: 444,079

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です