Skip to content

Commit bb9bdb6

Browse files
committed
Use fractal library for transforming data as to not dump data directly from DB to JSON
1 parent 6944953 commit bb9bdb6

File tree

9 files changed

+364
-91
lines changed

9 files changed

+364
-91
lines changed

composer.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"slim/slim": "2.*",
77
"slimcontroller/slimcontroller": "0.4.*",
88
"vlucas/phpdotenv": "1.0.*@dev",
9-
"vlucas/spot2": "~2.1"
9+
"vlucas/spot2": "~2.1",
10+
"league/fractal": "^0.13.0"
1011
},
1112

1213
"autoload": {

composer.lock

+88-19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Lonestar/Controller/Speaker.php

+29-16
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,60 @@
22

33
namespace Lonestar\Controller;
44

5+
use League\Fractal;
6+
use Lonestar\Serializer\NoRootArray as NoRootArraySerializer;
7+
use Lonestar\Transformer\Talk as TalkTransformer;
8+
use Lonestar\Transformer\Speaker as SpeakerTransformer;
9+
510
class Speaker extends \SlimController\SlimController
611
{
712
public function indexAction()
813
{
14+
$manager = (new Fractal\Manager)
15+
->setSerializer(new NoRootArraySerializer)
16+
->parseIncludes(['talks']);
17+
918
$speakerMapper = $this->app->spot->mapper('Lonestar\Entity\Speaker');
10-
$speakers = $speakerMapper->all()
19+
$results = $speakerMapper->all()
1120
->with(['talks'])
1221
->order(['last_name' => 'ASC']);
22+
$speakers = new Fractal\Resource\Collection($results, new SpeakerTransformer);
1323

14-
$results = [];
15-
foreach ($speakers as $id => $speaker) {
16-
$results[$id] = $speaker->toArray();
17-
$results[$id]['talks'] = $speaker->talks->toArray();
18-
}
19-
20-
$this->render(200, $results);
24+
$this->render(200, $manager->createData($speakers)->toArray());
2125
}
2226

2327
public function showAction($id)
2428
{
29+
$manager = (new Fractal\Manager)
30+
->setSerializer(new NoRootArraySerializer)
31+
->parseIncludes(['talks']);
32+
2533
$speakerMapper = $this->app->spot->mapper('Lonestar\Entity\Speaker');
2634

2735
$results = $speakerMapper->all()
2836
->where(['id' => (int) $id])
29-
->toArray();
37+
->first();
38+
$speaker = new Fractal\Resource\Item($results, new SpeakerTransformer);
3039

31-
$this->render(200, $results);
40+
$this->render(200, $manager->createData($speaker)->toArray());
3241
}
3342

3443
public function talksAction($id)
3544
{
36-
$talkMapper = $this->app->spot->mapper('Lonestar\Entity\Talk');
37-
$results = $talkMapper->all()
38-
->where(['speaker_id' => (int) $id])
39-
->toArray();
45+
$manager = (new Fractal\Manager)
46+
->setSerializer(new NoRootArraySerializer);
47+
48+
$talkMapper = $this->app->spot->mapper('Lonestar\Entity\Speaker');
49+
$speaker = $talkMapper->all()
50+
->where(['id' => (int) $id])
51+
->first();
52+
$talks = new Fractal\Resource\Collection($speaker->talks, new TalkTransformer);
4053

41-
$this->render(200, $results);
54+
$this->render(200, $manager->createData($talks)->toArray());
4255
}
4356

4457
public function createAction()
4558
{
4659
throw new \Exception('Not currently impelmented');
4760
}
48-
}
61+
}

src/Lonestar/Controller/Sponsor.php

+17-41
Original file line numberDiff line numberDiff line change
@@ -2,39 +2,27 @@
22

33
namespace Lonestar\Controller;
44

5+
use League\Fractal;
6+
use Lonestar\Serializer\NoRootArray as NoRootArraySerializer;
7+
use Lonestar\Transformer\Sponsor as SponsorTransformer;
8+
59
class Sponsor extends \SlimController\SlimController
610
{
7-
8-
/**
9-
* Mapping of sponsor level ID to sponsor level name
10-
* @var array
11-
*/
12-
protected $sponsorLevelMap = [
13-
4 => 'platinum',
14-
3 => 'gold',
15-
2 => 'silver',
16-
1 => 'bronze',
17-
0 => 'community',
18-
];
19-
2011
/**
2112
* List of sponsors
2213
*/
2314
public function indexAction()
2415
{
25-
$sponsorMapper = $this->app->spot->mapper('Lonestar\Entity\Sponsor');
16+
$manager = (new Fractal\Manager)
17+
->setSerializer(new NoRootArraySerializer);
2618

19+
$sponsorMapper = $this->app->spot->mapper('Lonestar\Entity\Sponsor');
2720
$results = $sponsorMapper->all()
28-
->order(['sponsor_level' => 'DESC', 'created_at' => 'ASC'])
29-
->toArray();
30-
31-
$sponsors = array_map(function($row) {
32-
$row['sponsor_level'] = $this->getSponsorshipName($row['sponsor_level']);
21+
->order(['sponsor_level' => 'DESC', 'created_at' => 'ASC']);
3322

34-
return $row;
35-
}, $results);
23+
$sponsors = new Fractal\Resource\Collection($results, new SponsorTransformer);
3624

37-
$this->render(200, $sponsors);
25+
$this->render(200, $manager->createData($sponsors)->toArray());
3826
}
3927

4028
/**
@@ -43,28 +31,16 @@ public function indexAction()
4331
*/
4432
public function showAction($id)
4533
{
46-
$sponsorMapper = $this->app->spot->mapper('Lonestar\Entity\Sponsor');
34+
$manager = (new Fractal\Manager)
35+
->setSerializer(new NoRootArraySerializer);
4736

37+
$sponsorMapper = $this->app->spot->mapper('Lonestar\Entity\Sponsor');
4838
$results = $sponsorMapper->all()
4939
->where(['id' => (int) $id])
50-
->toArray();
51-
52-
$this->render(200, $results);
53-
}
40+
->first();
5441

55-
/**
56-
* Get the sponsorship name that corresponds with the sponsor level ID
57-
*
58-
* @param integer $sponsorLevel Sponsor Level ID
59-
* @throws \InvalidArgumentException If sponsor level does not exist in sponsor level map
60-
* @return string
61-
*/
62-
protected function getSponsorshipName($sponsorLevel)
63-
{
64-
if (!isset($this->sponsorLevelMap[$sponsorLevel])) {
65-
throw new \InvalidArgumentException('Unknown Sponsorship Level');
66-
}
42+
$sponsor = new Fractal\Resource\Item($results, new SponsorTransformer);
6743

68-
return $this->sponsorLevelMap[$sponsorLevel];
44+
$this->render(200, $manager->createData($sponsor)->toArray());
6945
}
70-
}
46+
}

0 commit comments

Comments
 (0)