Qual a melhor forma de customizar o framework?

Uma tarefa muito comum em nosso cotidiano é modificar os comportamentos padrões do framework.

Este tutorial exemplifica como modificar as classes Controller e Active Record:

http://www.yiiframework.com/wiki/121/extending-common-classes-to-allow-better-customization

O melhor local para se armazenar estas classes customizadas é em "protected/components"?

E em classes de terceiros (pacote Zend)?

E se tratando de funcionalidades acopladas, tal como um WebService ou um simples Yii::Import, a qual você não necessita especificar o "extend" da classe, como tratar nestes casos?

:lol:

Eae Huntz,

Eu praticamente coloco as alterações do próprio Yii no components/ com subpastas.

Mais recentemente usei o pacote do Zend e adicionei em protected/vendors/Zend.

Por que vendors? Vi em alguma wiki aqui no site hehehe

E aí Newerton!

Bacana, você também é de Big Field? HAHA!

Nos plugins de terceiros também tenho adotado dessa forma, tudo em "vendors".

É uma ideia que já é conhecida no Rails e também no CakePHP.

Não achei DRY essa parte de ter que dar Yii:Import e em seguida Require_Once.

Queria rescrever esse tratamento, mas aí não compreendi a forma de sobrescrever isso.

Jogaria em "components" e em seguida declararia isso no "components" da aplicação apontando a classe?

http://www.yiiframework.com/forum/index.php?/topic/22774-what-better-way-to-customize-the-framework/page__gopid__111342

Não sei se é isso que vc quer mas uma sugestão seria você pode criar uma classe Helper dentro de components usando métodos estáticos, por exemplo:




<?php


class CommonHelper

{      

        public static function importVendors($url)

        {

            Yii::import('application.vendors.*');

            require_once $url;

        }

}



ai vc pode chamar esta função diretamente em qualquer lugar das suas classes usando:




CommonHelper::importVendors($url);



ai vc pode fazer da forma que achar melhor :D

Verdade! Um helper seria o melhor caso pra resolver esse problema dos imports / requires.

Mas fica aí a dúvida de quando for pra sobrescrever, ou ainda complementar, classes nativas da aplicação.

Acho que o caminho seria esse que comentei. Declara em components e aponta a classe extendida.

Vou fazer uns testes e aí comento a thread depois :)

Eae, eu ERA hehehe estou aqui em Londrina trampando!

Vou te mostrar um Widget que fiz com Rede Social, vou mostrar o init() dele de como eu viz:


class boxRedeSocial extends CWidget {


    public $imagem;


    public function init() {


        Yii::import('application.vendors.*');

        require_once 'Zend/Loader.php';


        Zend_Loader::loadClass('Zend_Service_Twitter');

        Zend_Loader::loadClass('Zend_Oauth_Token_Access');

    }


...

}

Eu já tenho este entendimento, a partir de várias leituras no manual e nos fontes do Yii:

  • extensions: Como o nome sugere, são extensões, ou seja, vc está extendendo funcionalidade do proprio Yii. Logo, esta é a pasta das modificações em cima do framework.

  • components: tudo o que for de terceiros.