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();
    }
}