From b6e785bd2a2668a3427970fb600eecd6c8bcb51a Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Thu, 8 Sep 2016 12:30:34 -0600 Subject: [PATCH] Refactored `onPageNotFound` event to fire after `onPageInitialized` --- system/pages/notfound.md | 5 +++++ .../Grav/Common/Processors/PagesProcessor.php | 18 ++++++++++++++++++ .../Common/Service/PageServiceProvider.php | 14 +++++++------- 3 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 system/pages/notfound.md diff --git a/system/pages/notfound.md b/system/pages/notfound.md new file mode 100644 index 000000000..ca7d3ded7 --- /dev/null +++ b/system/pages/notfound.md @@ -0,0 +1,5 @@ +--- +title: Not Found +routable: false +notfound: true +--- diff --git a/system/src/Grav/Common/Processors/PagesProcessor.php b/system/src/Grav/Common/Processors/PagesProcessor.php index e4c663455..5ea2c53c2 100644 --- a/system/src/Grav/Common/Processors/PagesProcessor.php +++ b/system/src/Grav/Common/Processors/PagesProcessor.php @@ -8,6 +8,8 @@ namespace Grav\Common\Processors; +use Grav\Common\Page\Page; + class PagesProcessor extends ProcessorBase implements ProcessorInterface { public $id = 'pages'; @@ -17,6 +19,22 @@ class PagesProcessor extends ProcessorBase implements ProcessorInterface { $this->container['pages']->init(); $this->container->fireEvent('onPagesInitialized'); $this->container->fireEvent('onPageInitialized'); + + /** @var Page $page */ + $page = $this->container['page']; + + if (!$page->routable()) { + // If no page found, fire event + $event = $this->container->fireEvent('onPageNotFound'); + + if (isset($event->page)) { + unset ($this->container['page']); + $this->container['page'] = $event->page; + } else { + throw new \RuntimeException('Page Not Found', 404); + } + } + } } diff --git a/system/src/Grav/Common/Service/PageServiceProvider.php b/system/src/Grav/Common/Service/PageServiceProvider.php index a8b005678..9e0f7b7dd 100644 --- a/system/src/Grav/Common/Service/PageServiceProvider.php +++ b/system/src/Grav/Common/Service/PageServiceProvider.php @@ -8,6 +8,7 @@ namespace Grav\Common\Service; +use Grav\Common\Page\Page; use Pimple\Container; use Pimple\ServiceProviderInterface; @@ -77,14 +78,13 @@ class PageServiceProvider implements ServiceProviderInterface // Try fallback URL stuff... $c->fallbackUrl($path); - // If no page found, fire event - $event = $c->fireEvent('onPageNotFound'); - - if (isset($event->page)) { - $page = $event->page; - } else { - throw new \RuntimeException('Page Not Found', 404); + if (!$page) { + $path = $c['locator']->findResource('system://pages/notfound.md'); + $page = new Page(); + $page->init(new \SplFileInfo($path)); + $page->routable(false); } + } return $page;