2009-10-26 14 views
10

CI sistemimde \ libraries dizininde DD_Controller.php adlı yeni bir sınıf var.Kod ateşleyici denetleyici sınıfını nasıl genişletirim?

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

class DD_Controller extends Controller 
{ 
    protected $ddauthentication; 


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

başvurum denetleyici böyle tanımlanır:: Bu dosya şuna benzer ben Kontrolörü uzatmak zaman

class Inquiry extends DD_Controller 
{...} 

Sorgulama sınıfı çalışıyor, ama

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

zaman olsun DD_Controller'ı uzatıyorum. Yapılandırma dosyasında şu şekilde tanımlı önekim var:

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

Eksik olduğum hakkında bir fikrim var mı?

TIA

cevap

4

DD_Controller.php olmalıdır/sistem/uygulama/libraries/

birden fazla uygulama için aynı CI kullanıyorsanız, ve siz hepsini yapabilmek istiyor onların denetleyicileri uzanır Özel olana kadar temel Denetleyici sınıfını aynı dosyaya genişletebilirsiniz. Sistem/Kütüphanelerde

/Controller.php Kontrolör sınıfının altındaki: genişletilmiş denetleyici sınıfının yana

class Home extends Mega_Controller { 
    .... 

:

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

Sonra uygulama denetleyicileri bunu yapmak mümkün olacak oluşturduğunuz mevcut olacak. Bence bu daha sonra baz denetleyicinin üzerine yazıyor, ama bu da işe yarayacak.

+0

: Öyle gibi, ebeveyn sınıfın adını uzatmak için emin olun, adminchild.php o adminchild.php

  • Aç arayacak ve kontroller kodu yaratacaktır. Ama aradığımız şey bu değil. Tek uygulamalı bir ortamda olsaydık - çözümünüz mükemmel olurdu. Ancak, tüm uygulamalarımızın aynı birincil temel denetleyiciyi paylaşmasını istiyoruz. Sistem/Controller.php'nin değiştirilmesi kısa - bu yapılabilir mi? – ChronoFish

  • +0

    LOL - Bu benim de ortaya koyduğum çözüm. En düşük etki olarak görünüyor - Kontrolörde kod değişikliği yok, dosyada sınırlı değişiklik var ve tüm uygulamalarda kullanılabilir. Yardımlarınız için teşekkürler! – ChronoFish

    4

    "Kırma" CodeIgniter çekirdek dosyalarını önlemek için öneririz. Yerel genişletme olanaklarını daha iyi kullanın ve bunlara sığdırmaya çalışın.

    Aynı kural, herhangi bir PHP kütüphanesi/CMS için tavsiye ederim. Bu kuralın birkaç nedeni vardır: - çekirdek dosyalarda nerede ve nasıl çakıldığının dikkate alınması halinde binlerce nota hesaba katılmadan kod çözme becerisi; - taşınabilirlik; - Kodunuzu paylaşma imkanı - örneğin, hem sizin hem de arkadaşlarınızın ihtiyaç duyduğu anda kullanabileceği ve kitaplıklarını güncel tutmaya yardımcı olacak, sizin gibi. Başka bir deyişle, bu çok daha profesyonel ve gelecekte kullanılabilirlik, taşınabilirlik ve uygulama olasılığını güncelleyerek size öder. Kişisel soru bağlamında

    ... Bana gelince

    , sen, CodeIgniter'ın Kontrolörü uzatmak için gereken her şeyi ile kendi kütüphane oluşturmak için kötü bir şey yok, o zaman Denetçi'nin yapıcı bu kitaplığı yüklenemedi ve bitirdiniz. Daha iyi kullanılabilirlik sağlamak için tek şey kütüphanenize kısa ad vermek.

    Bu şekilde bile farklı parçalara ihtiyaç ve ayrı kütüphaneler içine ne koymak bölebilirsiniz: WebFeatures AdminFeatures vs.

    Ardından, denetleyicinizin yapıcısına gerekli kitaplıkları yüklersiniz ve işiniz biter.

    P.S. Önerilen yöntemin "doğru" OOP kavramına uymadığını biliyorum, ama aynı zamanda kullanılan kütüphanelerin bütünlüğünü asla unutmamalısınız.

    Yukarıdaki her şey, profesyonel web geliştirmedeki 7 yıllık deneyimimin bir görünümüdür, dolayısıyla umarım takip etmemeye yardımcı olur, en azından hesaba katılır.

    Selamlar, Anton

    5

    Bu, daha iyi bir yaklaşımdır. aşağıdaki dizine

    1. Git: Aşağıdakileri yapın your_ci_app/application/core/ ve MY_Controller.php adlı bir php dosyası oluşturmak
    2. açın yeni oluşturduğunuz bu dosyayı (Bu dosya üst üst sınıfları bulunacağı olacaktır) ve ekleme böylece gibi birden sınıflar,:

      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. bu dizine your_ci_app/application/controllers/ altında çocuklarınız denetleyicileri oluşturun. - Teşekkür ederim * çalışma * yapar

      class Adminchild extends Admin_Parent { 
      
          function __construct() { 
           parent::__construct(); 
          } 
      
          function test() { 
           parent::test(); 
          } 
      
      } 
      
    İlgili konular