Pergunta

Na minha CI system \ bibliotecas eu tenho uma nova classe chamada DD_Controller.php. Este arquivo se parece com isso:

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

class DD_Controller extends Controller 
{   
    protected $ddauthentication;


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

O meu controlador de aplicação é definido como este:

class Inquiry extends DD_Controller 
{...}

A classe Inquérito funciona bem quando eu estender Controller, mas eu recebo um

Erro fatal: Class 'DD_Controller' não encontrado em C: \ development \ localhost \ inquérito \ inquiry.php controladores \ aplicativos \ na linha 4

Quando eu estender DD_Controller. No arquivo de configuração que tenho o prefixo definido como tal:

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

Qualquer idéia do que eu estou perdendo?

TIA

Foi útil?

Solução

DD_Controller.php deve estar em / system / application / libraries /

Se você está usando o mesmo CI para vários aplicativos, e você quer todos eles para ser capaz de se estende seus controladores para o seu um costume, em seguida, você pode estender a base de classe Controller no mesmo arquivo.

No sistema / bibliotecas / Controller.php abaixo da classe Controlador:

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

Em seguida, você vai ser capaz de fazer isso em seus controladores de aplicativos:

class Home extends Mega_Controller {
    ....

Uma vez que a classe controlador estendido você criou estará disponível. Eu acho que isso é melhor, em seguida, substituindo o controlador de base, mas que iria funcionar tão bem.

Outras dicas

Esta é uma abordagem melhor. Faça o seguinte:

  1. Vá para o seguinte diretório: your_ci_app/application/core/ e criar um arquivo php chamado MY_Controller.php (este arquivo será onde suas principais classes pai irá residir)
  2. Abrir esta o arquivo que você acabou de criar e adicionar suas múltiplas classes, assim:

    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. Crie seus controladores de crianças no âmbito deste your_ci_app/application/controllers/ diretório. Vou chamá-lo adminchild.php

  4. Open adminchild.php e criar o código de controlador, certifique-se de estender o nome da classe pai, assim:

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

Eu recomendo para evitar "cracking" arquivos de núcleo do Mercante. Melhor usar suas possibilidades se estendem nativas e tentar encaixar neles.

A mesma regra que eu recomendaria para qualquer biblioteca PHP / CMS. Esta regra tem algumas razões: - capacidade de atualização quiclky sem takint em conta milhares de notas onde e como foi rachado em arquivos de núcleo; - portabilidade; - possibilidade de compartilhar o seu código -. Por exemplo, isso vai ser usado por você e seus amigos em caso de necessidade, e vai ajudá-los a manter a sua biblioteca até à data, o mesmo que você

Em outras palavras, isso é muito mais profissional e que paga para você no futuro pela usabilidade, portabilidade e pela possibilidade de aplicação de atualização.

Quanto à sua pergunta pessoal ...

Quanto a mim, não há nada de ruim para criar sua própria biblioteca com tudo que você precisa estender CodeIgniter controlador nativa, em seguida, carregar essa biblioteca no construtor do controlador e está feito. A única coisa a fazer melhor usabilidade é dar nome curto para a sua biblioteca.

Desta forma, você pode até mesmo dividir o que você precisa em diferentes pedaços e colocados em bibliotecas separadas: WebFeatures AdminFeatures etc.

Em seguida, basta carregar bibliotecas necessárias no construtor do seu controlador e está feito.

P.S. Eu sei que caminho proposto não se encaixa em conceito OOP "certo", mas ao mesmo tempo você nunca deve esquecer-se sobre a integridade das bibliotecas usadas.

Tudo acima é apenas mais uma vista de meus 7 anos de experiência em desenvolvimento web profissional, então eu espero que seja útil se não seguir, então, pelo menos, para ter em conta.

Saudações, Anton

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top