Created
June 3, 2020 19:17
-
-
Save Mouerr/d701008734b4cfa07ccfeae67e9f5be7 to your computer and use it in GitHub Desktop.
multi for symfony
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{% extends 'base.html.twig' %} | |
{% block title %}Ajout user{% endblock %} | |
{% block monTitre %} | |
Ajout user | |
{% endblock %} | |
{% block stylesheets %} | |
{{ parent() }} | |
<style> | |
* { | |
box-sizing: border-box; | |
} | |
body { | |
background-color: #f1f1f1; | |
} | |
#regForm { | |
background-color: #ffffff; | |
margin: 100px auto; | |
font-family: Raleway; | |
padding: 40px; | |
width: 70%; | |
min-width: 300px; | |
} | |
h1 { | |
text-align: center; | |
} | |
input { | |
padding: 10px; | |
width: 100%; | |
font-size: 17px; | |
font-family: Raleway; | |
border: 1px solid #aaaaaa; | |
} | |
/* Mark input boxes that gets an error on validation: */ | |
input.invalid { | |
background-color: #ffdddd; | |
} | |
/* Hide all steps by default: */ | |
.tab { | |
display: none; | |
} | |
button { | |
background-color: #4CAF50; | |
color: #ffffff; | |
border: none; | |
padding: 10px 20px; | |
font-size: 17px; | |
font-family: Raleway; | |
cursor: pointer; | |
} | |
button:hover { | |
opacity: 0.8; | |
} | |
#prevBtn { | |
background-color: #bbbbbb; | |
} | |
/* Make circles that indicate the steps of the form: */ | |
.step { | |
height: 15px; | |
width: 15px; | |
margin: 0 2px; | |
background-color: #bbbbbb; | |
border: none; | |
border-radius: 50%; | |
display: inline-block; | |
opacity: 0.5; | |
} | |
.step.active { | |
opacity: 1; | |
} | |
/* Mark the steps that are finished and valid: */ | |
.step.finish { | |
background-color: #4CAF50; | |
} | |
</style> | |
{% endblock %} | |
{% block body %} | |
<form id="regForm"> | |
<h1>Register:</h1> | |
<!-- One "tab" for each step in the form: --> | |
<div class="tab">Name: | |
<p><input placeholder="First name..." oninput="this.className = ''" name="fname"></p> | |
<p><input placeholder="Last name..." oninput="this.className = ''" name="lname"></p> | |
</div> | |
<div class="tab">Contact Info: | |
<p><input placeholder="E-mail..." oninput="this.className = ''" name="email"></p> | |
<p><input placeholder="Phone..." oninput="this.className = ''" name="phone"></p> | |
</div> | |
<div class="tab">Birthday: | |
<p><input placeholder="dd" oninput="this.className = ''" name="dd"></p> | |
<p><input placeholder="mm" oninput="this.className = ''" name="mm"></p> | |
<p><input placeholder="yyyy" oninput="this.className = ''" name="yyyy"></p> | |
</div> | |
<div class="tab">Login Info: | |
<p><input placeholder="Username..." oninput="this.className = ''" name="uname"></p> | |
<p><input placeholder="Password..." oninput="this.className = ''" name="password" type="password"></p> | |
</div> | |
<div style="overflow:auto;"> | |
<div style="float:right;"> | |
<button type="button" id="prevBtn" onclick="nextPrev(-1)">Previous</button> | |
<button type="button" id="nextBtn" onclick="nextPrev(1)">Next</button> | |
</div> | |
</div> | |
<!-- Circles which indicates the steps of the form: --> | |
<div style="text-align:center;margin-top:40px;"> | |
<span class="step"></span> | |
<span class="step"></span> | |
<span class="step"></span> | |
<span class="step"></span> | |
</div> | |
</form> | |
{% block javascripts %} | |
{{ parent() }} | |
<script type="text/javascript"> | |
let currentTab = 0; // Current tab is set to be the first tab (0) | |
showTab(currentTab); // Display the current tab | |
function showTab(n) { | |
// This function will display the specified tab of the form... | |
var x = document.getElementsByClassName("tab"); | |
x[n].style.display = "block"; | |
//... and fix the Previous/Next buttons: | |
if (n == 0) { | |
document.getElementById("prevBtn").style.display = "none"; | |
} else { | |
document.getElementById("prevBtn").style.display = "inline"; | |
} | |
if (n == (x.length - 1)) { | |
document.getElementById("nextBtn").innerHTML = "Submit"; | |
} else { | |
document.getElementById("nextBtn").innerHTML = "Next"; | |
} | |
//... and run a function that will display the correct step indicator: | |
fixStepIndicator(n) | |
} | |
function nextPrev(n) { | |
// This function will figure out which tab to display | |
var x = document.getElementsByClassName("tab"); | |
// Exit the function if any field in the current tab is invalid: | |
if (n == 1 && !validateForm()) return false; | |
// Hide the current tab: | |
x[currentTab].style.display = "none"; | |
// Increase or decrease the current tab by 1: | |
currentTab = currentTab + n; | |
// if you have reached the end of the form... | |
console.log('Currentabe', currentTab); | |
console.log('x.length', x.length); | |
if (currentTab >= x.length) { | |
// ... the form gets submitted: | |
$('#nextBtn').addClass("submitMultiForm"); | |
//document.getElementById("regForm").submit(); | |
return false; | |
} | |
// Otherwise, display the correct tab: | |
showTab(currentTab); | |
} | |
function validateForm() { | |
// This function deals with validation of the form fields | |
var x, y, i, valid = true; | |
x = document.getElementsByClassName("tab"); | |
y = x[currentTab].getElementsByTagName("input"); | |
// A loop that checks every input field in the current tab: | |
for (i = 0; i < y.length; i++) { | |
// If a field is empty... | |
if (y[i].value == "") { | |
// add an "invalid" class to the field: | |
y[i].className += " invalid"; | |
// and set the current valid status to false | |
valid = false; | |
} | |
} | |
// If the valid status is true, mark the step as finished and valid: | |
if (valid) { | |
document.getElementsByClassName("step")[currentTab].className += " finish"; | |
} | |
return valid; // return the valid status | |
} | |
function fixStepIndicator(n) { | |
// This function removes the "active" class of all steps... | |
var i, x = document.getElementsByClassName("step"); | |
for (i = 0; i < x.length; i++) { | |
x[i].className = x[i].className.replace(" active", ""); | |
} | |
//... and adds the "active" class on the current step: | |
x[n].className += " active"; | |
} | |
$('body').on("click", ".submitMultiForm", function (e) { | |
e.preventDefault(); | |
var formdata = $('#regForm').serialize() | |
console.log('formdata', formdata); | |
$(".submitMultiForm").prop('disabled', true); | |
$.ajax({ | |
url: "{{ path('stepform') }}", | |
//contentType: "application/json", | |
type: "POST", | |
data: formdata, | |
success: function (data) { | |
console.log('success Data', data); | |
$('body').append(data); | |
}, | |
error: function (error) { | |
console.log('error data', error.responseText); | |
$('body').append("<div class='alert alert-danger'>" + error.responseText + "</div>"); | |
} | |
}); | |
}); | |
</script> | |
{% endblock %} | |
{% endblock %} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Controller; | |
use App\Entity\Profile; | |
use App\Entity\User; | |
use Doctrine\ORM\EntityManagerInterface; | |
use mysql_xdevapi\Exception; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\Routing\Annotation\Route; | |
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; | |
use Doctrine\DBAL\DBALException; | |
use Symfony\Component\HttpFoundation\Response; | |
class UserController extends AbstractController | |
{ | |
/** | |
* @Route("/user/ajout", name="produit_ajout") | |
* | |
*/ | |
public function form() | |
{ | |
return $this->render('user/ajout.html.twig'); | |
} | |
/** | |
* @Route(name="stepform",path="/stepform") | |
* @param Request $request | |
*/ | |
public function stepform(Request $request, EntityManagerInterface $manager) | |
{ | |
$profile = new Profile(); | |
$profile->setFname($request->request->get('fname')); | |
$profile->setLname($request->request->get('lname')); | |
$profile->setDd($request->request->get('dd')); | |
$profile->setMm($request->request->get('mm')); | |
$profile->setYyyy($request->request->get('yyyy')); | |
$profile->setPhone($request->request->get('phone')); | |
$user = new User(); | |
$user->setEmail($request->request->get('email')); | |
$user->setPassword($request->request->get('password')); | |
$user->setProfile($profile); | |
$manager->persist($user); | |
$manager->flush(); | |
return new Response("<div class='alert alert-success'>your form has been succefully created</div>"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment