2010-06-11 6 views
1

J'ai expérimenté avec le framework de routage léger NiceDog PHP, qui achemine comme ceci: fichierURL du site à l'aide d'un PHP cadre « assez url »

R('entries/(?<id>\d+)') 
    ->controller('Entries_Controller') 
    ->action('show') 
    ->on('GET') 

Maintenant, le .htaccess est mis en place pour faire cette redirection comme si :

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

Mon problème est quand je veux faire une URL quelque part, il semble impossible de le faire.

Dire que je l'ai demandé la page entries/5, et sur cette page, je voudrais créer un lien vers une autre entrée entries/6:

<a href="entries/6">Next Entry</a> 

Cela résout à l'adresse http://localhost/folder/to/project/entries/5/entries/6
pas ce que je veux.

Le /entries/6 href relierait à http://localhost/entries/6
pas non plus ce que je veux.

Pour contourner ce problème, j'ai créé une fonction pour gérer ce problème:

function url($route) { 
    return "http://localhost/folder/to/project/$route"; 
} 

Alors je peux maintenant écrire

<a href="<?= url('entries/6') ?>">Next Entry</a> 

qui relie maintenant à http://localhost/folder/to/project/entries/6, ce qui est exactement ce que je veux.

Cependant, je dois le faire pour TOUS les liens sur le site, et il semble qu'il pourrait y avoir une meilleure solution qui n'implique pas une URL créée en externe.

Existe-t-il un "meilleur" moyen de résoudre ce problème? Est-ce un problème "commun" avec les frameworks PHP? (Il semble que ce serait)

Répondre

2

L'alternative serait facile à utiliser < la base href = "http://example.org/your/project/index"/> dans vos modèles de page < tête >. Mais c'est essentiellement comme avoir des URL complètes générées. Et oui, c'est aussi valable pour XHTML et toujours en HTML5.

0

Pourriez-vous utiliser:

RewriteBase /folder/to/project/ 

dans votre fichier htaccess faisant

RewriteEngine On 
RewriteBase /folder/to/project/ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

+0

J'ai essayé ceci.Cela ne fait pas de différence, car le navigateur résout l'URL. –

2

Je ne sais pas NiceDog mais d'autres cadres I ont utilisé une fonction intégrée qui peut convertir un itinéraire vers l'URL correspondante.

Par exemple, dans Symfony cela ressemblerait à quelque chose comme:

<a href="<?php echo url_for('entries/show?entry=5') ?>">Link Text</a> 

Le système de routage sera ensuite inverse résoudre ce dans l'URL par rapport à une racine définie dans la configuration.

+0

C'est exactement ce que j'ai dit que je voulais contourner dans ma question. –

+0

Vous avez également demandé si c'était commun dans les cadres: c'est. –