<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MVC &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/mvc/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Mon, 28 May 2012 10:32:25 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>はじめてのKohana : インデックス</title>
		<link>https://blog.mach3.jp/2012/05/28/get-started-with-kohana-index.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 28 May 2012 10:32:25 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2502</guid>

					<description><![CDATA[PHPのWebアプリケーションフレームワークである「Kohana」の導入の記録をまとめました。 はじめてのKohana 本連載は、私がKohanaに興味をもって導入し、色々試してみた記録をまとめたものなので、 あまり体系 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPのWebアプリケーションフレームワークである「Kohana」の導入の記録をまとめました。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2502"></span>



<h2 class="wp-block-heading">はじめてのKohana</h2>



<p>本連載は、私がKohanaに興味をもって導入し、色々試してみた記録をまとめたものなので、 あまり体系的に紹介できていない部分があるかもしれませんが、ご了承ください。 また、導入時に書いた物なので、そこまで突っ込んだ内容はありません。</p>



<p><a href="/2012/05/get-started-with-kohana-01.html">続きを読む</a></p>



<h2 class="wp-block-heading">インデックス</h2>



<h3 class="wp-block-heading">1. <a href="/2012/05/get-started-with-kohana-01.html">Hello World !</a></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>はじめに</li>



<li>Kohanaについて</li>



<li>インストール</li>



<li>初期設定</li>
</ol>
</blockquote>



<h3 class="wp-block-heading">2. <a href="/2012/05/get-started-with-kohana-02.html">コントローラとビューの基本</a></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>ルーティングとコントローラ</li>



<li>ビューを使って出力する</li>
</ol>
</blockquote>



<h3 class="wp-block-heading">3. <a href="/2012/05/get-started-with-kohana-03.html">コントローラ</a></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>コントローラファイル</li>



<li>パラメータを受け取る</li>



<li>before / after</li>
</ol>
</blockquote>



<h3 class="wp-block-heading">4. <a href="/2012/05/get-started-with-kohana-04.html">ルーティング</a></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>ルーティングを設定してURLをデザインする</li>



<li>パラメータを増やす</li>



<li>パラメータを省略する</li>



<li>様々な形式のフィードを出力する</li>
</ol>
</blockquote>



<h3 class="wp-block-heading">5. <a href="/2012/05/get-started-with-kohana-05.html">ビュー</a></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>ビューファイル</li>



<li>ビューに値を渡す（set）</li>



<li>値を参照渡しする（bind）</li>



<li>共用の値を設定する</li>



<li>ビューの中のビュー</li>
</ol>
</blockquote>



<h3 class="wp-block-heading">6. <a href="/2012/05/get-started-with-kohana-06.html">モデルとデータベース</a></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>モデルファイル</li>



<li>データベースの初期設定</li>



<li>データベースインスタンスとクエリの実行</li>



<li>結果を受け取る</li>



<li>クエリビルダー</li>



<li>プリペアドステートメント</li>



<li>DBクラスでのデータベース指定</li>
</ol>
</blockquote>



<h3 class="wp-block-heading">7. <a href="/2012/05/get-started-with-kohana-07.html">バリデーション</a></h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<ol class="wp-block-list">
<li>値のチェックができるValidクラス</li>



<li>Validationクラス</li>



<li>エラーメッセージのカスタマイズ</li>



<li>独自のルールでチェックする</li>
</ol>
</blockquote>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのKohana (7) : バリデーション</title>
		<link>https://blog.mach3.jp/2012/05/28/get-started-with-kohana-07.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 28 May 2012 10:31:28 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2484</guid>

					<description><![CDATA[「はじめてのKohana」、ラストの第七回目は、入力された値をチェックする為のバリデーションクラスを紹介します。 値のチェックができるValidクラス 単体の値のチェックには、Validクラスが使えます。 色々気の利いた [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「はじめてのKohana」、ラストの第七回目は、入力された値をチェックする為のバリデーションクラスを紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2484"></span>



<h2 class="wp-block-heading">値のチェックができるValidクラス</h2>



<p>単体の値のチェックには、Validクラスが使えます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Valid::email(<span class="hljs-string">"foo@example.com"</span>); <span class="hljs-comment">// &amp;lt;= TRUE</span>
Valid::alpha_numeric(<span class="hljs-string">"abcde12345"</span>); <span class="hljs-comment">// &amp;lt;= TRUE</span>
Valid::url(<span class="hljs-string">"http://www.example.com"</span>); <span class="hljs-comment">// &amp;lt;= TRUE</span>
</code></span></pre>


<p>色々気の利いたバリデーション用メソッドが揃っているので、 詳しくは公式ドキュメントを確認してみてください。</p>



<p>cf) <a href="http://kohanaframework.org/3.2/guide/api/Valid">Valid | Kohana User Guide</a></p>



<h2 class="wp-block-heading">Validationクラス</h2>



<p>フォームで入力された値を一括してチェックしたり、エラーを管理したりする場合に使えるのが Validationクラスです。</p>



<h3 class="wp-block-heading">初期化</h3>



<p>まず、検査したい値を配列でまとめて、Validationに渡してインスタンスを生成します。 この配列は多くの場合$_POSTか、それを加工した物でしょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$vars = <span class="hljs-keyword">array</span>(
     <span class="hljs-string">"name"</span> =&gt; <span class="hljs-string">"john"</span>,
     <span class="hljs-string">"email"</span> =&gt; <span class="hljs-string">"foo:example.com"</span>,
     <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">"http:/www.example.com"</span>,
     <span class="hljs-string">"message"</span> =&gt; <span class="hljs-string">""</span>
);

$validate = Validation::factory($vars);
</code></span></pre>


<h3 class="wp-block-heading">ルールの追加</h3>



<p>生成したインスタンスの rule メソッドを使ってルールを追加していきます。 今回のルールは以下のようにしてみました。</p>



<ul class="wp-block-list">
<li>name は8文字以上30文字以内</li>



<li>email はEメールアドレスの形式で</li>



<li>url はURLの形式で</li>



<li>message は140文字以内で</li>



<li>nameとmessageは必須</li>
</ul>



<pre class="wp-block-preformatted">$validate
    -&gt;rule("name", "not_empty")
    -&gt;rule("name", "min_length", array(":value", 8))
    -&gt;rule("name", "max_length", array(":value", 30))
    -&gt;rule("email", "email")
    -&gt;rule("url", "url")
    -&gt;rule("message", "not_empty")
    -&gt;rule("message", "max_length", array(":value", 140))
;
</pre>



<p>ruleの引数は、rule( $field, $callback, $params ) となっており、 $fieldにはフィールド名、$callbackには先に紹介したバリデーション用のメソッド名を、 そして$param には$callbackに渡すパラメータを設定します。</p>



<p>&#8220;:value&#8221; とあるのは入力された値を展開する為のプレースホルダです。</p>



<h3 class="wp-block-heading">バリデートの実行</h3>



<p>ルールを設定したら、check メソッドでチェックしてみましょう。 エラーがでなければ登録等の処理を行い、そうでなければエラーメッセージを表示する等します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">if</span>($validate-&gt;check()){
     <span class="hljs-comment">// バリデーションを無事通過したので、何か処理をする</span>
     <span class="hljs-keyword">echo</span> <span class="hljs-string">"Thanks !"</span>;
} <span class="hljs-keyword">else</span> {
     <span class="hljs-comment">// バリデーションエラーが発生</span>
     <span class="hljs-keyword">echo</span> Debug::vars($validate-&gt;errors(<span class="hljs-string">"validation"</span>));
}
</code></span></pre>


<p>errors メソッドの引数には、メッセージファイルの名前を渡します。 そして、返す値はフィールド名をキーにした連想配列になっています。</p>



<p>メッセージファイルの名前が &#8220;validation&#8221; の場合は、/application/message/validation.php か、無ければ /system/message/validation.php を参照します。 後者は雛形としてはじめから用意されているので、編集の際には書式などを参考にしましょう。</p>



<p>さて、先程渡した $vars はわざとエラーが出るような内容にしておいたので、 上のチェックの結果は次のようになります。何も弄っていなければ、フルイングリッシュですね。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">array</span>(<span class="hljs-number">4</span>) (
    <span class="hljs-string">"name"</span> =&gt; string(<span class="hljs-number">39</span>) <span class="hljs-string">"name must be at least 8 characters long"</span>
    <span class="hljs-string">"email"</span> =&gt; string(<span class="hljs-number">29</span>) <span class="hljs-string">"email must be a email address"</span>
    <span class="hljs-string">"url"</span> =&gt; string(<span class="hljs-number">17</span>) <span class="hljs-string">"url must be a url"</span>
    <span class="hljs-string">"message"</span> =&gt; string(<span class="hljs-number">25</span>) <span class="hljs-string">"message must not be empty"</span>
)
</code></span></pre>


<h2 class="wp-block-heading">エラーメッセージのカスタマイズ</h2>



<p>デフォルトのエラーメッセージだと英語のアラートが出るなんだか怖いサイトになってしまうので、 日本語のメッセージに置き換えてみましょう。</p>



<h3 class="wp-block-heading">メッセージを再定義</h3>



<p>下記のファイルを編集、もし無ければ新たに作成します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/application/message/validation.php</p>
</blockquote>



<p>そして、今回使用するルールだけを以下のように再定義してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">return</span> <span class="hljs-keyword">array</span>(
     <span class="hljs-string">"not_empty"</span> =&gt; <span class="hljs-string">":field は必須項目です。"</span>,
     <span class="hljs-string">"min_length"</span> =&gt; <span class="hljs-string">":field は :param2 文字以上で入力してください。"</span>,
     <span class="hljs-string">"max_length"</span> =&gt; <span class="hljs-string">":field は :param2 文字以内で入力してください。"</span>,
     <span class="hljs-string">"email"</span> =&gt; <span class="hljs-string">":field はEメールアドレスを入力してください。"</span>,
     <span class="hljs-string">"url"</span> =&gt; <span class="hljs-string">":field はWebサイトアドレスを入力してください。"</span>
);
</code></span></pre>


<p>:field はフィールド名、:param2 はメソッドに渡した第二引数を展開するプレースホルダです。 編集後に先程のエラーメッセージを改めて確認すると…</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">array</span>(<span class="hljs-number">4</span>) (
    <span class="hljs-string">"name"</span> =&gt; string(<span class="hljs-number">53</span>) <span class="hljs-string">"name は 8 文字以上で入力してください。"</span>
    <span class="hljs-string">"email"</span> =&gt; string(<span class="hljs-number">61</span>) <span class="hljs-string">"email はEメールアドレスを入力してください。"</span>
    <span class="hljs-string">"url"</span> =&gt; string(<span class="hljs-number">61</span>) <span class="hljs-string">"url はWebサイトアドレスを入力してください。"</span>
    <span class="hljs-string">"message"</span> =&gt; string(<span class="hljs-number">32</span>) <span class="hljs-string">"message は必須項目です。"</span>
)
</code></span></pre>


<p>メッセージが日本語化されました。が、フィールド名が英語のままで、気持ち悪いですね。</p>



<h3 class="wp-block-heading">フィールドの別名（ラベル）を設定する</h3>



<p>フィールド名には、別名（ラベル）を設定してそれを表示する事ができます。 ラベルの設定には label メソッドを使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$validate
     -&gt;label(<span class="hljs-string">"name"</span>, <span class="hljs-string">"お名前"</span>)
     -&gt;label(<span class="hljs-string">"email"</span>, <span class="hljs-string">"E-Mail"</span>)
     -&gt;label(<span class="hljs-string">"url"</span>, <span class="hljs-string">"URL"</span>)
     -&gt;label(<span class="hljs-string">"message"</span>, <span class="hljs-string">"メッセージ"</span>)
;
</code></span></pre>


<p>このようにして改めて確認してみると、 以下のように無事、きちんとした日本語メッセージが表示されました。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">array</span>(<span class="hljs-number">4</span>) (
    <span class="hljs-string">"name"</span> =&gt; string(<span class="hljs-number">58</span>) <span class="hljs-string">"お名前 は 8 文字以上で入力してください。"</span>
    <span class="hljs-string">"email"</span> =&gt; string(<span class="hljs-number">76</span>) <span class="hljs-string">"E-Mail はEメールアドレスを入力してください。"</span>
    <span class="hljs-string">"url"</span> =&gt; string(<span class="hljs-number">61</span>) <span class="hljs-string">"URL はWebサイトアドレスを入力してください。"</span>
    <span class="hljs-string">"message"</span> =&gt; string(<span class="hljs-number">40</span>) <span class="hljs-string">"メッセージ は必須項目です。"</span>
)
</code></span></pre>


<p>cf) <a href="http://kohanaframework.org/3.2/guide/kohana/security/validation">Validation | Kohana User Guide</a></p>



<h2 class="wp-block-heading">独自のルールでチェックする</h2>



<p>rule メソッドの $callback に使えるのはValidクラスのメソッドだけでなく、定義済みの関数等も利用できます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$validate-&gt;rule(<span class="hljs-string">"user_id"</span>, <span class="hljs-string">"is_numeric"</span>); <span class="hljs-comment">// PHPの定義済み関数を使用</span>
$validate-&gt;rule(<span class="hljs-string">"user_id"</span>, <span class="hljs-string">"MyValid::is_user_id"</span>); <span class="hljs-comment">// 独自のバリデートクラスを使用</span>
</code></span></pre>


<p>Validクラスのメソッドだけだと面倒、または冗長になるような場合、 独自のクラスを作ってみると見通しが良くなるかもしれません。</p>



<p>その場合は、メッセージも新たに追加してあげましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">return</span> <span class="hljs-keyword">array</span>(
    …
    <span class="hljs-string">"is_numeric"</span> =&gt; <span class="hljs-string">":field は数値で入力してください"</span>,
    <span class="hljs-string">"MyValid::is_user_id"</span> =&gt; <span class="hljs-string">":field の形式が正しくありません"</span>
);
</code></span></pre>


<h2 class="wp-block-heading">まとめ</h2>



<p>全七回にわたってKohanaフレームワークの紹介をさせて頂きました。 Kohanaに興味を持った方へ、何かしらのとっかかりになれればなと思います。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>» <a href="/2012/05/get-started-with-kohana-index.html">もくじ</a></p>



<ol class="wp-block-list">
<li><a href="/2012/05/get-started-with-kohana-01.html">Hello World !</a></li>



<li><a href="/2012/05/get-started-with-kohana-02.html">コントローラとビューの基本</a></li>



<li><a href="/2012/05/get-started-with-kohana-03.html">コントローラ</a></li>



<li><a href="/2012/05/get-started-with-kohana-04.html">ルーティング</a></li>



<li><a href="/2012/05/get-started-with-kohana-05.html">ビュー</a></li>



<li><a href="/2012/05/get-started-with-kohana-06.html">モデルとデータベース</a></li>



<li><em>バリデーション</em></li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのKohana (6) : モデルとデータベース</title>
		<link>https://blog.mach3.jp/2012/05/28/get-started-with-kohana-06.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 28 May 2012 01:00:08 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2475</guid>

					<description><![CDATA[「はじめてのKohana」の第六回目です。 Kohanaのモデルとデータベースについて紹介します。 モデルファイル Kohanaのモデルは次の場所に格納します。 /application/classes/model/ 例 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「はじめてのKohana」の第六回目です。 Kohanaのモデルとデータベースについて紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2475"></span>



<h2 class="wp-block-heading">モデルファイル</h2>



<p>Kohanaのモデルは次の場所に格納します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/application/classes/model/</p>
</blockquote>



<p>例えば、簡単なDataモデルを作って使用してみます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/application/classes/model/data.php</p>
</blockquote>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span> defined(<span class="hljs-string">'SYSPATH'</span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">die</span>(<span class="hljs-string">'No direct script access.'</span>);

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Model_Data</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Model</span> </span>{

         <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getItem</span><span class="hljs-params">()</span></span>{
                    <span class="hljs-comment">// なにか処理をする</span>
                    <span class="hljs-keyword">return</span> $item;
         }
}
</span></code></span></pre>


<p>
    コントローラでインスタンスを作って使用してみましょう。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$model = <span class="hljs-keyword">new</span> Model_Data;
<span class="hljs-keyword">echo</span> $model-&gt;getItem();
</code></span></pre>


<p>
    オートロードのおかげで、設置場所と命名規則さえ守っていれば簡単に使用する事ができますね。
</p>



<p>
    モデル自体については特別これ以上書くことはなさそうなので、<br />
    続いてモデルと切っても切れないデータベースアクセスについて紹介します。
</p>



<h2 class="wp-block-heading">
    データベースの初期設定<br />
</h2>



<p>
    Kohanaのデータベースの初期設定は、
</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>
        /modules/database/config/database.php
    </p>
</blockquote>



<p>
    にあります。が、これを直接編集はしません。<br />
    これを雛形にして下記のパスに独自の設定ファイルを作り、<br />
    あとはKohanaに設定をカスケーディングしてもらいます。
</p>



<p>
    cf) <a href="http://kohanaframework.org/3.2/guide/kohana/files">Cascading Filesystem | Kohana User Guide</a>
</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>
        /application/config/database.php
    </p>
</blockquote>



<p>
    ファイルの中身を見ると分かりますが、<br />
    Kohanaは複数のデータベースインスタンスを持ち、それを切り替えて使用する事が出来ます。<br />
    つまり、開発用・テスト用・本番用のデータベースアクセスの設定をスイッチング出来るようになっているのです。
</p>



<p>
    詳細な設定内容については、雛形の内容をご参照ください。
</p>



<p>
    cf) <a href="http://kohanaframework.org/3.2/guide/database/config">Configuration | Kohana User Guide</a>
</p>



<h2 class="wp-block-heading">
    データベースインスタンスとクエリの実行<br />
</h2>



<p>
    データベースインスタンスの取得は、Database::instance( $name ) を使います。<br />
    例えば、&#8221;development&#8221; という名前で設定しておいたデータベースのインスタンスは
</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$db = Database::instance(<span class="hljs-string">"development"</span>);
</code></span></pre>


<p>
    このようにして取得する事ができます。<br />
    そしてインスタンスの query メソッドを使う事で、そのデータベースにクエリを送信します。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$result = $db-&gt;query(Database::SELECT, <span class="hljs-string">'SELECT * FROM mytable'</span>);
</code></span></pre>


<p>
    queryの第一引数（Database::SELECT）は、クエリのタイプです。<br />
    SELECT/INSERT/UPDATE/DELETEがあり、それぞれ返す値が異なります。
</p>



<ul class="wp-block-list">
<li><br />        SELECT : Database_MySQL_Result インスタンス<br />    </li>



<li><br />        INSERT : insert id と列数を含んだarray<br />    </li>



<li><br />        UPDATE/DELETE : affected rowsの数値<br />    </li>
</ul>



<p>
    cf) <a href="http://kohanaframework.org/3.2/guide/api/Database#query">Database | Kohana User Guide</a>
</p>



<h2 class="wp-block-heading">
    結果を受け取る<br />
</h2>



<p>
    Database::SELECTでクエリを送信した場合、結果が Database_MySQL_Result インスタンスで返されます。<br />
    この結果を1つずつ舐めて処理していきたい場合、例えば、次のようにします。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$result = $db-&gt;query(Database::SELECT, <span class="hljs-string">'SELECT * FROM mytable'</span>);

<span class="hljs-keyword">foreach</span>($result-&gt;as_array() <span class="hljs-keyword">as</span> $row){
    <span class="hljs-keyword">echo</span> Debug::vars($row);
}
</code></span></pre>


<p>
    as_array メソッドは、返された結果を連想配列で取得出来ます。
</p>



<p>
    または、配列に変換せずに次のように処理する事もできます。これは上の例と同様の結果が出力されます。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">while</span>($result-&gt;valid()){ <span class="hljs-comment">// valid は現在の行が存在するかを返す</span>
    $row = $result-&gt;current(); <span class="hljs-comment">// current は現在の行を返す</span>
    <span class="hljs-keyword">echo</span> Debug::vars($row);
    $result-&gt;next(); <span class="hljs-comment">// next で次の行にポインタを進める</span>
}

$result-&gt;rewind(); <span class="hljs-comment">// rewind で最初の行にポインタを戻す</span>
</code></span></pre>


<p>
    cf) <a href="http://kohanaframework.org/3.2/guide/api/Database_MySQL_Result">Database_MySQL_Result | Kohana User Guide</a>
</p>



<h2 class="wp-block-heading">
    クエリビルダー<br />
</h2>



<p>
    データベースインスタンスを使ってクエリを送信する方法の他に、<br />
    DBクラスを利用した、より安全な方法が提供されています。<br />
    その一つがクエリビルダーです。
</p>



<p>
    クエリビルダーは、メソッドを連ねていく事でクエリを動的に組み立てていくことができます。<br />
    CodeIgniterで言う所のActiveRecordのような物ですね。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// クエリの組立</span>
$query = DB::select(<span class="hljs-string">"id"</span>, <span class="hljs-string">"name"</span>, <span class="hljs-string">"created_at"</span>)
    -&gt;from(<span class="hljs-string">"users"</span>)
    -&gt;where(<span class="hljs-string">"id"</span>, <span class="hljs-string">"&gt;"</span>, <span class="hljs-number">3</span>)
    -&gt;where(<span class="hljs-string">"name"</span>, <span class="hljs-string">"&amp;lt;&gt;"</span>, <span class="hljs-string">"foo"</span>);

$query-&gt;execute(); <span class="hljs-comment">// executeで実行</span>
</code></span></pre>


<p>
    上のコードは、次のようなSQLを生成し、送信しています。<br />
    生成されるSQLは、$query-&gt;__toString(); で確認できます。
</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">SELECT id, name, created_at FROM users WHERE id &gt; 3 AND name <span class="hljs-tag">&lt;&gt;</span> ‘foo’
</code></span></pre>


<p>
    ここで挙げた以外にも組立に使える様々なメソッドが用意されています。
</p>



<p>
    cf) <a href="http://kohanaframework.org/3.2/guide/database/query/builder">Query Builder | Kohana User Guide</a>
</p>



<h2 class="wp-block-heading">
    プリペアドステートメント<br />
</h2>



<p>
    プリペアドステートメントも、クエリビルダー同様にDBクラスから提供されます。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$query = DB::query(Database::SELECT, <span class="hljs-string">'SELECT * FROM `mytable` WHERE id = :id AND name = :name'</span>);

<span class="hljs-comment">// parameters で値を渡す</span>
$query-&gt;parameters(<span class="hljs-keyword">array</span>(
    <span class="hljs-string">"id"</span> =&gt; <span class="hljs-number">123</span>,
    <span class="hljs-string">"name"</span> = <span class="hljs-string">"foo"</span>
));

<span class="hljs-comment">// param で1つずつ値を渡すこともできる</span>
$query-&gt;param(<span class="hljs-string">"id"</span>, <span class="hljs-number">123</span>);
$query-&gt;param(<span class="hljs-string">"name"</span>, <span class="hljs-string">"foo"</span>);

$result-&gt;execute(); <span class="hljs-comment">// executeで実行</span>
</code></span></pre>


<h3 class="wp-block-heading">
    bindによる参照渡し<br />
</h3>



<p>
    また、param の代わりに bind を使用すると値渡しではなく参照渡しをする事ができます。<br />
    繰り返し同じクエリを処理する場合に便利ですね。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$query = DB::query(Database::SELECT, <span class="hljs-string">'SELECT * FROM `users` WHERE name = :name'</span>);
$query-&gt;bind(<span class="hljs-string">":name"</span>, $name);

$names = <span class="hljs-keyword">array</span>( <span class="hljs-string">"foo"</span>, <span class="hljs-string">"bar"</span> );
<span class="hljs-keyword">foreach</span>($names <span class="hljs-keyword">as</span> $name){
    <span class="hljs-keyword">echo</span> Debug::vars($query-&gt;__toString());
}
</code></span></pre>


<p>
    出力結果はこのように。
</p>


<pre class="wp-block-code"><span><code class="hljs">string(40) “SELECT * FROM users WHERE name = ‘foo’”
string(40) “SELECT * FROM users WHERE name = ‘bar’”
</code></span></pre>


<p>
    cf) <a href="http://kohanaframework.org/3.2/guide/database/query/prepared">Prepared Statements | Kohana User Guide</a>
</p>



<h2 class="wp-block-heading">
    DBクラスでのデータベース指定<br />
</h2>



<p>
    クエリビルダーやプリペアドステートメントでアクセスするデータベースを選択したい場合は、<br />
    executeの引数に設定名またはインスタンスを渡します。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$query-&gt;execute(<span class="hljs-string">"development"</span>); <span class="hljs-comment">// 生成したクエリをdevelopmentに送信</span>

<span class="hljs-comment">// または</span>

$db = Database::instance(<span class="hljs-string">"development"</span>);
$query-&gt;execute($db);
</code></span></pre>


<p>
    または、Databaseの静的プロパティを書き換えても行けるようです。<br />
    セッターがないのでそういう使い方を想定しているかどうかはわかりません。
</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">Database::$<span class="hljs-keyword">default</span> = <span class="hljs-string">"development"</span>;
</code></span></pre>


<h2 class="wp-block-heading">
    まとめ<br />
</h2>



<p>
    Kohanaのモデルとデータベースについてご紹介しました。<br />
    次回は、本連載最後になります。Kohanaのバリデーションクラスについてのご紹介です。
</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>
    » <a href="/2012/05/get-started-with-kohana-index.html">もくじ</a>
</p>



<ol class="wp-block-list">
<li><br />        <a href="/2012/05/get-started-with-kohana-01.html">Hello World !</a><br />    </li>



<li><br />        <a href="/2012/05/get-started-with-kohana-02.html">コントローラとビューの基本</a><br />    </li>



<li><br />        <a href="/2012/05/get-started-with-kohana-03.html">コントローラ</a><br />    </li>



<li><br />        <a href="/2012/05/get-started-with-kohana-04.html">ルーティング</a><br />    </li>



<li><br />        <a href="/2012/05/get-started-with-kohana-05.html">ビュー</a><br />    </li>



<li><br />        <em>モデルとデータベース</em><br />    </li>



<li><br />        <a href="/2012/05/get-started-with-kohana-07.html">バリデーション</a><br />    </li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのKohana (5) : ビュー</title>
		<link>https://blog.mach3.jp/2012/05/25/get-started-with-kohana-05.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Fri, 25 May 2012 01:00:17 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2469</guid>

					<description><![CDATA[「はじめてのKohana」の第五回目です。 今回は、Kohanaのビューについて紹介します。 ビューファイル Kohanaのビューファイルはこちらに格納する決まりになっています。 /application/views/  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「はじめてのKohana」の第五回目です。 今回は、Kohanaのビューについて紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2469"></span>



<h2 class="wp-block-heading">ビューファイル</h2>



<p>Kohanaのビューファイルはこちらに格納する決まりになっています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/application/views/</p>
</blockquote>



<p>例えば、単純に文字列を表示するだけの「hello」というコントローラー・ビューを作ってみるとします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/application/views/hello.php</p>
</blockquote>



<p>これがhelloビューの格納場所になります。 内容は適当に。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-meta-keyword">HTML</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"ja"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">head</span>&gt;</span>
     <span class="hljs-tag">&lt;<span class="hljs-name">meta</span> <span class="hljs-attr">charset</span>=<span class="hljs-string">"UTF-8"</span>&gt;</span>
     <span class="hljs-tag">&lt;<span class="hljs-name">title</span>&gt;</span>Hello<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">head</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>

     Hello !!

<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
</code></span></pre>


<p>では、このビューファイルをhelloコントローラーで出力してみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Hello</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_index</span><span class="hljs-params">()</span></span>{
        $view = View::factory(<span class="hljs-string">"hello"</span>); <span class="hljs-comment">// Viewクラスでインスタンスを生成</span>
        <span class="hljs-keyword">$this</span>-&gt;response-&gt;body($view); <span class="hljs-comment">// 生成したインスタンスをResponseで出力</span>
    }
}
</code></span></pre>


<p>View::factory( $name ) で名前に応じたビューファイルからインスタンスを作る事ができます。 ビューの出力は、基本的にこのインスタンスを使って制御する事になります。</p>



<p>この例では、&#8221;hello&#8221; という名前から /application/views/hello.php を元にしたビューのインスタンスを生成しています。</p>



<h2 class="wp-block-heading">ビューに値を渡す（set）</h2>



<p>実際の運用では、ビューファイルに値を渡して、それにより値を表示させたり切り替えたりすると思います。 ビューに値を渡すには、ビューインスタンスのsetメソッドを利用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$view = View::factory(<span class="hljs-string">"hello"</span>);
$view-&gt;set(<span class="hljs-string">"name"</span>, <span class="hljs-string">"John"</span>); <span class="hljs-comment">// set( $key, $value );</span>
</code></span></pre>


<p>上記の形以外にも、連想配列で引数を渡したり、プロパティの追加でも値を設定する事ができます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// 下の3つは全て同じ処理</span>
$view-&gt;set(<span class="hljs-string">"name"</span>, <span class="hljs-string">"John"</span>);
$view-&gt;set( aray(<span class="hljs-string">"name"</span> =&gt; <span class="hljs-string">"John"</span>) );
$view-&gt;name = <span class="hljs-string">"John"</span>;
</code></span></pre>


<p>setされた値は、ビューファイル側でキーの名前の変数にて参照できます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">Hello, <span class="php"><span class="hljs-meta">&lt;?php</span> <span class="hljs-keyword">echo</span> $name; <span class="hljs-meta">?&gt;</span></span> !!
</code></span></pre>


<h2 class="wp-block-heading">値を参照渡しする（bind）</h2>



<p>setは値渡しですが、bindメソッドを使えば参照渡しをする事も出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$foo = <span class="hljs-string">"bar"</span>;

$view = View::factory(<span class="hljs-string">"hello"</span>);
$view-&gt;bind(<span class="hljs-string">"foo"</span>, $foo);
<span class="hljs-keyword">$this</span>-&gt;response-&gt;body($view);

$foo = <span class="hljs-string">"piyo"</span>;
</code></span></pre>


<p>（ビューファイルでの結果）</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">echo</span> $foo; <span class="hljs-comment">// &lt;= "piyo"</span>
</code></span></pre>


<p>setを使った場合は、上の出力結果は&#8221;bar&#8221;になります。</p>



<h2 class="wp-block-heading">共用の値を設定する</h2>



<p>複数のビュー・アクションで共通の値を利用したい場合は、set_global または bind_global を使用します。 beforeメソッド等で値を設定しておけば、そのコントローラー内の全てのアクションのビューでその値を参照できます。</p>



<p>set_global と bind_global の違いは set / bind と同様に、値渡しをするか、参照渡しをするかの違いです。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">before</span><span class="hljs-params">()</span></span>{
    View::set_global(<span class="hljs-string">"title"</span>, <span class="hljs-string">"HELLO PAGE"</span>);
}
<span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_index</span><span class="hljs-params">()</span></span>{
    $view = View::factory(<span class="hljs-string">"hello"</span>);
    <span class="hljs-keyword">$this</span>-&gt;response-&gt;body($view);
}
</code></span></pre>


<p>（ビューファイルでの結果）</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">echo</span> $title; <span class="hljs-comment">// &lt;= "HELLO PAGE"</span>
</code></span></pre>


<h2 class="wp-block-heading">ビューの中のビュー</h2>



<p>ウィジェット等の出力でよく使われると思いますが、 ビューの中にビューを展開する為の方法として、公式のドキュメントでは幾つかのアプローチが提案されています。 状況と目的に応じて使い分けるとよいでしょう。</p>



<h3 class="wp-block-heading">ビューの中でインスタンスを生成する</h3>



<p>基本的にそのインスタンスでset/bindした値しか使えません。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>
    <span class="hljs-keyword">echo</span> View::factory(<span class="hljs-string">"widget"</span>)-&gt;bind(<span class="hljs-string">"foo"</span>, $foo);
<span class="hljs-meta">?&gt;</span></span>
</code></span></pre>


<h3 class="wp-block-heading">ビューの中でincludeする</h3>



<p>より原始的な方法です。 特徴としては、親のビューのコンテキストで展開されるので、 親のビューで使用できる全ての値が子のビューでも使用できます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span>
    <span class="hljs-keyword">include</span> Kohana::find_file(<span class="hljs-string">"views"</span>, <span class="hljs-string">"widget"</span>);
<span class="hljs-meta">?&gt;</span></span>
</code></span></pre>


<h3 class="wp-block-heading">コントローラ内で、子のビューを親のビューにアサインする</h3>



<p>親となるビューに、子のビューのインスタンスを生成して渡します。 コントローラで表示を操れるのが特徴です。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$view = View::factory(<span class="hljs-string">"layout"</span>);
$view-&gt;widget = View::factory(<span class="hljs-string">"widget"</span>)-&gt;set(<span class="hljs-string">"foo"</span>, $foo);
<span class="hljs-keyword">$this</span>-&gt;response-&gt;body($view);
</code></span></pre>


<p>cf) <a href="http://kohanaframework.org/3.2/guide/kohana/mvc/views">Views | Kohana User Guide</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>Kohanaのビューについてご紹介しました。 次回は、アプリの核となるデータベースとモデルの話をします。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>» <a href="/2012/05/get-started-with-kohana-index.html">もくじ</a></p>



<ol class="wp-block-list">
<li><a href="/2012/05/get-started-with-kohana-01.html">Hello World !</a></li>



<li><a href="/2012/05/get-started-with-kohana-02.html">コントローラとビューの基本</a></li>



<li><a href="/2012/05/get-started-with-kohana-03.html">コントローラ</a></li>



<li><a href="/2012/05/get-started-with-kohana-04.html">ルーティング</a></li>



<li><em>ビュー</em></li>



<li><a href="/2012/05/get-started-with-kohana-06.html">モデルとデータベース</a></li>



<li><a href="/2012/05/get-started-with-kohana-07.html">バリデーション</a></li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのKohana (4) : ルーティング</title>
		<link>https://blog.mach3.jp/2012/05/24/get-started-with-kohana-04.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 24 May 2012 01:00:44 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2463</guid>

					<description><![CDATA[「はじめてのKohana」の第四回目です。 今回は、KohanaのURLルーティングについて紹介します。 ルーティングを設定してURLをデザインする ルーティングの設定は、追加・編集する事ができます。 多くのケースはデフ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「はじめてのKohana」の第四回目です。 今回は、KohanaのURLルーティングについて紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2463"></span>



<h2 class="wp-block-heading">ルーティングを設定してURLをデザインする</h2>



<p>ルーティングの設定は、追加・編集する事ができます。</p>



<p>多くのケースはデフォルトのルーティングでまかなえるかもしれませんが、 ルーティングを駆使する事でよりユーザーフレンドリーなURLをつくり上げる事ができます。</p>



<p>幾つかのケースを例としてあげてみます。</p>



<h2 class="wp-block-heading">パラメータを増やす</h2>



<p>例えば、下記のようにパラメータにIDを渡して記事を表示するコントローラを作ったとします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/article/show/12345</p>
</blockquote>



<p>これに対して、IDだけではなくカテゴリも渡したいとします。 カテゴリは、IDの前に挟む形とします。例えば、こんなふうに。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/article/show/news/12345</p>
</blockquote>



<p>これを実現するためのルーティング設定は、次のようになるでしょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Route::set(
    <span class="hljs-string">'article'</span>,  <span class="hljs-comment">// 1. ルーティングの名前</span>
    <span class="hljs-string">'(&amp;lt;controller&gt;(/&amp;lt;action&gt;(/&amp;lt;category&gt;(/&amp;lt;id&gt;))))'</span>, <span class="hljs-comment">// 2. ルーティングルール</span>
    <span class="hljs-keyword">array</span>( <span class="hljs-string">'controller'</span> =&gt; <span class="hljs-string">'article'</span> ) <span class="hljs-comment">// 3. ルールを適用する条件</span>
);
</code></span></pre>


<p>名前は重複しなければ好きな名前で良いです。 第三引数の「ルールを適用する条件」は、URLがルーティングルールによって解析された結果、 &#8220;controller&#8221; の値が &#8220;article&#8221; である場合に適用する、という事を示しています。</p>



<p>&#8220;article&#8221; の部分は正規表現として処理されるので、 もしも &#8220;information&#8221; コントローラでもこのルーティングを使用したければ、下記のようにすればよいでしょう。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>array( &#8216;controller&#8217; =&gt; &#8216;(article|information)&#8217; ),</p>
</blockquote>



<h2 class="wp-block-heading">パラメータを省略する</h2>



<p>例えば、ユーザのプロフィールを表示するためのコントローラを作ったとします。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Users</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    …
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_profile</span><span class="hljs-params">()</span></span>{
        <span class="hljs-comment">// プロフィールを表示する処理</span>
    }
    ...
}
</code></span></pre>


<p>現状のアクセス方法は以下のようになっていますが、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/users/profile/john</p>
</blockquote>



<p>次のようにシンプルにしたい。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/john</p>
</blockquote>



<p>この方がよりわかりやすく、ドメインとユーザ名だけ覚えておけば簡単にアクセス出来ますね。 これを実現する為に、次のようなルーティング設定をしてみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">/**
 * デフォルトのルーティング
 */</span>
Route::set(
    <span class="hljs-string">"default"</span>,
    <span class="hljs-string">"(&amp;lt;controller&gt;(/&amp;lt;action&gt;(/&amp;lt;id&gt;)))"</span>,
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"controller"</span> =&gt; <span class="hljs-string">"(foo|bar|users)"</span> <span class="hljs-comment">// 定義済みコントローラ名を羅列</span>
    )
)
-&gt;defaults(
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"controller"</span> =&gt; <span class="hljs-string">"welcome"</span>,
        <span class="hljs-string">"action"</span> =&gt; <span class="hljs-string">"index"</span>
    )
);

<span class="hljs-comment">/**
 * Controller_Users用のショートカット
 */</span>
Route::set(
    <span class="hljs-string">"users_shortcut"</span>,
    <span class="hljs-string">"&amp;lt;user_id&gt;(/&amp;lt;action&gt;)"</span>,
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"user_id"</span> =&gt; <span class="hljs-string">"&#91;a-zA-Z0-9_]+"</span> <span class="hljs-comment">// user_id用の正規表現</span>
    )
)
-&gt;defaults(
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"controller"</span> =&gt; <span class="hljs-string">"users"</span>, <span class="hljs-comment">// 初期設定のコントローラ</span>
        <span class="hljs-string">"action"</span> =&gt; <span class="hljs-string">"profile"</span> <span class="hljs-comment">// 初期設定のアクション</span>
    )
);
</code></span></pre>


<p>前半部分は、元々あったデフォルトのルールを弄り、 既に定義済みのコントローラ名にマッチする物だけに適用されるようにしました。</p>



<p>後半は肝となるController_Usersのショートカット用のルールです。 ユーザーIDの書式にマッチする物であれば、Controller_Usersのアクションを実行するようになります。</p>



<p>(/<action>) の部分は、ユーザーIDの後にメソッド名を渡す事で、 プロフィール閲覧以外のアクションが起こせるようにするための物です。</action></p>



<p>例えば、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>http://www.example.com/john/favorites</p>
</blockquote>



<p>等とすれば、Controller_Usrs の action_favorites が呼ばれ、 johnさんがお気に入りに登録した情報が表示される、といった事が出来ます。</p>



<p>尚、Kohanaでは controller と action はルーティングにおいて必須になっており、 上で挙げた例のように省略したい場合は、必ず defaults メソッドで初期値を設定してやる必要があります。</p>



<h3 class="wp-block-heading">ユーザ名の予約語</h3>



<p>ここで気をつけなければならないのは、このようなURLにする場合、 コントローラ名として定義されている物はユーザ名として提供できなくなるという事です。</p>



<p>それらを予約語としてリスト化する等して、登録時にはじく処理を加える必要がありますね。</p>



<h2 class="wp-block-heading">様々な形式のフィードを出力する</h2>



<p>ルーティングは、必ずしも /（スラッシュ）のみで区切られていなければならないわけではありません。 その一例として、RSSやAtom、JSON等、様々な形式で情報を出力したい場合のルーティングの例を挙げます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Route::set(
    <span class="hljs-string">"feed"</span>,
    <span class="hljs-string">"&amp;lt;controller&gt;.&amp;lt;filetype&gt;"</span>,
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"controller"</span> =&gt; <span class="hljs-string">"feed"</span>,
        <span class="hljs-string">"filetype"</span> =&gt; <span class="hljs-string">"(xml|rss|atom|json)"</span>
    )
)
-&gt;defaults(
    <span class="hljs-keyword">array</span>(
        <span class="hljs-string">"action"</span> =&gt; <span class="hljs-string">"index"</span>
    )
);
</code></span></pre>


<p>コントローラはこのような感じで。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Feed</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    ...
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_index</span><span class="hljs-params">()</span></span>{
        $filetype = <span class="hljs-keyword">$this</span>-&gt;request-&gt;param(<span class="hljs-string">"filetype"</span>);
        <span class="hljs-comment">// フィードを出力する処理</span>
    }
}
</code></span></pre>


<p>次のようなパスでアクセスできます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/feed.rss</p>
</blockquote>



<p>cf) <a href="http://kohanaframework.org/3.2/guide/kohana/routing">Routing | Kohana User Guide</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>見通しの良いURLは、アプリケーションの使い勝手を向上させると思います。 URLのデザインにも気を使ってあげたいですね。</p>



<p>次回は、ビューについて。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>» <a href="/2012/05/get-started-with-kohana-index.html">もくじ</a></p>



<ol class="wp-block-list">
<li><a href="/2012/05/get-started-with-kohana-01.html">Hello World !</a></li>



<li><a href="/2012/05/get-started-with-kohana-02.html">コントローラとビューの基本</a></li>



<li><a href="/2012/05/get-started-with-kohana-03.html">コントローラ</a></li>



<li><em>ルーティング</em></li>



<li><a href="/2012/05/get-started-with-kohana-05.html">ビュー</a></li>



<li><a href="/2012/05/get-started-with-kohana-06.html">モデルとデータベース</a></li>



<li><a href="/2012/05/get-started-with-kohana-07.html">バリデーション</a></li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのKohana (3) : コントローラ</title>
		<link>https://blog.mach3.jp/2012/05/23/get-started-with-kohana-03.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Wed, 23 May 2012 01:00:10 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2456</guid>

					<description><![CDATA[「はじめてのKohana」の第三回目です。 前回ご紹介したコントローラをもう少し詳しく紹介します。 コントローラファイル まずはコントローラファイルのおさらいから。 Kohanaのコントローラは、命名規則に従ってクラス名 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「はじめてのKohana」の第三回目です。 前回ご紹介したコントローラをもう少し詳しく紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2456"></span>



<h2 class="wp-block-heading">コントローラファイル</h2>



<p>まずはコントローラファイルのおさらいから。</p>



<p>Kohanaのコントローラは、命名規則に従ってクラス名やアクション名をつけ、 application/class/controller に格納する決まりとなっています。</p>



<p>例えば、あるコンテンツに /foo/bar でアクセスしたい場合。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Foo</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    ...
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_bar</span><span class="hljs-params">()</span></span>{
        <span class="hljs-comment">// do something</span>
    }
    ...
}
</code></span></pre>


<p>こんな内容を、application/classes/controller/foo.php に保存すればOKです。</p>



<h2 class="wp-block-heading">パラメータを受け取る</h2>



<p>動的なWebページを生成する為には、URLを介してパラメータを受け取るのが基本です。</p>



<p>他のWebアプリケーションフレームワーク同様、 クラス名・アクション名の後にパラメータを渡して それをコントローラ内で受け取る事が出来ます。</p>



<p>例えば、「記事の詳細をIDを渡して表示させるアクションを作る」場合。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/article/show/12345</p>
</blockquote>



<p>このようにして記事のIDを3つ目のパラメータとして渡します。 このIDをコントローラ側で受け取るには、 $this-&gt;request-&gt;param($key) とします。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Article</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    ...
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_show</span><span class="hljs-params">()</span></span>{
        $id = <span class="hljs-keyword">$this</span>-&gt;request-&gt;param(<span class="hljs-string">"id"</span>); <span class="hljs-comment">// &lt;= "12345"</span>
        <span class="hljs-comment">// id を元にして何かをする</span>
    }
    ...
}
</code></span></pre>


<p>上のコードではparamメソッドの引数には&#8221;id&#8221;なる文字列が渡されていますが、 これはルーティングの設定でそのようなキーが設定されているためです。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Route::set(<span class="hljs-string">'default'</span>, <span class="hljs-string">'(&lt;controller&gt;(/&lt;action&gt;(/&lt;id&gt;)))'</span>)
    -&gt;defaults(<span class="hljs-keyword">array</span>(
        <span class="hljs-string">'controller'</span> =&gt; <span class="hljs-string">'welcome'</span>,
        <span class="hljs-string">'action'</span>     =&gt; <span class="hljs-string">'index'</span>,
    ));
</code></span></pre>


<p>ルーティングの設定は、bootstrap.php の最後に記載されています。 デフォルトでは下記コードのように、3つ目のパラメータが&#8221;id&#8221;とされている為、 paramメソッドで引っ張ってこれたわけです。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml">'(<span class="hljs-tag">&lt;<span class="hljs-name">controller</span>&gt;</span>(/<span class="hljs-tag">&lt;<span class="hljs-name">action</span>&gt;</span>(/<span class="hljs-tag">&lt;<span class="hljs-name">id</span>&gt;</span>)))'
</code></span></pre>


<p>このルーティングは追加・編集する事で様々な事が実現できますが、 その話はまた別の機会に。</p>



<h2 class="wp-block-heading">before / after</h2>



<p>Kohanaのコントローラではコンスラクタは使用できません。（不可能ではないですが、推奨されません） その代替として、アクションメソッドの実行前後に処理されるbefore / after メソッドを使うことが出来ます。</p>



<h3 class="wp-block-heading">before メソッド</h3>



<p>アクションメソッドが実行される前に処理されます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Foo</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    <span class="hljs-keyword">private</span> $title = <span class="hljs-keyword">null</span>;

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">before</span><span class="hljs-params">()</span></span>{
        <span class="hljs-keyword">$this</span>-&gt;title = <span class="hljs-keyword">$this</span>-&gt;request-&gt;controller() . <span class="hljs-string">" - "</span> . <span class="hljs-keyword">$this</span>-&gt;request-&gt;action();
    }

    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_index</span><span class="hljs-params">()</span></span>{
        <span class="hljs-keyword">echo</span> <span class="hljs-keyword">$this</span>-&gt;title; <span class="hljs-comment">// &lt;= "foo - index"</span>
    }
}
</code></span></pre>


<h3 class="wp-block-heading">after メソッド</h3>



<p>アクションメソッドが実行された後に処理されます。</p>



<p>下記はコントローラ名とアクション名から勝手にビューを出力してみる例。 fooコントローラのindexアクションの場合、ビューファイル &#8220;foo/index.php&#8221; を出力します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Foo</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    ...
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">after</span><span class="hljs-params">()</span></span>{
        $name = <span class="hljs-keyword">$this</span>-&gt;request-&gt;controller() . <span class="hljs-string">"/"</span> . <span class="hljs-keyword">$this</span>-&gt;request-&gt;action();
        $view = View::factory($name);
        <span class="hljs-keyword">$this</span>-&gt;response-&gt;body($view);
    }
    ...
}
</code></span></pre>


<p>cf) <a href="http://kohanaframework.org/3.2/guide/kohana/mvc/controllers">Controllers | Kohana User Guide</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>今回はKohanaのコントローラについて少し掘り下げました。 次回は、コントローラと切れない関係にあるルーティングの紹介をします。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>» <a href="/2012/05/get-started-with-kohana-index.html">もくじ</a></p>



<ol class="wp-block-list">
<li><a href="/2012/05/get-started-with-kohana-01.html">Hello World !</a></li>



<li><a href="/2012/05/get-started-with-kohana-02.html">コントローラとビューの基本</a></li>



<li><em>コントローラ</em></li>



<li><a href="/2012/05/get-started-with-kohana-04.html">ルーティング</a></li>



<li><a href="/2012/05/get-started-with-kohana-05.html">ビュー</a></li>



<li><a href="/2012/05/get-started-with-kohana-06.html">モデルとデータベース</a></li>



<li><a href="/2012/05/get-started-with-kohana-07.html">バリデーション</a></li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのKohana (2) : コントローラとビューの基本</title>
		<link>https://blog.mach3.jp/2012/05/22/get-started-with-kohana-02.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 22 May 2012 01:00:01 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2450</guid>

					<description><![CDATA[「はじめてのKohana」の第二回目は、コントローラとビューのごく基本的な使い方を紹介します。 ルーティングとコントローラ まず、前記事で表示された「hello, world !」の実体はどこにあるのか、から見てみましょ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「はじめてのKohana」の第二回目は、コントローラとビューのごく基本的な使い方を紹介します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2450"></span>



<h2 class="wp-block-heading">ルーティングとコントローラ</h2>



<p>まず、前記事で表示された「hello, world !」の実体はどこにあるのか、から見てみましょう。 bootstrap.php を見てみると、末尾に次のような設定記述があります</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Route::set(<span class="hljs-string">'default'</span>, <span class="hljs-string">'(&lt;controller&gt;(/&lt;action&gt;(/&lt;id&gt;)))'</span>)
    -&gt;defaults(<span class="hljs-keyword">array</span>(
        <span class="hljs-string">'controller'</span> =&gt; <span class="hljs-string">'welcome'</span>,
        <span class="hljs-string">'action'</span>     =&gt; <span class="hljs-string">'index'</span>,
    ));
</code></span></pre>


<p>詳しい説明は省きますが、ここでは全てのパラメータを省略してアクセスされた場合のルーティングの設定をしています。 初期設定では、&#8221;welcome&#8221; コントローラの &#8220;index&#8221; アクションを呼ぶ設定となっています。 ではそのコントローラはどこに格納されているかというと、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/application/classes/controller/welcome.php</p>
</blockquote>



<p>ここにあるわけです。コントローラは全て、このディレクトリに設置する決まりとなっています。 さらにファイルの中身を見てみます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span> defined(<span class="hljs-string">'SYSPATH'</span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">die</span>(<span class="hljs-string">'No direct script access.'</span>);

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Welcome</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_index</span><span class="hljs-params">()</span>
    </span>{
        <span class="hljs-keyword">$this</span>-&gt;response-&gt;body(<span class="hljs-string">'hello, world!'</span>);
    }
} <span class="hljs-comment">// End Welcome</span>
</span></code></span></pre>


<p>中身を見ると、どのような命名規則になっているのか大体わかりますね。 このルールに則ってコントローラ・アクションを探し、無かった場合は404を返す仕組みです。</p>



<ul class="wp-block-list">
<li>ファイル名 : &#8220;welcome.php&#8221; （[name].php）</li>



<li>コントローラ名 : &#8220;Controller_Welcome&#8221; （Controller_[Name]）</li>



<li>アクション名 : &#8220;action_index&#8221; （action_[name]）</li>
</ul>



<p>例えば /foo/bar でアクセスさせたい場合は、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>/application/classes/controller/foo.php</p>
</blockquote>



<p>を設置し、内容を次のようにします。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="php"><span class="hljs-meta">&lt;?php</span> defined(<span class="hljs-string">'SYSPATH'</span>) <span class="hljs-keyword">or</span> <span class="hljs-keyword">die</span>(<span class="hljs-string">'No direct script access.'</span>);

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Controller_Foo</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_bar</span><span class="hljs-params">()</span>
    </span>{
        <span class="hljs-comment">// do something</span>
    }
}
</span></code></span></pre>


<h2 class="wp-block-heading">
  ビューを使って出力する<br />
</h2>



<p>
  上の例では文字列をそのまま出力していますが、Webアプリケーションを作る場合はビューファイルを使用します。<br />
  ビューファイルの格納場所は
</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>
    /application/views/
  </p>
</blockquote>



<p>
  です。ここでは名前を &#8220;foo&#8221; として、 foo.php を作ってみましょう。
</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>
    /application/views/foo.php
  </p>
</blockquote>



<p>
  中身は適当なHTMLを記述しておきます。<br />
  （実際は値を受け取る等しますが、それはまた別の記事で）
</p>



<h1 class="wp-block-heading">Hello !!</h1>



<p>こんにちは！</p>



<p>
  次に、設置したビューファイルをコントローラから出力してみます。<br />
  先程作ったfooコントローラのbarアクションを編集しましょう。
</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">action_bar</span><span class="hljs-params">()</span>
</span>{
    $view = View::factory(<span class="hljs-string">"foo"</span>);
    <span class="hljs-keyword">$this</span>-&gt;response-&gt;body($view);
}
</code></span></pre>


<p>
  View::factory(&#8220;[view_name]&#8221;); でビューファイルを基にしたビューインスタンスが生成され、<br />
  それを元に $this-&gt;response-&gt;body() で出力をします。
</p>



<p>
  再度 /foo/bar にアクセスすると、設置したビューファイルの中身が出力されるはずです。
</p>



<h2 class="wp-block-heading">
  まとめ<br />
</h2>



<p>
  Kohanaのコントローラとビューの基本的な点をまとめました。<br />
  次回は、コントローラについてもう少し詳しくご紹介します。
</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>
  » <a href="/2012/05/get-started-with-kohana-index.html">もくじ</a>
</p>



<ol class="wp-block-list">
<li><br />    <a href="/2012/05/get-started-with-kohana-01.html">Hello World !</a><br />  </li>



<li><br />    <em>コントローラとビューの基本</em><br />  </li>



<li><br />    <a href="/2012/05/get-started-with-kohana-03.html">コントローラ</a><br />  </li>



<li><br />    <a href="/2012/05/get-started-with-kohana-04.html">ルーティング</a><br />  </li>



<li><br />    <a href="/2012/05/get-started-with-kohana-05.html">ビュー</a><br />  </li>



<li><br />    <a href="/2012/05/get-started-with-kohana-06.html">モデルとデータベース</a><br />  </li>



<li><br />    <a href="/2012/05/get-started-with-kohana-07.html">バリデーション</a><br />  </li>
</ol>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>はじめてのKohana (1) Hello World !</title>
		<link>https://blog.mach3.jp/2012/05/21/get-started-with-kohana-01.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 21 May 2012 01:00:47 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kohana]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[PHP]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=2442</guid>

					<description><![CDATA[KohanaはPHPのMVCフレームワークです。 日本語情報が乏しいせいか、まだあまり国内では使われていない印象ですが、 ここに導入のメモを記してみます。全七回。 はじめに 本連載は、私がKohanaに興味をもって導入し [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>KohanaはPHPのMVCフレームワークです。 日本語情報が乏しいせいか、まだあまり国内では使われていない印象ですが、 ここに導入のメモを記してみます。全七回。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-NwJo8J6DtR4/T7PQXXXKF-I/AAAAAAAABgs/G7mylmhDbxI/s400/20120517.png" alt="はじめてのKohana"/></figure>



<p></p>



<span id="more-2442"></span>



<h2 class="wp-block-heading">はじめに</h2>



<p>本連載は、私がKohanaに興味をもって導入し、色々試してみた記録をまとめたものなので、 あまり体系的に紹介できていない部分があるかもしれませんが、ご了承ください。 また、導入時に書いた物なので、そこまで突っ込んだ内容はありません。</p>



<p>Kohanaの日本語情報は日本ユーザ会による翻訳ドキュメントぐらいしか無く（内容は1バージョン前だったりします）、 公式（英語）もそこまできちんと整備されているわけではなく、まだ歯抜けも見られるのが現状です。 そんな中で、少しでも情報を補足・共有出来れば良いなと思い、筆をとった次第です。</p>



<p>執筆当時の最新版（バージョン3.2）を基にして書かれています。</p>



<p>対象読者は以下を想定しております。</p>



<ul class="wp-block-list">
<li>PHPを書いたことがある</li>



<li>MVCフレームワークを知っている・使ったことがある</li>



<li>Kohanaに興味がある</li>
</ul>



<h2 class="wp-block-heading">Kohanaについて</h2>



<ul class="wp-block-list">
<li><a href="http://kohanaframework.org/">Kohana: The Swift PHP Framework(公式)</a></li>



<li><a href="http://kohana-users.jp/">Kohana 日本ユーザ会</a></li>
</ul>



<p>Kohanaは<a href="http://codeigniter.com/">CodeIgniter</a>からのフォークとして生まれた、PHPのWebアプリケーションフレームワークです。 （執筆時にWikipediaを見るまでは、CIのフォークだとは存じませんでしたが…）</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Kohanaは、モデル・ビュー・コントローラ アキーテクチャパターンを使ったPHP5のフレームワークである。Kohanaは、セキュアで、軽量、かつ、簡単に利用できるということを目標としている。</p>
</blockquote>



<p>cf) <a href="http://ja.wikipedia.org/wiki/CodeIgniter#.E3.83.97.E3.83.AD.E3.82.B8.E3.82.A7.E3.82.AF.E3.83.88.E3.81.AE.E6.B4.BE.E7.94.9F.E3.83.BB.E5.88.86.E5.B2.90">プロジェクトの派生・分岐 | CodeIgniter &#8211; Wikipedia</a></p>



<h2 class="wp-block-heading">インストール</h2>



<p>まずは導入から。 Kohanaの公式サイトから、最新版をダウンロードし、任意の場所に解凍します。</p>



<ul class="wp-block-list">
<li><a href="http://kohanaframework.org/download">Download Kohana</a></li>
</ul>



<p>完了したら、インストールした場所にhttpdを通してアクセスしてみましょう。すると、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Environment Test</p>
</blockquote>



<p>とやらが表示されます。 これは、使用しているサーバがKohanaを走らせる条件を満たしているかどうかをチェックしてくれるスクリプトです。 無事全ての項目がテストをパスすると、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Your environment passed all requirements.</p>
</blockquote>



<p>と下に表示されるので、指示通り install.php をリネームまたは削除します。</p>



<h2 class="wp-block-heading">初期設定</h2>



<p>「Hello World !」を表示させる前に、幾つかの設定をこなす必要があります。</p>



<h3 class="wp-block-heading">ディレクトリのアクセス権を設定</h3>



<p>以下の2つのディレクトリに書き込み権限を付与します。</p>



<ul class="wp-block-list">
<li>application/cache</li>



<li>application/logs</li>
</ul>



<h3 class="wp-block-heading">ベースURLを設定する</h3>



<p>基本的なアプリケーションの設定は、application/bootstrap.phpで行います。 ここでは、Webアプリケーションの起点となるベースURLを設定します。 だいたい82行目あたりです。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Kohana::init(<span class="hljs-keyword">array</span>(
    <span class="hljs-string">'base_url'</span>   =&gt; <span class="hljs-string">'/'</span>,
));
</code></span></pre>


<p>ルートディレクトリに設置している場合はそのままでよいですが、 例えば http://www.example.com/myapp/ のようにサブディレクトリに設置した場合はここの値を弄る必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">Kohana::init(<span class="hljs-keyword">array</span>(
    <span class="hljs-string">'base_url'</span>   =&gt; <span class="hljs-string">'/myapp/'</span>, <span class="hljs-comment">// 環境にあわせて書き換え</span>
));
</code></span></pre>


<h3 class="wp-block-heading">.htaccessの設定</h3>



<p>mod_rewriteを使用する為の設定を.htaccessに記述しておきます。 といっても雛形が既に用意されているので、基本的にはそれをリネームすればOKです。</p>


<pre class="wp-block-code"><span><code class="hljs">$ mv example.htaccess .htaccess
</code></span></pre>


<p>前項でベースURLの変更をした場合は、RewriteBaseの値も書き換えるのを忘れずに。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">RewriteBase /myapp/ <span class="hljs-comment"># 環境によって書き換え</span>
</code></span></pre>


<h3 class="wp-block-heading">Hello World !</h3>



<p>以上の設定をこなして、あらためてルートディレクトリにアクセスすると、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>hello, world !</p>
</blockquote>



<p>が出力される、はずです。お疲れ様でした！</p>



<p>cf) <a href="http://kohanaframework.org/3.2/guide/kohana/install">Installation | Kohana User Guide</a></p>



<h2 class="wp-block-heading">まとめ</h2>



<p>KohanaのインストールからHello world !までをご紹介しました。 次回は、コントローラとビューの簡単な使い方について。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>» <a href="/2012/05/get-started-with-kohana-index.html">もくじ</a></p>



<ol class="wp-block-list">
<li><em>Hello World !</em></li>



<li><a href="/2012/05/get-started-with-kohana-02.html">コントローラとビューの基本</a></li>



<li><a href="/2012/05/get-started-with-kohana-03.html">コントローラ</a></li>



<li><a href="/2012/05/get-started-with-kohana-04.html">ルーティング</a></li>



<li><a href="/2012/05/get-started-with-kohana-05.html">ビュー</a></li>



<li><a href="/2012/05/get-started-with-kohana-06.html">モデルとデータベース</a></li>



<li><a href="/2012/05/get-started-with-kohana-07.html">バリデーション</a></li>
</ol>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
