Con i framework PHP, perché viene utilizzato il concetto di "percorso"?

28

Il motivo per cui lo chiedo è perché non è uno script PHP un percorso? Ad esempio, se hai un articolo.php, il tuo percorso è semplicemente link .

Perché astrarre ulteriormente il concetto di una rotta quando esiste già come un semplice file?

    
posta Ryan 29.11.2011 - 06:23
fonte

1 risposta

42

Per capire cosa fa un router, devi prima capire che cos'è un motore di riscrittura. Dall'articolo Wikipedia (sottolineatura mia):

A rewrite engine is software that modifies a web URL's appearance (URL rewriting). Rewritten URLs (sometimes known as short, fancy URLs, or search engine friendly - SEF) are used to provide shorter and more relevant-looking links to web pages. The technique adds a degree of separation between the files used to generate a web page and the URL that is presented to the World.

Quando si utilizza un motore di riscrittura, non si ha una correlazione 1: 1 tra l'URL e uno script PHP. Un esempio dello stesso articolo:

http://example.com/wiki/index.php?title=Page_title

can be rewritten as:

http://example.com/wiki/Page_title

Ci sono vari vantaggi per utilizzare la tecnica. Poiché PHP è in genere strettamente associato ad Apache, il motore di riscrittura più comunemente usato è mod_rewrite di Apache .

Se si desidera che gli URL riscritti, è necessario un qualche tipo di routing, poiché il routing è il processo di prendere l'URL, suddividerlo in componenti e decidere quale sia lo script da chiamare. La pagina di documentazione per il router standard di Zend Framework spiega il processo come:

Routing is the process of taking a URI endpoint (that part of the URI which comes after the base URL) and decomposing it into parameters to determine which module, controller, and action of that controller should receive the request.

La maggior parte dei framework PHP al giorno d'oggi si basa sul pattern MVC , e su un framework MVC il processo ha qualcosa di simile a questo * :

  1. Il browser è indirizzato a un URL,
  2. Il server Web intercetta la richiesta e la inoltra a un punto di accesso comune, in genere uno script index.php ,
  3. index.php ottiene l'URL e avvia il processo di routing.
  4. L'URL è scomposto in parametri, dove il primo è il controller, il secondo è il metodo di azione e il resto sono considerati parametri dinamici,
  5. Se esiste una classe controller che corrisponde al primo parametro, viene creato un oggetto controller,
  6. Viene chiamato il metodo di azione che di solito è una funzione dell'oggetto controller e il suo ritorno è ciò che effettivamente viene restituito al browser.

La corrispondenza dei parametri ai controller e ai metodi di solito utilizza la corrispondenza tramite espressioni regolari per essere in grado di gestire schemi di routing complessi e dinamici, noto come rotte. Buoni esempi di percorsi sono disponibili nella pagina della documentazione di routing URI CodeIgniter :

$route['journals'] = "blogs";

$route['blog/joe'] = "blogs/users/34";

$route['product/(:any)'] = "catalog/product_lookup";

$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";

L'array $route contiene i pattern come chiavi e le azioni risultanti come valori in formato controller/action_method/dynamic_parameter .

* Questo non è inteso come una descrizione del processo canonico, solo una spiegazione troppo semplificata.

    
risposta data 29.11.2011 - 06:57
fonte

Leggi altre domande sui tag