2011-06-18 12 views
4

こんにちは、読んでいただきありがとうございます。CodeIgniter 1.7.3から2.0+への変換

私は、私が完全に使い慣れたCodeIgniter 1.7.3を使用してビルドしてきたウェブサイトプロジェクトを持っていますが、私はCI 2.0+へのアップグレードを検討しています。

私はまっすぐなコピーを試みましたが、コントローラ、モデル、ビューのためのフォルダをCI 2.0フレームワークに移動しましたが、ページを表示しようとしたときに500サーバエラーが発生しました。

私はいくつかの調査をした後、すべてのコントローラが親クラスとして "CI_Controller"を使用しなければならないことを発見しました。また、コントローラクラスにコンストラクタを含める場合は、その名前と親クラスとして "function __construct()"という構文を使用する必要があることに気付きました。 CI 2.0以降では、クラス名と同じ名前のコンストラクタを使用することはサポートされていないようです。 "class Blogs extends CI_controller {function Blogs(){parent :: __ construct();}}"はサポートされなくなりましたか? 私はCI変更ログを読んできましたが、バグ修正や新機能はありますが、古いバージョンのCIとの互換性に関する問題はありませんか? 誰か他の秘密の落とし穴を知っていますか?

おかげで、

H

答えて

7

CI 2.xはPHP4との互換性をすべて削除し、PHP 5.3に準拠するためのいくつかの標準も更新しました。これらのうちの1つが、あなたが遭遇したコンストラクタの問題です。 PHP 5.3以降、関数ClassName()はもはやクラスのコンストラクタではなく、単なる別の関数です。 __construct関数を明示的に宣言して、クラスの新しいインスタンスが作成されたときに実行する必要のあるタスクを実行する必要があります。これを考えると、子コンストラクタ内でparent::ClassName()を呼び出すことは、もはやその関数が親のコンストラクタではなくなるため、もはや意味をなさないはずです。

私が最近取り組まなければならなかった別の落とし穴は、$_GETアレイが現在どのように処理されているかです。 1.xのバージョンでは、クエリ文字列を使用して余分な情報を渡し、URIセグメントを使用してコントローラと関数にルーティングすることができます。これは、AJAX呼び出しで特に役に立ちます.AJAX呼び出しでは、特定のリクエストでサーバーとの間で送受信されるすべてのパラメータを常に把握しているとは限りません。 2.xバージョンでは、config.phpファイルに新しいオプション、$config['allow_get_array']が含まれています。クエリ文字列を使用する場合は、TRUEに設定する必要があります。それ以外の場合は、入力要求クラスごとに$_GET配列をCIの初期化ルーチンの一部としてクリアします。

落とし穴ではないものの、config/autoloadの新しいオプションが役に立つかもしれません。あなたのプロジェクトに新しいアプリケーションディレクトリを追加することを可能にするphp。 CIを使用して多数の異なるプロジェクトを作成し、1つの場所に書き込む有用なライブラリを保持したい場合は、その場所を$autoload['packages']に追加できるようになりました。 CIは、このアレイ内のどのパスにもサブディレクトリ "コントローラ"、 "モデル"、 "ライブラリ"および "ヘルパー"が含まれることを期待しています。あなたがそれらのディレクトリを持っていなくても、あなたがロードしようと思っているもの、つまりメインアプリケーションフォルダと同じように/ライブラリにライブラリが存在する必要があれば、少なくともそれらは必要になります。

+0

これは正確に私が探していた答えです。何とかCI 2.Xが現在PHP 5.3のみに準拠しているという表記が間違っています。私は将来の問題を避けることができます。また、RTFMに必要な "$ autoload ['packages']のヒントもありがたいです。これは本当に便利な機能のようです。 :Dもう一度ありがとう! – hypervisor666

6

あなたは1.7.x to 2.xからのアップグレードのための公式ガイドを読んでいますか?短い

  • 更新モデルとコントローラにおけるよう

    にCI_ModelとCI_Controllerが
  • 更新親コンストラクタうわ

    クラス呼び出し延びている{

     function __construct() 
         { 
          parent::__construct(); 
            //your stuff 
         } 
    
         function index() 
         { 
           // just for example 
         } 
        } 
    
  • CI_Controllerを拡張します
+0

優れた技術的な答えのためにプラス。私はまたあなたの簡潔さとあなたの明快さが好きです。これは私が正しい軌道にいることを確認します。再度、感謝します! – hypervisor666

+0

アップグレードガイドへのリンクありがとう:) – hypervisor666

関連する問題