Skip to content

Instantly share code, notes, and snippets.

@taylorotwell
Last active May 28, 2020 08:41
Show Gist options
  • Save taylorotwell/68f614deb9538f2e30108c2698266fda to your computer and use it in GitHub Desktop.
Save taylorotwell/68f614deb9538f2e30108c2698266fda to your computer and use it in GitHub Desktop.
ADR out of the box for Brandon
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Collection;
use Illuminate\Database\Connection;
use Illuminate\Contracts\Routing\ResponseFactory;
/**
* Resolve an action out of the container and call it, injecting method dependencies.
*/
function marshal($action)
{
return App::call([App::make($action), 'handle']);
}
/**
* A repository...
*/
class PostRepository
{
protected $connection;
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
public function all()
{
return $this->connection->table('posts')->get();
}
}
/**
* The responder...
*/
class ListPostsResponder
{
protected $response;
public function __construct(ResponseFactory $response)
{
$this->response = $response;
}
public function handle(Collection $data)
{
if (count($data) === 0) {
return $this->response->make('Not found.', 404);
} else {
return $this->response->view('posts.index', ['posts' => $data->all()]);
}
}
}
/**
* The action...
*/
class ListPosts
{
public function handle(Request $request,
ListPostsResponder $responder,
PostRepository $posts)
{
return $responder->handle(
$posts->all()
);
}
}
/**
* The route...
*/
$router->get('/posts', function () {
return marshal(ListPosts::class);
});
@joshhornby
Copy link

@cryode Any chance you could share this code?

@rapliandras
Copy link

@AkenRoberts

I'm working on the same thing.

I read somewhere that callables were fixed in 5.3 but they definitely don't work in 5.7.

ADR makes you create a separate route for everything, route config becomes a mess.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment