Make an Iterable array of objects in PHP for Twig -
i'm trying pass array of objects parameter view rendering. problem when try iterate on , check if it's iterable, isn't.
this how buil array:
public function filtracalciatori($mintiritotali, $mintiriporta, $mingolfatti, $mingolsubiti, $minassist, $minfallifatti, $minfallisubiti, $minpercentualepassaggiriusciti, $minammonizioni, $minespulsioni, $maxtiritotali, $maxtiriporta, $maxgolfatti, $maxgolsubiti, $maxassist, $maxfallifatti, $maxfallisubiti, $maxpercentualepassaggiriusciti, $maxammonizioni, $maxespulsioni) { $statement = $this->conn->prepare( "select calciatore, sum(tiri_totali) tiri_totali, sum(tiri_porta) tiri_porta, sum(falli_fatti) falli_fatti, sum(falli_subiti) falli_subiti, (sum(percentuale_passaggi_riusciti) / count('calciatore')) percentuale_passaggi_riusciti, sum(gol_fatti) gol_fatti, sum(gol_subiti) gol_subiti, sum(assist) assist, sum(ammonizioni) ammonizioni, sum(espulsioni) espulsioni, count('calciatore') partite_giocate statistiche_calciatore group (calciatore) having tiri_totali >= ? , tiri_totali <= ? , tiri_porta >= ? , tiri_porta <= ? , falli_fatti >= ? , falli_fatti <= ? , falli_subiti >= ? , falli_subiti <= ? , percentuale_passaggi_riusciti >= ? , percentuale_passaggi_riusciti <= ? , gol_fatti >= ? , gol_fatti <= ? , gol_subiti >= ? , gol_subiti <= ? , assist >= ? , assist <= ? , ammonizioni >= ? , ammonizioni <= ? , espulsioni >= ? , espulsioni <= ?;"); $statement->bind_param("iiiiiiiiiiiiiiiiiiii", $mintiritotali, $maxtiritotali, $mintiriporta, $maxtiriporta, $minfallifatti, $maxfallifatti, $minfallisubiti, $maxfallisubiti, $minpercentualepassaggiriusciti, $maxpercentualepassaggiriusciti, $mingolfatti, $maxgolfatti, $mingolsubiti, $maxgolsubiti, $minassist, $maxassist, $minammonizioni, $maxammonizioni, $minespulsioni, $maxespulsioni); $statement->execute(); $result = $statement->get_result(); if ($result->num_rows > 0) { $arraystatistiche[] = array(); ($i = 0; $row = $result->fetch_assoc(); $i++) { $arraystatistiche[] = new statistichecalciatore(row["calciatore"], $row["tiri_totali"], $row["tiri_porta"], $row["falli_fatti"], $row["falli_subiti"], $row["percentuale_passaggi_riusciti"], $row["gol_fatti"], $row["gol_subiti"], $row["assist"], $row["ammonizioni"], $row["espulsioni"], $row["partite_giocate"]); } return $arraystatistiche; } else { return null; } }
this pass array parameyer rendering:
return $this->render(":staff:viewcalciatorifiltrati.html.twig", array("array_statistiche" => $arraystatistiche));
ans here try display content:
{% if array_statistiche iterable %} {% statistiche_calciatore in array_statistiche %} hello {{ statistiche_calciatore }}! {% endfor %} {% else %} not iterable {% endif %}
there many wrongs in here... of course won't work...
1) ? $arraystatistiche[] = array();
this may on purpose, you're creating multidimensional array...
, same :
$arraystatistiche=array(0=>array());
if wanted init array, $arraystatistiche=array();
2) : {% if array_statistiche iterable %}
can't works
because of how did init array, won't works.
used $arraystatistiche[]=
push result in array, thus, looks this:
$arraystatistiche=(array( 0=>array() 1=>array(your_multidimensional_messed_result_start_here) ));
you need {% if array_statistiche.1 iterable %}
find need.
, yet, might not works because of next problem...
3) statistichecalciatore entity
made of arraycollections ?
my guess try set arrays non-array vars. not new statistichecalciatore
isn't needed begin with.
another problem how read sql result set. how should done :
while($row=$result->fetch_assoc()) { array_push($arraystatistiche, $row) }
nothing more. way did keep returning null , undefined variables.
4) use symfony dql
symfony have lot of tools make easy you...
why using own mysqli connexion?! go , use symfony dql...
i add don't find having
suited/needed query, where
enough same job.
[code rework]
src/yourbundle/repository/statistichecalciatorerepository.php
be careful here, used sql columns name, dql use php entity variable name.
unless can manage changes on own, suggest post entity statistichecalciatore
can correct answer.
public function filtracalciatori($mintiritotali, $mintiriporta, $mingolfatti, $mingolsubiti, $minassist, $minfallifatti, $minfallisubiti, $minpercentualepassaggiriusciti, $minammonizioni, $minespulsioni, $maxtiritotali, $maxtiriporta, $maxgolfatti, $maxgolsubiti, $maxassist, $maxfallifatti, $maxfallisubiti, $maxpercentualepassaggiriusciti, $maxammonizioni, $maxespulsioni) { return $this->getentitymanager() ->getrepository('yourbundle:statistichecalciatore') ->createquerybuilder('sc') ->select("sc.calciatore", "sum(sc.tiri_totali) tiri_totali", "sum(sc.tiri_porta) tiri_porta", "sum(sc.falli_fatti) falli_fatti", "sum(sc.falli_subiti) falli_subiti", "(sum(sc.percentuale_passaggi_riusciti) / count('sc.calciatore')) percentuale_passaggi_riusciti", "sum(sc.gol_fatti) gol_fatti", "sum(sc.gol_subiti) gol_subiti", "sum(sc.assist) assist", "sum(sc.ammonizioni) ammonizioni", "sum(sc.espulsioni) espulsioni", "count('sc.calciatore') partite_giocate") ->where("tiri_totali >= :mintiritotali") ->andwhere("tiri_totali <= :maxtiritotali") ->andwhere("tiri_porta >= :mintiriporta") ->andwhere("tiri_porta <= :maxtiriporta") ->andwhere("falli_fatti >= :minfallifatti") ->andwhere("falli_fatti <= :maxfallifatti") ->andwhere("falli_subiti >= :minfallisubiti") ->andwhere("falli_subiti <= :maxfallisubiti") ->andwhere("percentuale_passaggi_riusciti >= :minpercentualepassaggiriusciti") ->andwhere("percentuale_passaggi_riusciti <= :maxpercentualepassaggiriusciti") ->andwhere("gol_fatti >= :mingolfatti") ->andwhere("gol_fatti <= :maxgolfatti") ->andwhere("gol_subiti >= :mingolsubiti") ->andwhere("gol_subiti <= :maxgolsubiti") ->andwhere("assist >= :minassist") ->andwhere("assist <= :maxassist:") ->andwhere("ammonizioni >= :minammonizioni") ->andwhere("ammonizioni <= :maxammonizioni") ->andwhere("espulsioni >= :minespulsioni") ->andwhere("espulsioni <= :maxespulsioni") ->setparameters(array( new parameter('mintiritotali', $mintiritotali), new parameter('maxtiritotali', $maxtiritotali), new parameter('mintiriporta', $mintiriporta), new parameter('maxtiriporta', $maxtiriporta), new parameter('minfallifatti', $minfallifatti), new parameter('maxfallifatti', $maxfallifatti), new parameter('minfallisubiti', $minfallisubiti), new parameter('maxfallisubiti', $maxfallisubiti), new parameter('minpercentuale_passaggi_riusciti', $minpercentualepassaggiriusciti), new parameter('maxpercentuale_passaggi_riusciti', $maxpercentualepassaggiriusciti), new parameter('mingolfatti', $mingolfatti), new parameter('maxgolfatti', $maxgolfatti), new parameter('mingolsubiti', $mingolsubiti), new parameter('maxgolsubiti', $maxgolsubiti), new parameter('minassist', $minassist), new parameter('maxassist', $maxassist), new parameter('minammonizioni', $minammonizioni), new parameter('maxammonizioni', $maxammonizioni), new parameter('minespulsioni', $minespulsioni), new parameter('maxespulsioni', $maxespulsioni) )) ->getquery() ->getarrayresult(); }
src/yourbundle/controller/statistichecalciatorecontroller.php
public function stataction() { $em=$this->getdoctrine()->getmanager(); $arraystatistiche=$em->getrepository('yourbundle:conference')->filtracalciatori($mintiritotali, $mintiriporta, $mingolfatti, $mingolsubiti, $minassist, $minfallifatti, $minfallisubiti, $minpercentualepassaggiriusciti, $minammonizioni, $minespulsioni, $maxtiritotali, $maxtiriporta, $maxgolfatti, $maxgolsubiti, $maxassist, $maxfallifatti, $maxfallisubiti, $maxpercentualepassaggiriusciti, $maxammonizioni, $maxespulsioni); return $this->render(":staff:viewcalciatorifiltrati.html.twig", array("array_statistiche" => $arraystatistiche)); }
src/yourbundle/entity/statistichecalciatore.php
you seems on symfony 3, should case, check if repository declared in entity
/** * statistichecalciatore * * @orm\table(name="statistiche_calciatore") * @orm\entity(repositoryclass="yourbundle\repository\statistichecalciatorerepository") */ class statistichecalciatore { ... }
[code rework end]
[lecture time]
well, guess have right it, took me quite long time reply...
before trying use symfony, suggest review how php works.
there lot of errors shouldn't made.
stated before, how init array or how read sql result example.
php.net here you... ;)
while kind enough provide answer, understand first , last time answer such question.
answering while correcting mess takes long, if wasn't on holidays, , bored, wouldn't have done either.
have care code, , not post things full of errors.
[lecture time end]
well, it's time me put second coat of paint on walls...
hope helped you. ;)
Comments
Post a Comment