Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre du Club
    Inscrit en
    octobre 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 273
    Points : 67
    Points
    67

    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.

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

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

    Par défaut

    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é.

    ++

  3. #3
    Membre du Club
    Inscrit en
    octobre 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 273
    Points : 67
    Points
    67

    Par défaut

    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.

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

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

    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 :
    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.

    ++

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

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

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •