Bonjour,

Je suis en train de créer une page contact après la leçon de création de site de A à Z.
ma page "contact.php" fonctionne bien. Seulement, quand j'essaye d'envoyer un email, voilà ce que ça me fait:

Page introuvablearoundaroundLe controller pages n'a pas de méthode pages

Je ne comprends pas pourquoi:
J'ai mis ma page "contact.php" dans "view/page"

<?php
require CORE.DS.'_inc.php';

?><!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"/>
<style>
    body {
        padding-top: 50px;
    }
    .starter-template {
        padding-top: 40px;
    }
</style>
</head>
<body>

<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
    <div class="navbar-header">
        <a class="navbar-brand" href="#">Contact</a>
    </div>
</div>
</nav>

<div class="container">

<div class="starter-template">

    <?php if(array_key_exists('errors', $_SESSION)): ?>
        <div class="alert alert-danger">
            <?= implode('<br>', $_SESSION['errors']); ?>
        </div>
    <?php endif; ?>
    <?php if(array_key_exists('success', $_SESSION)): ?>
        <div class="alert alert-success">
            Votre email a bien été envoyé
        </div>
    <?php endif; ?>

    <form action= "config/post_contact.php" method="POST">
        <?php $form = new form_(isset($_SESSION['inputs']) ? $_SESSION['inputs'] : []); ?>
        <div class="row">
            <div class="col-xs-4">
                <?= $form->text('name', 'Votre Nom'); ?>
            </div>
            <div class="col-xs-4">
                <?= $form->email('email', 'Votre Email'); ?>
            </div>
            <div class="col-xs-4">
                <?= $form->select('service','Contact', ['Joachim', 'Laure', 'Michel', 'Christelle', 'Agnès']); ?>
            </div>
            <div>
                <?php echo $this->Form->input('content','Contenu',array('type'=>'textarea', 'class'=> 'xxlarge wysiwyg', 'rows'=>10));  ?>
                <?= $form->submit('Envoyer'); ?>
            </div>
        </div>
    </form>

</div>

</div>
<script type="text/javascript" src="<?php echo Router::webroot('js/tinymce/tiny_mce.js'); ?>"></script>
  <script type="text/javascript">

        tinyMCE.init({
          // General options
          mode : "specific_textareas",
          editor_selector : "wysiwyg",
          theme : "advanced",
          relative_urls : false,
          plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

          // Theme options
          theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,bullist,numlist,|,justifyleft,justifycenter,justifyright,justifyfull,|,link,unlink,image",
          theme_advanced_buttons2 : "",
          theme_advanced_buttons3 : "",
          theme_advanced_buttons4 : "",
          theme_advanced_toolbar_location : "top",
          theme_advanced_toolbar_align : "left",
          theme_advanced_statusbar_location : "bottom",
          theme_advanced_resizing : true,

          // Skin options
          skin : "o2k7",
          skin_variant : "silver",
          file_browser_callback : 'fileBrowser'
      });
</script>

</body>
</html><?php
unset($_SESSION['inputs']);
unset($_SESSION['success']);
unset($_SESSION['errors']);
?>

J'ai mis "post_contact.php" dans mon "config".

<?php
require CORE.DS.'_inc.php';
$errors = [];
$emails = ['monmail@amoi.fr', 'etplusieurs@autres'];

$validator = new Validator($_POST);
$validator->check('name', 'required');
$validator->check('email', 'required');
$validator->check('email', 'email');
$validator->check('message', 'required');
$validator->check('service', 'in', array_keys($emails));
$errors = $validator->errors();

if(!empty($errors)){
$_SESSION['errors'] = $errors;
$_SESSION['inputs'] = $_POST;
header('Location: contact.php');
} else {
$_SESSION['success'] = 1;
$headers = 'FROM: ' . $_POST['email'];
mail($emails[$_POST['service']], 'Formulaire de contact de ' . $_POST['name'], $_POST['message'], $headers);
header('Location: contact.php');
}

Je crois que c'est ca qui pêche: dans mon page contrôleur.

function contact(){
    $this->loadModel('Post');
    $d['page'] = $this->Post->find(array(
        'conditions' => array('type'=>'page')
    ));
    $this->set($d);

Mais je ne comprends pas pourquoi ? ma page "contact" fonctionne bien, c'est au moment d'utiliser les fonctions que ça ne va pas ?!
Post_contact n'est pas une page, pourquoi demander un controleur page ?
Merci

3 réponses


JoHuv
Auteur
Réponse acceptée

R-bonjour a tous:

J'ai tout repris ligne par ligne, et fait encore d'autres essais. Il semblerait que c'est la redirection des pages après l'envoie du mail qui semble en cause.

J'ai donc cherché l'adresse où renvoyer la page (pages/contact.php; ROOT.DS.'pages'.DS.contact; et d'autres.... ne fonctionne pas) et j'en suis arrivé à la conclusion suivante:

header("location: http://localhost:8080/lenomdemonsite/pages/contact");

Ceci résout que parciellement mon pb: comment puis-je mettre une autre forme d'adresse ?

merci

Bonjour,
Je pense que l'erreur provient parce qu'il s'attent à avoir une méthode (fonction) pages dans ton Pages_controller.
Si tu remplaces function contact par function pages, cela devrait marcher.
En effet, je pense que par convention, php s'attend toujours à retrouver une méthode qui correspond au nom du controller.
Je suis débutant en POO, donc j'espère que ce que je te dit fonctionnera. ^^

JoHuv
Auteur

Bonjour, J'ai déjà essayé, et après ton post, j'ai essayé à nouveau. Toujours rien. Même en déplaçant le post_contact.php. ça fait au moins une semaine que j'essaye de régler ce soucis, avec différentes "solutions" (les miennes, donc pas vraiment les bonnes).
La funtion contact fait marcher ma page "contact.php". Je ne peux la remplacer. j'ai ajouté une autre fonction, celle de "post_contact", tout en plaçant la page mentionnée avec ma page "contact.php".mais toujours rien....
Merci à toi, Eclairia pour avoir offert ton analyse.

Avec tous mes changements, j'ai pu remarqué que c'est l'adresse de l'action de mon form qui affiche l'erreur:

<form action="post_contact.php" method="POST">
--->Le controller pages n'a pas de méthode post_contact.php

<form action="pages/post_contact.php" method="POST">
-->Le controller pages n'a pas de méthode pages