Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > CakePHP
CakePHP Forum d'entraide sur le framework PHP CakePHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 16h44   #1
Snyper
Membre du Club
 
Inscription : octobre 2006
Messages : 249
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 249
Points : 64
Points : 64
Par défaut Url et fichier routes.php

Bonjour,

Je viens du monde java, mais je dois faire une petite Ihm avec cakePhp.

Dans ma petite application, j'ai modifié le fichier routes.php:

j'ai commenté la ligne suivante:
Code :
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
et ajouté la ligne suivante:
Code :
Router::connect ('/', array('controller'=>'posts', 'action'=>'index'));
Ainsi, quand je lance mon application je n'ai plus à taper cet url:

Code :
http://localhost:81/tutoCake/index.php/posts
mais celle ci:

Code :
http://localhost:81/tutoCake/
le problème c'est que pour le reste de l’application quand je génère des links

<?php echo $this->Html->link(
'Add new post',
array('controller'=>'posts', 'action'=>'add'), array(),"Êtes-vous sûr de vouloir effacer cette recette ?");?>

j'obtiens le lien suivant:

http://localhost:81/tutoCake/posts/add

il manque le index.php, si je tape: http://localhost:81/index.php/tutoCake/posts/add cela marche bien

je suis tout nouveau dans ce monde....


je vous remercie d'avance.
Snyper est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 22h16   #2
csbilouze
Membre régulier
 
Avatar de csbilouze
 
Inscription : janvier 2005
Messages : 79
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 79
Points : 93
Points : 93
Envoyer un message via MSN à csbilouze
Salut,

CakePhp fonctionne sur du MVC (modèle, vue, controleur).

l'url dans cakePhp se lit comme suit:

Code :
localhost/tutoCake/add -> localhost/controleur/action
Ici cakePhp va chercher le controleur "tutoCake" (et son modèle) et va effectuer l'action "add", donc il va aller chercher la vue correspondante a ton action add, qui est add.ctp.

Je ne comprend pas la présence de ton index.php dans ton script.

Tu devrais avoir un fichier defaut.ctp dans le dossier "layout", avec à l'intérieur la variable:

Code :
1
2
3
<?php
echo $content_for_layout;
?>
Ainsi qu'un dossier du nom de ton controleur. "tutoCake"->"add.ctp".
Ces vues (ou actions) viendront se greffer dans default.ctp.

j'espère t'avoir aidé.

++
csbilouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 09h53   #3
Snyper
Membre du Club
 
Inscription : octobre 2006
Messages : 249
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 249
Points : 64
Points : 64
Bonjour et merci pour ta réponse.

Voici mon fichier default.cpt

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"2."http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title><?php echo $title_for_layout?></title>
			<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
			<!-- Incluir ficheros y scripts externos aquí (Mirar el ayudante HTML para más información -->
			<?php echo $scripts_for_layout ?>
	</head>
	<body>
		<!-- Si quieres algún tipo de menú para mostrar en todas tus vistas, incluyelo aquí -->
		<div id="cabecera">
			<div id="menu">...</div>
		</div>
		<!-- Aquí es donde quiero que se vean mis vistas -->
		<?php echo $content_for_layout ?>
		<!-- Añadir un pie de página a cada página mostrada -->
		<div id="pie">...</div>
	</body>
</html>

et voici l'alias que j'ai dans le fichier de configuration du serveur(vertrigo.ini)

Code :
1
2
3
4
5
6
7
Alias /tutoCake "E:\cake_install\app\webroot"
<Directory "E:\cake_install\app\webroot">
    Options All
    AllowOverride AuthConfig
    Order allow,deny
    Allow from All
</Directory>
donc tutoCake est juste un alias.


C'est exactement mont problème, les actions ne se déclencha pas si index.php n'est pas présent dans l'url.

si je fais directement appelle à mon contrôleur, puis à la méthode que je souhaite exécuter j’obtient "Page Web introuvable"


Même le code:

Code :
<?php echo $html->link('Add new post', "add"); ?>
me génère le html suivant:

Code :
<a href="/tutoCake/index.php/posts/add">Add new post</a>
J'ai lu que l'on pouvait parser l'url avant qu'il soit afficher à l'utilisateur, supprimé par expression régulière index.php, mais cette solution ne marche pas, et j'avoue que je souhaite comprendre pourquoi est-il nécessaire dans l'url?

Merci d'avance.
Snyper est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 17h36   #4
csbilouze
Membre régulier
 
Avatar de csbilouze
 
Inscription : janvier 2005
Messages : 79
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 79
Points : 93
Points : 93
Envoyer un message via MSN à csbilouze
re,

je te répond en coup de vent.

Quelle version de cakePhp?

Essai cette méthode:

How To Install CakePHP in a Subdirectory Via an Apache Alias

The documentation on how to install CakePHP in a non-root directory (http://site.tld/directory_name/) is rather sparse, so here’s how to do it using an Apache Alias directive:

httpd.conf

In httpd.conf, add the following line:

Code :
Alias /directory_name /absolute/path/to/install/directory/app/webroot
.htaccess

In app/webroot/.htaccess, add the following line:

Code :
RewriteBase /directory_name
Your .htaccess file should now appear as such:

Code :
1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /directory_name
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
index.php

Finally, in app/webroot/index.php, at line 63, right below where it says not to edit below this line, change it to:

Code :
define('WEBROOT_DIR', 'directory_name');
Make it Work

Restart Apache and you should be all set.

Voici la source

j'espère que ca va t'aider.

++
csbilouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 15h50   #5
csbilouze
Membre régulier
 
Avatar de csbilouze
 
Inscription : janvier 2005
Messages : 79
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2005
Messages : 79
Points : 93
Points : 93
Envoyer un message via MSN à csbilouze
Ca a marché?

Une réponse quand on aide est toujours appréciable.

C'est des situations dans le genre qui me donne plus envie d'aider
csbilouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h50.


 
 
 
 
Partenaires

Hébergement Web