Sobrescrevendo Controllers no Magento – O jeito certo

Uma dúvida comum no Magento é sobre a reescrita de controllers. Eu mesmo sempre me esqueço da forma correta de fazer. Existem muitas formas que funcionam, mas certamente há um jeito melhor e menos intrusivo do que o praticado por aí, que muitas vezes contempla até includes do controller original dentro da sua classe.

Uma simulação simples seria para sobrescrever o SubscriberController do módulo Mage_Newsletter (aquele que cuida das assinaturas de newsletter do site). A forma correta seria criarmos nosso módulo que fará essa reescrita do método desejado dentro do SubscriberController do Magento. Geralmente no caso desse controller específico geralmente queremos sobrecrever o método newAction(), que cuida das novas assinaturas da newsletter.

Para isso, criamos um módulo qualquer e no seu config.xml colocamos:

<config>
<frontend>
		<routers>
			<newsletter>
				<args>
					<modules>
						<MeuNamespace_MeuModulo before="Mage_Newsletter">MeuNamespace_MeuModulo</MeuNamespace_MeuModulo>
					</modules>
				</args>
			</newsletter>
		</routers>
	</frontend>
</config>

Então criamos um arquivo chamado SubscriberController.php dentro de MeuNamespace/MeuModulo/controllers. Ele não precisará estender o SubscriberController original. Poderá simplesmente ficar assim:

<?php
class MeuNamespace_MeuModulo_SubscriberController extends Mage_Core_Controller_Front_Action{
    public function newAction(){
       //código que sobrescreveria o metodo newAction
    }
}

A partir de então, ao chamarmos www.nossaloja.com/newsletter/subscriber/new, nosso método passará a ser chamado no lugar do padrão. Os demais métodos que não sobrescrevermos continuam sendo chamados normalmente.

Compartilhe com os amigos
  • Digg
  • StumbleUpon
  • Print
  • del.icio.us
  • Facebook
  • Twitter
  • Google Bookmarks
  • email
  • Google Buzz
  • LinkedIn
  • Live
  • MSN Reporter
  • Orkut
  • PDF
  • Reddit
  • Tumblr
Publicidade

1 comentário

  1. adarsh disse:

    Always write in english phwwww

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *