Спасибо за совет, ВладРия, но я нашел другой способ сделать это, я объясняю: что ты думаешь об этом? Какова лучшая практика? это немного странно / странно, я думаю?
Вот моя сторона контроллера:
/**
* @Route("/recherche/{skillId}/{levelId}", name="recherche")
*/
public function recherche(Skill $skillId=null, Level $levelId=null): Response
{
$filtre = $this->init();
$answers = $filtre['answers'];
$skills = $filtre['skills'];
$levels = $filtre['levels'];
$responses = null;
$jointureRepository= $this->getDoctrine()->getRepository(Jointure::class);
$jointures = $jointureRepository->findBySkillAndLevel($skillId,$levelId);
$this->em->flush();
foreach($jointures as $uneJointure){
$responses[]=$uneJointure->getAnswer();
}
return $this->render('pages/home.html.twig', [
'answers' => $answers,
'skills' => $skills,
'levels' => $levels,
'responses' => $responses
]);
}
private function init(){
$LevelRepository = $this->getDoctrine()->getRepository(Level::class);
$levels = $LevelRepository->findAll();
$SkillRepository = $this->getDoctrine()->getRepository(Skill::class);
$skills = $SkillRepository->findAll();
$AnswerRepository = $this->getDoctrine()->getRepository(Answer::class);
$answers = $AnswerRepository->findAll();
$this->em->flush();
return ([
'levels' => $levels,
'skills' => $skills,
'answers' => $answers,
]);
}
моя личная функция init () странная, что вы можете посоветовать мне?
[ 116] Мой JointureRepository, который содержит построитель запросов findBySkillAndLevel ():
/ ** * @return Jointure [] * / открытая функция findBySkillAndLevel ($ skillId, $ levelId): массив {
$query = $this->createQueryBuilder('j')
//->join('j.answer', 'a')
->join('j.skill', 's')
->join('j.level', 'l')
//->where('a.id = :j.answerId')
->andWhere('s.id = :skillId')
->andWhere('l.id = :levelId')
->setParameter('skillId', $skillId)
->setParameter('levelId', $levelId)
->getQuery()
->getResult();
return $query;
}
Мой взгляд на веточку: (Где я могу поместить этот JS? В Best Practice Symfony)
<div class="container-fluid bg-light ">
<div class="row justify-content-center">
<div class="col-md-2 pt-3">
<div class="form-group">
<select id="inputState" class="form-control">
<option selected>Compétences</option>
{% for skill in skills %}
<option value="{{skill.id}}">{{skill.label}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-2 pt-3">
<div class="form-group">
<select id="inputState2" class="form-control">
<option selected>Maîtrise</option>
{% for level in levels %}
<option value="{{level.id}}">{{level.label}}</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-md-2 pt-3">
<button type="button" onclick="search('{{ path('recherche') }}')" class="btn btn-info">Rechercher</button>
</div>
</div>
</div>
<div class="container">
{% if responses is not null %}
<h3>{{ responses|length }} profils correspondent aux critères séléctionnés :</h3>
{% elseif responses|length == 0 %}
<h3>Pas de résultats pour ces critères..</h3>
{% else %}
<h3>Faites votre recherche</h3>
{% endif %}
{% for rep in responses %}
<div class="card">
<div class="card-header">Email : {{ rep.UserEmail }}</div>
<div class="card-body">Compétences :<br>
{% for j in rep.jointures %}
<p>{{j.level.label}} la compétence {{ j.skill.label }}</p>
{% endfor %}
</div>
<div class="card-footer">Formulaire envoyé le : {{ rep.Date|date("d/m/Y") }} </div>
</div><br>
{% endfor %}
</div>
<script>
function search(path){
var e = document.getElementById("inputState");
var value = e.options[e.selectedIndex].value;
var text = e.options[e.selectedIndex].text;
var l = document.getElementById("inputState2");
var test = l.options[l.selectedIndex].value;
path = path + '/' + value + '/' + test;
document.location.href = path;
}
</script>
Мой вопрос: как я могу сделать это лучше, чтобы уважать Лучшие практики Symfony ?
Документация ясно показывает, что вы получаете новые копии, а не ссылки. Deepcopy создает глубокие копии для встроенных типов, с различными исключениями, и вы можете добавлять пользовательские операции копирования к вашим пользовательским объектам, чтобы также получить поддержку для глубокого копирования. Если вы не уверены, для этого и есть модульное тестирование.