Sélectionner une page

Après avoir réaliser un article sur la mise en page de pages amp, je, je vais vous montrer dans cet exemple comment mettre en place un formulaire amp-form dans vos pages. Je donne ici un exemple complet afin de gérer l’affichage et le traitement des données.
Si vous avez un des messages d’erreur ci-dessous, vous trouverez toutes les informations nécessaires pour résoudre vos problèmes.

POST ERROR STATUS 500
The tag ‘amp-form extension .js script’ is missing or incorrect, but required by ‘FORM [method=POST]’
Response must contain the AMP-Access-Control-Allow-Source-Origin header
Form submission failed: Error: Response must contain the AMP-Access-Control-Allow-Source-Origin header??? _reported_

action-xhr requiert un site un https. Vous ne pourrez donc pas mettre en place se formulaire si votre site est en HTTP

Votre route dans le fichier web.php

Route::any('frontend/sendCommentsAmp', ['as'=>'frontend/sendCommentsAmp','uses'=>'Frontend\Posts\CommentsController@sendCommentsAmp']);

Partie html / page amp

Voilà un exemple de code html pour afficher un formulaire. Si vous utiliser Laravel n’oubliez pas le token avec {{ csrf_field() }} sinon vous aurez des erreurs

/*  A include dans le section head*/
<script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>
<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.1.js"></script>
/*  fin de l'inclusion dans head */

<form id='form_review' class='clearboth form_review' method="POST" 
	action-xhr='<?php echo route('frontend/sendCommentsAmp');?>'
	target="_top">
	{{ csrf_field() }} /*  Sinon vous aurez une erreur*/ 
	<input type="hidden" name="idpost" value="22">
	<input type="text" name="name" id="name" value="" required>  
	<label for="txt_comment">Commentaire</label>
	<textarea name='txt_comment' id='txt_comment' rows="6" required> </textarea>                           
	<div submit-success>
		<template type="amp-mustache">
			@{{reponse}} /*  le @ permet d'échapper les { afin de ne pas avoir d'erreur avec blade*/ 
		</template>
	</div>
	<input class="btn btn-primary" type="submit" id='send_comment' value="Send"/>
</form>

Controller

Dans le controller, vous devez retourner les bon header sous peine d’avoir des erreurs.

class CommentsController extends Controller
{
    public function sendCommentsAmp(Request $request)
    {    
        $error_data=false;
        if(is_null($request->idpost) || !is_numeric($request->idpost) || is_null($request->txt_comment)
        || is_null($request->name)  ) {
            $error_data = true;
        }  
        if(!$error_data){
            $check_post = DB::table('mes_posts')->where('id',$request->idpost)->limit(1)->get();  
            if($check_post->count()==0){
                $error_data = true;
            }
        }
        if($error_data){
            $output = ['reponse' => 'Error'];
        }  else {
            /* On fait le traitement voulu*/
            $output = [ 'reponse' => 'Merci votre commentaire est en cours de validation.'];
        }
        header("Access-Control-Allow-Origin: https://cdn.ampproject.org");
        header("AMP-Access-Control-Allow-Source-Origin: https://".$_SERVER["SERVER_NAME"]);
        header("Access-Control-Expose-Headers:AMP-Access-Control-Allow-Source-Origin");
        echo json_encode($output);
        die();
    }
}