Logo Domenico Calipari Blog
Logo Domenico Calipari Blog

sabato, dicembre 03, 2011

Magento: Controllers

In ogni sistema PHP,  il principale entry point rimane un file PHP, anche Magento non è da meno e il suddetto file è il file index.php.

In ogni caso, non si deve mai modificare il codice all’interno di index.php.  In un sistema MVC, index.php contiene il codice e le chiamate al codice per fare queste operazioni:

1.    Analizzare l’URL
2.    Basandosi su un insieme di rules, reinviare questa URL a una classe Controller e ad un Action method (Routing).
3.    Istanziare la classe Controller e chiamare l’Action method (Dispatching)

Questo significa che l’entry point in Magento (o in ogni sistema MVC-based ) è un metodo in un file Controller.

Consideriamo la seguente URL:

http://example.com/catalog/category/view/id/25

Dopo il nome del server ogni porzione del path viene parsizzata come segue:

Front Name – catalog

La prima parte dell’URL è chiamata front name. Questo, più o meno, comunica a magento quale Module puo’ trovare all’interno del Controller.
Nell’esempio sopra il front name è catalog che corrisponde ad un Module localizzato in :

app/code/core/Mage/Catalog

Controller Name – category

La seconda porzione dell’URL dice a Magento quale Controller dovrebbe usare. Ogni Module  contenente dei Controllers ha una cartella speciale chiamata “controllers” la quale contiene tutti i Controllers del Module. Nell’esempio sopra, la porzione di URL category si traduce all’interno del file Controller:

app/code/core/Mage/Catalog/controllers/CategoryController.php

E la classe sarà una cosa del genere:

class Mage_Catalog_CategoryController extends Mage_Core_Controller_Front_Action
{
}

Tutti I Controller nell’applicazione carrello di Magento ereditano da Mage_Core_Controller_Front_Action .

Action Name – view

Al terzo posto della nostra URL arriva l’action name. Nel nostro esempio è “view”. La parola “view” è usata per create l’Action Method. Quindi nel nostro esempio, “view” diventerà “viewAction”.

class Mage_Catalog_CategoryController extends Mage_Core_Controller_Front_Action
{
    
public function viewAction()
    
{
        
//main entry point
    
}
}

Chi conosce Zend Framework noterà qui una familiarità con le convenzioni di denominazione.

Parameter/Value – id/25

Ogni porzione di percorso dopo l’action name verrà considerata come una richiesta di variabili di tipo  GET key/value. Quindi nel nostro esempio “id/25” significa che prenderemo una variabile GET denominata “id” con valore “25”.

Come già detto, se vuoi che un Module personalizzato usi il Controller, li dovrai configurare. Segue una porzione di configurazione che abilita i Controller per il Catalog Module:


<frontend>
    <
routers>
        <
catalog>
            <use>
standard</use>
            <
args>
                <
module>Mage_Catalog</module>
                <
frontName>catalog</frontName>
            </
args>
        </
catalog>
    </
routers>
</
frontend>

In questo momento focalizziamo l’attenzione su

<frontName>catalog</frontName>

Questo collega un Module con una frontname URL. La maggior parte dei core Modules in Magento scelgono un frontname che sia lo stesso del nome del loro Module anche se questo non è obbligatorio.

Multiple Routers

Il routing descritto sopra è per l’applicazione cart (carrello) di Magento (spesso chiamato frontend). Se Magento non trovasse un valido Controller/Action per una URL, proverebbe di nuovo, usando questa volta un secondo insieme di Routing rules per l’applicazione Admin. Se non trovasse una valida Admin Controller/Action, utilizzerà uno speciale Controller denominato Mage_Cms_IndexController.

Il CMS Controller controlla che il sistema di gestione di contenuti di Magento per vedere se c’è qualche contenuto da caricare. Se ne trova, li carica, altrimenti l’utente viene reindirizzato ad una pagina 404.

Link e Fonte: magentocommerce.com

0 commenti:

Posta un commento