2009-10-26 14 views
10

CIシステムの\ librariesディレクトリにDD_Controller.phpという名前の新しいクラスがあります。このファイルには、次のようになります。コードイグナイターコントローラークラスを拡張するにはどうすればよいですか?

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class DD_Controller extends Controller 
{ 
    protected $ddauthentication; 


    function __construct() 
    {   
     parent::Controller(); 
     $this->ddauthentication = "Authenticated"; 
    } 
} 
?> 

私のアプリケーションのコントローラは、このように定義されています

class Inquiry extends DD_Controller 
{...} 

私はコントローラを拡張する際にお問い合わせクラスが正常に動作しますが、私は

Fatal error: Class 'DD_Controller' not found in C:\development\localhost\applications\inquiry\controllers\inquiry.php on line 4

た場合の取得しますDD_Controllerを拡張します。 configファイルでは、私はそのように定義された接頭辞を持っています:

$config['subclass_prefix'] = 'DD_'; 

私が迷っているものはありますか?

TIA

答えて

4

あなたが複数のアプリケーションに同じCIを使用している、とあなたはそれらすべてが自分のコントローラを拡張することができるようにしたい場合はDD_Controller.phpは中/システム/アプリケーション/ライブラリ/

する必要がありますあなたのカスタム1つにすると、同じファイル内のベースコントローラクラスを拡張することができます。

システム/ライブラリ/ Controllerクラス以下Controller.phpで

:次に、アプリのコントローラでこれを行うことができるでしょう

class Mega_Controller extends Controller { 
    function Mega_Controller() 
    { 
     parent::Controller(); 
     // anything you want to do in every controller, ye shall perform here. 
    } 
} 

class Home extends Mega_Controller { 
    .... 

拡張コントローラクラスので、あなたが作成されます。私はこれがベースコントローラーを上書きする方が良いと思うが、それもうまくいくだろう。

+0

を:私はそうのように、親クラスの名前を拡張することを確認し、adminchild.phpそれはadminchild.php

  • オープン呼び出し、あなたのコントローラのコードを作成します。しかし、それは私たちが探しているものではありません。私たちが単一のアプリケーション環境にあったならば、あなたのソリューションは完璧です。 しかし、すべてのアプリで同じプライマリベースコントローラを共有したいと考えています。 System/Controller.phpの置き換えが間に合わない - これはできますか? – ChronoFish

  • +0

    LOL - これはまさに私が思いついた解決策です。それはコントローラにコード変更がなく、ファイルへの変更が制限されていないため、すべてのアプリケーションで使用可能です。 ご協力いただきありがとうございます。 – ChronoFish

    4

    CodeIgniterコアファイルを「クラッキングする」ことを避けることをお勧めします。 ネイティブの可能性を広げて、その中に収まるようにしてください。

    PHPライブラリ/ CMSの場合と同じルールをお勧めします。 このルールにはいくつかの理由があります。 - takintを使用せずにquiklkyアップグレードする機能。何千ものノートがコアファイルにどこでクラックされたのか? - 移植性。 - あなたのコードを共有する可能性があります。たとえば、必要に応じてあなたとあなたの友人の両方が利用できるようになり、あなたのライブラリを最新の状態に保つのに役立ちます。

    他の言葉で言えば、これははるかに専門的であり、将来的にはユーザビリティ、移植性、更新アプリケーションの可能性によってあなたに支払われます。あなたの個人的な質問については

    ...私として

    は、あなたがコントローラのコンストラクタでこのライブラリをロードし、その後、ネイティブのCodeIgniterのコントローラを拡張する必要があり、作業が完了しているすべてのものを使用して独自のライブラリを作成するには、悪いものは何もありません。使いやすさを向上させる唯一の方法は、ライブラリに短い名前を付けることです。

    あなたも、あなたが異なる部分で必要なものを分割し、別々のライブラリに入れることができますこの方法: WebFeatures AdminFeatures など

    次に、必要なライブラリをコントローラのコンストラクタにロードするだけで済みます。

    P.S.私は提案された方法が「正しい」OOPコンセプトに適合しないことを知っていますが、同時に、使用するライブラリの完全性について決して忘れてはなりません。

    上記の内容は、プロのWeb開発における私の7年間の経験をもう一度見ているだけなので、私がそれに従わないと、少なくとも考慮に入れておくと役立つことを願っています。

    よろしく、 アントン

    5

    これは、より良いアプローチです。以下のディレクトリに

    1. 移動:次の操作を行いyour_ci_app/application/core/をしてMY_Controller.phpと呼ばれるPHPファイルを作成
    2. 開き、作成したばかりのこのファイルを(このファイルは、あなたの一番上の親クラスが存在する場所になります)と追加しますそのようなあなたの複数のクラス、:

      class Admin_Parent extends CI_Controller { 
          public function __construct() { 
           parent::__construct(); 
          } 
      
          public function test() { 
           var_dump("from Admin_Parent"); 
          } 
      } 
      
      class User_Parent extends CI_Controller { 
      
          public function __construct() { 
           parent::__construct(); 
          } 
      
          public function test(){ 
           var_dump("from User_Parent"); 
          } 
      
      } 
      
    3. あなたの子供は、このディレクトリの下にyour_ci_app/application/controllers/コントローラを作成します。 - ありがとうござい*作業*を行い

      class Adminchild extends Admin_Parent { 
      
          function __construct() { 
           parent::__construct(); 
          } 
      
          function test() { 
           parent::test(); 
          } 
      
      } 
      
    関連する問題