Skip to content

Commit

Permalink
Move controller code to separate file
Browse files Browse the repository at this point in the history
  • Loading branch information
davedevelopment committed Oct 3, 2012
1 parent 7eef3b2 commit e250e09
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 4 deletions.
15 changes: 13 additions & 2 deletions app/bootstrap.php
Expand Up @@ -2,15 +2,26 @@

use Silex\Application;
use Demo\Repository\PostRepository;
use Demo\Controller\ControllerResolver;
use Demo\Controller\PostController;

$app = new Application;

/**
* Custom controller resolver
*/
$app['resolver'] = $app->share(function () use ($app) {
return new ControllerResolver($app, $app['logger']);
});

$app['posts.repository'] = $app->share(function() {
return new PostRepository;
});

$app->get('/posts.json', function() use ($app) {
return $app->json($app['posts.repository']->findAll());
$app['posts.controller'] = $app->share(function() use ($app) {
return new PostController($app['posts.repository'], $app);
});

$app->get('/posts.json', "posts.controller:indexJson");

return $app;
4 changes: 4 additions & 0 deletions composer.json
Expand Up @@ -3,6 +3,10 @@
"silex/silex": "*@dev"
},

"require-dev": {
"mockery/mockery": "*"
},

"autoload": {
"psr-0": {
"Demo": "src"
Expand Down
58 changes: 56 additions & 2 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions phpunit.xml.dist
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>

<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit
backupGlobals = "false"
backupStaticAttributes = "false"
colors = "true"
convertErrorsToExceptions = "true"
convertNoticesToExceptions = "true"
convertWarningsToExceptions = "true"
processIsolation = "false"
stopOnFailure = "false"
syntaxCheck = "false"
bootstrap = "vendor/autoload.php" >

<testsuites>
<testsuite name="Project Test Suite">
<directory>tests/</directory>
</testsuite>
</testsuites>

<listeners>
<listener class="\Mockery\Adapter\Phpunit\TestListener" file="vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListener.php"></listener>
</listeners>

</phpunit>
27 changes: 27 additions & 0 deletions src/Demo/Controller/ControllerResolver.php
@@ -0,0 +1,27 @@
<?php

namespace Demo\Controller;

use Silex\ControllerResolver as BaseControllerResolver;

class ControllerResolver extends BaseControllerResolver
{
protected function createController($controller)
{
if (false !== strpos($controller, '::')) {
return parent::createController($controller);
}

if (false === strpos($controller, ':')) {
throw new \LogicException(sprintf('Unable to parse the controller name "%s".', $controller));
}

list($service, $method) = explode(':', $controller, 2);

if (!isset($this->app[$service])) {
throw new \InvalidArgumentException(sprintf('Service "%s" does not exist.', $controller));
}

return array($this->app[$service], $method);
}
}
21 changes: 21 additions & 0 deletions src/Demo/Controller/PostController.php
@@ -0,0 +1,21 @@
<?php

namespace Demo\Controller;

use Demo\Repository\PostRepository;
use Symfony\Component\HttpFoundation\JsonResponse;

class PostController
{
protected $repo;

public function __construct(PostRepository $repo)
{
$this->repo = $repo;
}

public function indexJson()
{
return new JsonResponse($this->repo->findAll());
}
}
21 changes: 21 additions & 0 deletions tests/Demo/Test/Controller/PostControllerTest.php
@@ -0,0 +1,21 @@
<?php

namespace Demo\Test\Controller;

use Demo\Controller\PostController;

use Mockery as m;

class PostControllerTest extends \PHPUnit_Framework_Testcase
{
public function testIndexJson()
{
$repo = m::mock("Demo\Repository\PostRepository")
->shouldReceive("findAll")
->andReturn($posts = array(array("title" => "Dave")))
->mock();

$controller = new PostController($repo);
$this->assertInstanceOf("Symfony\Component\HttpFoundation\JsonResponse", $controller->indexJson());
}
}

0 comments on commit e250e09

Please sign in to comment.