allow page and template routes to typehint a post
Diff
src/Routing/PageRoute.php | 26 ++++++++++++++++++++++++++
src/Routing/TemplateRoute.php | 26 ++++++++++++++++++++++++++
2 files changed, 52 insertions(+)
@@ -3,7 +3,9 @@ namespace Koselig\Routing;
use Illuminate\Http\Request;
use Illuminate\Routing\Route;
use Koselig\Models\Post;
use Koselig\Support\Wordpress;
use ReflectionFunction;
/**
* Single page route, this route is matched when the
@@ -24,6 +26,30 @@ class PageRoute extends Route
}
/**
* Run the route action and return the response.
*
* @return mixed
*/
protected function runCallable()
{
// bind the current post to the parameters of the function
$function = new ReflectionFunction($this->action['uses']);
$params = $function->getParameters();
foreach ($params as $param) {
if ($param->getClass()
&& ($param->getClass()->isSubclassOf(Post::class) || $param->getClass()->getName() === Post::class)) {
$builder = $param->getClass()->getMethod('query')->invoke(null);
$post = $builder->find(Wordpress::id());
$this->setParameter($param->getName(), $post);
}
}
return parent::runCallable();
}
/**
* Determine if the route matches given request.
*
* @param \Illuminate\Http\Request $request
@@ -3,7 +3,9 @@ namespace Koselig\Routing;
use Illuminate\Http\Request;
use Illuminate\Routing\Route;
use Koselig\Models\Post;
use Koselig\Support\Wordpress;
use ReflectionFunction;
/**
* Template route, this route is matched then the Wordpress
@@ -24,6 +26,30 @@ class TemplateRoute extends Route
}
/**
* Run the route action and return the response.
*
* @return mixed
*/
protected function runCallable()
{
// bind the current post to the parameters of the function
$function = new ReflectionFunction($this->action['uses']);
$params = $function->getParameters();
foreach ($params as $param) {
if ($param->getClass()
&& ($param->getClass()->isSubclassOf(Post::class) || $param->getClass()->getName() === Post::class)) {
$builder = $param->getClass()->getMethod('query')->invoke(null);
$post = $builder->find(Wordpress::id());
$this->setParameter($param->getName(), $post);
}
}
return parent::runCallable();
}
/**
* Determine if the route matches given request.
*
* @param \Illuminate\Http\Request $request