スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Yii環境構築をゼロからやってみた

はじめに

Yii 1.1.4 がリリースされた。
今回のリリースでは大幅な機能追加とか、変更とかなさそう。
いいことではないんですが、、半年くらい、同じ開発環境をコピーしたり使いまわしたりしてのをゼロから構築しなおしてみた。

半ば備忘録だけれど、どうせなんで簡単なテーブルを作ってcrudできるところまでやってみる。

・目標はApache+MySQL+PHPの非常に一般的な環境
・URLは/controller/view/id/1 とかのダサくないURLでアクセス出来るように
・yii-dbmigrationsというエクステンションを使用してDBを管理する。
・環境はMac OS X。MacPortsでインストールしたのを使用したけど、他の環境でも大差ないはず

ApacheやMySQLの設定は終わっていることを前提とする。

1. ダウンロード

まずフレームワーク本体をダウンロード。SVNでtrunkからexportしたら、1.1.5の開発版になってしまったのでやり直し、
http://www.yiiframework.com/download/
からtar.gzファイルを普通にダウンロードして解凍。
frameworkとrequirementsのディレクトリを残してほかは全部削除。
reuierementsも本当は必要ないけれど、なんかトラブルが起きた時のために使うかもってことで、残してる。

2. Webアプリケーションの作成


appという名前のアプリケーションを作成する。
面倒だと思ったことはないんだけれど、この手順って面倒。手元にCLI環境持ってない人とかも、PHPerには結構いるだろうに。
カラのアプリケーションとか入れといてくれたらいいのにね
以下のコマンドで作成
$ ./framework/yiic webapp app

これでappというディレクトリができた。

3. config/main.phpの設定

設定ファイル類の設定する。
編集するのはdbの設定と、urlManagerの設定だけでOKかと。
以下はほぼそのままの例


return array(
    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
    'name'=>'My Web Application',

    // preloading 'log' component
    'preload'=>array('log'),

    // autoloading model and component classes
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),

    'modules'=>array(
    ),

    // application components
    'components'=>array(
        'user'=>array(
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
        ),
        // uncomment the following to enable URLs in path-format
        'urlManager'=>array(
      'showScriptName' => false, // リンクするときにindex.phpが表示されなくなる
             'urlFormat'=>'path',
            'rules'=>array(
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),

    'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=mydb',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ),
        'errorHandler'=>array(
            // use 'site/error' action to display errors
            'errorAction'=>'site/error',
        ),
    'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'error, warning',
                ),
            ),
        ),
    ),
);

4. httpd.confやmod_rewriteの設定


あとはApacheでローカル8080ボートのルートディレクトリが来るようにしてみる。
以下はhttpd.confの追記の例

Listen 8080
<VirtualHost *:8080>
    DocumentRoot "/Users/takakino/htdocs/app"
</VirtualHost>


コントロラーラ系の設定として最後は.htaccessでmod_rewriteを設定する。
以下の例だと「パス上に実際に存在するファイルはそのまま表示し、ないものはYiiに渡す」という例。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php

5. データベースの設定の作成

まずは普通にデータベース作成。MySQLにコマンドラインでつないで
mysql> create database mydb default character set utf8;
Query OK, 1 row affected (0.00 sec)

普通のYiiの開発手順だと、ここでテーブルを作成してしまうんだけれど、今回はyii-dbmigrationsを使うのでMySQLのコマンドラインはここまで。

protected/config/main.phpを編集。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=mydb',
'emulatePrepare' => true,
'username' => 'root',
'password' =>>'',
'charset' => 'utf8',
),


6. yii-dbmigrationsの設定

Railsライクなmigration機能を提供するエクステンション。
正直そんなに完成度が高いわけでもないけれど、それでもあったほうがずっと便利かも。

http://www.yiiframework.com/extension/yii-dbmigrations/ ここからダウンロードして、中身のファイルを

protected/extensions/yii-dbmigrations/

というディレクトリを作成して展開する。
展開したら、コンソールアプリにこのコマンドを使うことを知らせてやる必要がる。

protected/config/console.php
を編集する。
return array(
  'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
  'name'=>'My Console Application',
  // コマンドの設定
  'commandMap' => array(
      'migrate' => array(
          'class'=>'application.extensions.yii-dbmigrations.CDbMigrationCommand',
      ),
  ),
  // 普通は不要。なぜかyii-dbmigrasionsに必要
  'components'=>array(
    'db'=>array(
      'connectionString' => 'mysql:host=localhost;dbname=mydb',
      'emulatePrepare' => true,
      'username' => 'root',
      'password' => '',
      'charset' => 'utf8',
    ),
  ),
);

yiicをオプションなしで実行して以下のように表示されればとりあえず設定成功
$ ./protected/yiic 
Yii command runner (based on Yii v1.1.4)
Usage: ./protected/yiic  [parameters...]

The following commands are available:
 - message
 - migrate
 - shell
 - webapp

To see individual command help, use the following:
   ./protected/yiic help 




後の方のDB設定をここで行わなくてはいけない理由は謎。普通のyiicだけで作るなら、省略して全く問題ない。

7. テーブル作成


今回はマイグレーションを使ってテーブルを作成する。
面倒な人は、普通にSQL書いてテーブル作るんでも問題ない。

今回はただのcrudのテストなので簡単なメモアプリケーションを作る。

まずカラのマイグレーションを作成する。

$ ./protected/yiic migrate create CreateMemo
Migrations directory: protected/migrations/

Created migration: m20100907165713_CreateMemo.php


最後の引数は省略可能で、UntitledMigrationって名前で作る。
とくに意味はないんだけれど、メンテナンスのためには分かりやすい名前を付けるといい。

で、できたてのmigrationのファイルを開いて、up()とdown()の中身を実装してやる。

class m20100907165713_CreateMemo extends CDbMigration {
    
  public function up() {
    $t = $this->newTable('memo', 'Engine=InnoDB');
    $t->primary_key('id');

    $t->string('author');    // 作者名
    $t->string('title');     // タイトル
    $t->text('content');     // 本文
    $t->integer('priority'); // 重要度

    $t->datetime('create_time'); // 作成日時

    $this->addTable($t);
  }

  public function down() {
    $this->removeTable('memo');
  }
}

マイグレーションファイルができたら、migrateコマンドを実行する。
$ ./protected/yiic migrate
Migrations directory: protected/migrations/

Creating initial schema_version table
=== Applying: m20100907165713_CreateMemo =======================================
    >> Creating table: memo
=== Marked as applied: m20100907165713_CreateMemo ==============================


memoというテーブルができていればOK。

8. modelとcrudの作成


あとは、modelとcrudを一発コマンドするだけ。

$ ./protected/yiic shell
Yii Interactive Tool v1.1 (based on Yii v1.1.4)
Please type 'help' for help. Type 'exit' to quit.
>> model Memo memo
   generate models/Memo.php
   generate fixtures/memo.php
   generate unit/MemoTest.php

The following model classes are successfully generated:
    Memo

If you have a 'db' database connection, you can test these models now with:
    $model=Memo::model()->find();
    print_r($model);

>> crud Memo memo
   generate MemoController.php
   generate MemoTest.php
      mkdir /Users/takakino/htdocs/app/protected/views/memo
   generate create.php
   generate update.php
   generate index.php
   generate view.php
   generate admin.php
   generate _form.php
   generate _view.php
   generate _search.php

Crud 'memo' has been successfully created. You may access it via:
http://hostname/path/to/index.php?r=memo



9. テストしてみる


http://localhost:8080/memo

でcrudが表示されるはず。デフォルトでのログインはadmin/adminでOK。
memo_crud meme_crud_update
できたー。
長かったけれど、一回作れば、長くコピペでいけるはずだし、migrationの設定ははしょって構わない。
本当はもうちょっといじるところがあるのだけれど、そこはまた後日機会があれば。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

takakino

Author:takakino
長いことPHPとかJavaとか、その昔はPerlとか。Webのシステム屋をずーっとやってきました。
最近Scalaにはまっています。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
Yii (5)
カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Twitter
Twitterこそこそやってます
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。