# Argument resolver

Controller methods can inject properties if it is type-hinted correctly:

* `Post $post` for single post page
* `Term $term` and `PostCollection $posts` for archive page
* `User $author` and `PostCollection $posts` for author archive page
* `Blog $blog`

The resolvers take care of validating the controller callable and its arguments. In case of a problem, it throws an exception with a nice message explaining the problem.

This is also relevant to handle 404 error : see the guide [Better error pages](https://metabolism.gitbook.io/symfony-wordpress-bundle/guides/error-pages)

## Exemple

```php
<?php

namespace App\Controller;

use Metabolism\WordpressBundle\Entity\Post;
use Metabolism\WordpressBundle\Entity\PostCollection;
use Metabolism\WordpressBundle\Entity\Term;
use Metabolism\WordpressBundle\Entity\User;
use Metabolism\WordpressBundle\Entity\Blog;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class BlogController extends AbstractController
{
	public function homeAction(Post $post, Blog $blog)
	{
		if( $blog->is_admin )
			return $this->render('admin.html.twig', ['post'=>$post]);

		return $this->render('home.html.twig', ['post'=>$post]);
	}	
	
	public function pageAction(Post $post)
	{
		return $this->render('single.html.twig', ['post'=>$post]);
	}

	public function searchAction(PostCollection $posts, $search)
	{
        	return $this->render('search.html.twig', [
            		'search_query'=>$search,
		        'posts'=>$posts
        	]);
	}

	public function categoryAction(Term $term, PostCollection $posts)
	{
        	return $this->render('archive.html.twig', [
            		'posts'=>$posts,
            		'term'=>$term
	       	]);
	}

	public function authorAction(User $user, PostCollection $posts)
	{
        	return $this->render('author-archive.html.twig', [
            		'posts'=>$posts,
            		'author'=>$user
        	]);
	}
}
```
