1. #1
    Membre régulier
    Inscrit en
    octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 277
    Points : 75
    Points
    75

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
    et ajouté la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Router::connect ('/', array('controller'=>'posts', 'action'=>'index'));
    Ainsi, quand je lance mon application je n'ai plus à taper cet url:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost:81/tutoCake/index.php/posts
    mais celle ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre régulier Avatar de csbilouze
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2005
    Messages : 79
    Points : 94
    Points
    94

    Par défaut

    Salut,

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

    l'url dans cakePhp se lit comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

    ++

  3. #3
    Membre régulier
    Inscrit en
    octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 277
    Points : 75
    Points
    75

    Par défaut

    Bonjour et merci pour ta réponse.

    Voici mon fichier default.cpt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $html->link('Add new post', "add"); ?>
    me génère le html suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <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.

  4. #4
    Membre régulier Avatar de csbilouze
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2005
    Messages : 79
    Points : 94
    Points
    94

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Alias /directory_name /absolute/path/to/install/directory/app/webroot
    .htaccess

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteBase /directory_name
    Your .htaccess file should now appear as such:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

    ++

  5. #5
    Membre régulier Avatar de csbilouze
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2005
    Messages : 79
    Points : 94
    Points
    94

    Par défaut

    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

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo