WHAT'S NEW?
Loading...

Yii 1.1 | Mockeryでもっこり2/4

さてさて、本日もMockeryでもっこりしていこうと思う。もっこり。

まずはYiiのシェルyiicをつかって、ベースとなるアプリケーションをさっくさくに作ってしまおうか。

yiicの使い方は簡単だけど、もしわからなかったり、忘れてしまったり、自信がなくなってしまったら、公式サイトを覗いてみればいいだろう。

公式サイトはここだ。
初めに:はじめてのYiiアプリケーションの作成

で、具体的な使い方はこうなる。
framework/yiic webapp <Webアプリ名>


つくろうぜ!Webアプリ!

Webアプリ名を相対パスで指定した場合、どこに作るのか?yiiの直下か?と聞いてくるので、yesとタイプしてEnterすれば問題ない。

$ cd /path/to/yii/
$ framework/yiic webapp kickass
Create a Web application under '/path/to/yii/kickass'? (yes|no) [no]:yes

          mkdir /path/to/yii/kickass
          mkdir /path/to/yii/kickass/themes
          mkdir /path/to/yii/kickass/themes/classic
          mkdir /path/to/yii/kickass/themes/classic/views
          mkdir /path/to/yii/kickass/themes/classic/views/site
          mkdir /path/to/yii/kickass/themes/classic/views/layouts
   generate themes/classic/views/.htaccess
          mkdir /path/to/yii/kickass/themes/classic/views/system
          mkdir /path/to/yii/kickass/protected
          mkdir /path/to/yii/kickass/protected/models
   generate protected/models/ContactForm.php
   generate protected/models/LoginForm.php
          mkdir /path/to/yii/kickass/protected/extensions

<省略>

   generate css/bg.gif
   generate css/form.css
   generate css/screen.css
   generate css/main.css
   generate css/ie.css

Your application has been created successfully under /path/to/yii/kickass.
こんな感じであっという間にWebアプリのベースが作られる。楽だなぁ。

今回はWebアプリ名を『kickass』にしたけど、別にアメコミのKICKASSが好きってわけじゃない。『KickAss』には『超イカす』とか『マジ最高!』って意味があるので、それでつけてみた。


画像検索してたら見たくなってきたので近々DVD借りてきて見るかもね。


閑話休題。

さて、ブラウザで見てみよう。俺の仮想環境であるVMでは、yii.torhamzedd.localでブラウズできる仕組みになってるんで、yii.torhamzedd.local/kickassを見れば良いわけだ。


このページはどこをいじれば編集できるのか、といえば、ズバリ、『/path/to/yii/kickass/protected/views/site/index.php』だ。
ちょっといじってみよう。

予め『/path/to/yii/kickass/protectet/config/main.php』を編集して、『name』を『My Web Application』から『KICKASS』に変えておこう。

protected/config/main.php

return array(
 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
 'name'=>'KICKASS',

protected/views/site/index.php

<?php
/* @var $this SiteController */

$this->pageTitle=Yii::app()->name;
?>

<h1>良く来た!<i><?php echo CHtml::encode(Yii::app()->name); ?></i></h1>

<p>貴様のWebアプリは作られた!おめでたい奴め!!</p>

<p>このページをいじったりしたいんだったら、以下の2つのファイルをいじれば良いわけだ。</p>
<ul>
 <li>View file:
        <code>/path/to/yii/kickass/protected/views/site/index.php</code></li>
 <li>Layout file:
        <code>/path/to/yii/kickass/protected/views/layouts/main.php</code></li>
</ul>

<p><a href="http://www.yiiframework.com/doc/">このドキュメント</a>
を読めば、更に色々といじったり壊したりやりたい放題できるかもしれないね。
それからもし作ってて疑問が出るようであれば、
気軽に<a href="http://www.yiiframework.com/forum/">フォーラム</a>
に質問してみるのもいいかもしれない。</p>

更新したら早速ブラウザでチェックだ。

うむ、良い感じである。

ではこのファイルは無視して、フォーム用に1つファイルを作ってみよう。場所はindex.phpと同じ場所で、ファイル名はinput.phpでいいだろう。


中身は一旦こんな感じにしておく。


さて、ビューファイルはできたけど、一体どこからこのビューファイルを呼び出すのだろうか。
答えはコントローラだ。

というわけで、siteコントローラを見てみようじゃないか。siteというのは、index.phpが入っているフォルダ名がsiteになってるんだけど、逆を言えばsiteコントローラがsite内を読み込む、と覚えればいいだろう。

フレームワークとはこういった決まり事があるから、ルールさえ覚えてしまえば作業が速いんだ。

では早速、/path/to/yii/kickass/protected/controllers/SiteController.phpを見てみよう。


actionIndexと、actionErrorというメソッドがある。先ほど書き換えたindex.phpは、actionIndexがメソッドになってる。つまりactionを取って判別すればいいわけだ。

FooコントローラのactionBarであれば、ビューファイルはfoo/bar.phpになる。簡単だね。

では今しがた作ったinput.phpを動かすためには、actionInputメソッドがあればいいわけだ。
actioErrorの下に、以下の様なメソッドを書こう。


これで、siteコントローラのinputアクションが起こされたら、site/input.phpが表示されることになった。表示させてるのはrenderメソッドだ。

早速ブラウザでみて見よう。URLはリクエストパラメータ方式で、『yii.torhamzedd.local/kickass/index.php?r=site/input』となる。


ちゃんと西暦が表示された。

フォームをつくろう

次はこのinput.phpを編集し、文字列を入力できるようにしてみる。

protected/views/site/input.php
<form action="<?php echo Yii::app()->getBaseUrl();?>/index.php?r=site/input" method="post">

<input type="text" name="postedData" />
<input type="submit" value="KICK" />

</form>

<?php if(isset($postedData)): ?>
    <h1><?php echo $postedData?></h1>
<?php endif?>

ビューファイルが終わったらコントローラだ。

protected/controllers/SiteController.php
public function actionInput()
    {
        $postedData = null;
        if(isset($_POST['postedData']))
        {
            $postedData = $_POST['postedData'];
        }
        $this->render('input', array(
            'postedData' => $postedData
        ));
    }

この状態でブラウザ上から何かポストしてみると、大きな文字でポストした文字が表示されるはずだ。


続きは次回!!