Словарь Python deepcopy

Спасибо за совет, ВладРия, но я нашел другой способ сделать это, я объясняю: что ты думаешь об этом? Какова лучшая практика? это немного странно / странно, я думаю?

Вот моя сторона контроллера:

/**
 * @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 ?

20
задан chelmertz 13 May 2016 в 14:20
поделиться

1 ответ

Документация ясно показывает, что вы получаете новые копии, а не ссылки. Deepcopy создает глубокие копии для встроенных типов, с различными исключениями, и вы можете добавлять пользовательские операции копирования к вашим пользовательским объектам, чтобы также получить поддержку для глубокого копирования. Если вы не уверены, для этого и есть модульное тестирование.

15
ответ дан 30 November 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: