すたらブログ

文系Webプログラマの備忘録

CodeIgniter2.1.4の不満点

10月20日からCodeIgniterを勉強してます。
基本的なCRUD機能を入れただけの簡潔なサンプルを作ってみました。

この過程で気づいた不満点をメモしておきます。

環境

  • CodeIgniter 2.1.4
  • SQLite3
  • Bootstrap 3.0.0

URLサフィックスの問題、または外部JSファイルを読み込む機能の不備

URLサフィックスを設定すると、偽の拡張子を接尾辞としてURLに追加でき、一見してフレームワークで作ったことが分からないようにできます。

が、これを設定すると外部JavaScriptファイルを呼び出す手段が回りくどくなってしまいます。
どういうことかというと、CSSと違ってJavaScriptは外部ファイルを読み込むヘルパーがなく、scriptタグを書くしかありません。
で、src属性にパスを記述する際にはURLヘルパーのsite_url()が便利です。

が、 URLサフィックスを使っている場合 は下記のように意図せぬ接尾辞が追加されてしまいます。

// PHPの記述
<?php $this->load->helper('url') ?>
<script src="<?php print site_url('assets/js/test.js') ?>"></script>

// 実際の表示
<script src="http://localhost/assets/js/test.js.html"></script>

“/test.js.html"って…orz
そんなわけで、現在はURLサフィックスは使っていません (-_-;)

フラッシュデータが正しく動作しない

フラッシュデータを使うと、一回限りのメッセージを表示する場合などに便利です。

が、なぜか私の環境では正しく動作しません。
一回限りのメッセージが表示されたりされなかったり、次のページで表示されたり…。
結局、現在は普通のセッションクラスを使って一回限りのメッセージを実装しています。

<!-- ビュー内 -->
<?php if ($msg = $this->session->userdata('msg')) : ?>
    <div><?php print $msg ?></div>
    <?php $this->session->unset_userdata('msg') ?>
<?php endif ?>

※ なお、セッションクラスを使う場合はconfig.phpencryption_keyに任意の文字列を設定しなくてはなりません。

<?php
$config['encryption_key'] = 'ninninomojiretsu';

感想

以上のような不満点はありますが、CodeIgniterにはおおむね好印象を持っています。
使い方やDBとの連携を規約でガチガチに固めずシンプルなMVCを提供してくれているので、規約外のカスタマイズにも気軽に手を付けられます。
初期設定も圧縮ファイルを解凍してサーバに置くだけですし、フレームワークを初めて使う場合はCakePHPよりもとっつきやすいのではないでしょうか。
オブジェクト指向MVCを学ぶにはお手頃だと思います。