0

I am new to the Symfony2 framework and am trying to parse some XML from the lastfm API and display information to the user. this would be in the format of album title, playcount and album image for each item.

I can display all this information so far to the user but this is not really useful as I intend to add CSS styling to my page. Any suggestions would be appreciated.

This is my Controller

     /**
 * @Route("/lastfm/albums", name="albums")
 * @Template()
 */
public function albumsAction()
{

$albumsclass = new Album();

   // pull in artist albums
  $albums = simplexml_load_file('http://ws.audioscrobbler.com/2.0/?            method=artist.gettopalbums&artist=imagine+dragons&api_key=370f98844440c2ecc8e5f7        c6cea8a7a4');
$rank = $albums->xpath('/lfm/topalbums/album/@rank');

$album_name_array=array();
$album_playcount_array=array();
$album_url_array=array();
$album_image_array=array();

foreach ($rank as $ranks){

    foreach ($ranks as $rank_id) {

        $album_name = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/name');
        $album_playcount = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/playcount');
        $album_url = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/url');
        $album_image = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/image[4]');



    }
    $album_name = implode($album_name);  
    array_push($album_name_array,$album_name);

    $album_playcount = implode($album_playcount);
    array_push($album_playcount_array,$album_playcount);

    $album_url = implode($album_url);
    array_push($album_url_array,$album_url);

    $album_image = implode($album_image);
    array_push($album_image_array,$album_image);


}







$container=array();
for($i=0; $i<sizeof($album_name_array); $i++) {
                 array_push($container,$album_name_array[$i],$album_playcount_array[$i],$album_ur     l_array[$i],$album_image_array[$i]);
 }


//$hello = array('album_name'=>$album_name_array,
//           'album_playcount'=>$album_playcount_array,
//            'album_url'=>$album_url_array,
//            'album_image'=>$album_image_array,);
//array_push($album_name_array,$album_playcount_array);


return $this->render('AcmelastfmBundle:Default:albums.html.twig', array(
       // 'pageData' => array(
       //  'artistxml' => $artistxml,

        'rank' => $rank,
        'ranks' => $ranks,
        //'rank_id' => $rank_id,
        // 'ranks' => $ranks,
         'album_name' => $album_name_array,
         //'album_playcount' => $album_playcount_array[$i],
         'album_url' => $album_url_array,
         'album_image' => $album_image_array,
         'container' =>$container,
         'data' => var_export($container, true),
        //  
       //  'hello' => $hello,
        // 'james' => array('album_name' => $albumsclass->getAlbumName()),
     //    ),
        ));



}

This is my view

 {% extends '::lastfmbase.html.twig' %}
 {% block title %}Albums{% endblock %}

 {% block body %}


{% for key in container %}
{{key}} <br>
{% endfor %}<br>
{% endblock %}

I am basically trying to convert this code in PHP to symfony2. However I cannot find a way to pass the associative array values to twig as I get an array to string conversion error

<?php
// pull in artist albums
$albums = simplexml_load_file('http://ws.audioscrobbler.com/2.0/?     method=artist.gettopalbums&artist=imagine+dragons&api_key=370f98844440c2ecc8e5f7 c6cea8a7a4');
$rank = $albums->xpath('/lfm/topalbums/album/@rank');

foreach ($rank as $ranks){

    foreach ($ranks as $rank_id) {
        $album_name = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/name');
        $album_playcount = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/playcount');
        $album_url = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/url');
        $album_image = $albums->xpath('/lfm/topalbums/album[@rank="'.$rank_id.'"]/image[4]');
    }



    $album_name = implode($album_name);
    $album_playcount = implode($album_playcount);
    $album_url = implode($album_url);
    $album_image = implode($album_image);

    print_r($rank_id);

    ?>
    <article class="album">
    <?php
    echo "<a href=\"".$album_url."\" target=\"_blank\">".$album_name."</a><br>";
    echo $album_playcount." listeners<br>";
    echo "<div><a href=\"".$album_url."\" target=\"_blank\"><img src=\"".$album_image."\" title=\"$album_name\" /></a></div><br>";
    ?>
    </article>
    <?php

}

3
  • What is your question ? Commented Mar 6, 2015 at 14:21
  • I originally made this site in php samuelwong.co.uk/onerepublic/albums and am trying to recreate it in symfony2. I am trying to display the values for album_name, album url in a loop Commented Mar 6, 2015 at 14:32
  • Show us what your array looks like in your controller with print_r or var_dump and show us how the output should be like in twig. Commented Mar 6, 2015 at 17:02

1 Answer 1

1

I am not sure exactly what you are asking. Do you mean this?

{% for key, value in container %}
   {{ key }}: {{ value }}
{% endfor %}
Sign up to request clarification or add additional context in comments.

2 Comments

I am basically trying to recreate this PHP code in Symfony2.
this is the output of print_r($container) Array ( [0] => Night Visions [1] => 2212749 [2] => last.fm/music/Imagine+Dragons/Night+Visions [3] => userserve-ak.last.fm/serve/300x300/98394887.png [4] => Warriors [5] => 422558 [6] => last.fm/music/Imagine+Dragons/Warriors [7] => userserve-ak.last.fm/serve/300x300/101137427.png [8] => I Bet My Life [9] => 196258 [10] => last.fm/music/Imagine+Dragons/I+Bet+My+Life )

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.