Como faço para estender a classe controlador de ignição código?
-
06-07-2019 - |
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
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:
- Vá para o seguinte diretório:
your_ci_app/application/core/
e criar um arquivo php chamadoMY_Controller.php
(este arquivo será onde suas principais classes pai irá residir) -
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"); } }
-
Crie seus controladores de crianças no âmbito deste
your_ci_app/application/controllers/
diretório. Vou chamá-loadminchild.php
-
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