LogicalTheme: Added events for registering web routes
Added to allow easier registration of routes. Added for normal web and authed routes. Included testing to cover.
This commit is contained in:
parent
37a17e858a
commit
22a9cf1e48
4 changed files with 65 additions and 1 deletions
|
@ -2,9 +2,12 @@
|
||||||
|
|
||||||
namespace BookStack\App\Providers;
|
namespace BookStack\App\Providers;
|
||||||
|
|
||||||
|
use BookStack\Facades\Theme;
|
||||||
|
use BookStack\Theming\ThemeEvents;
|
||||||
use Illuminate\Cache\RateLimiting\Limit;
|
use Illuminate\Cache\RateLimiting\Limit;
|
||||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Routing\Router;
|
||||||
use Illuminate\Support\Facades\RateLimiter;
|
use Illuminate\Support\Facades\RateLimiter;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
|
||||||
|
@ -46,8 +49,15 @@ class RouteServiceProvider extends ServiceProvider
|
||||||
Route::group([
|
Route::group([
|
||||||
'middleware' => 'web',
|
'middleware' => 'web',
|
||||||
'namespace' => $this->namespace,
|
'namespace' => $this->namespace,
|
||||||
], function ($router) {
|
], function (Router $router) {
|
||||||
require base_path('routes/web.php');
|
require base_path('routes/web.php');
|
||||||
|
Theme::dispatch(ThemeEvents::ROUTES_REGISTER_WEB, $router);
|
||||||
|
});
|
||||||
|
|
||||||
|
Route::group([
|
||||||
|
'middleware' => ['web', 'auth'],
|
||||||
|
], function (Router $router) {
|
||||||
|
Theme::dispatch(ThemeEvents::ROUTES_REGISTER_WEB_AUTH, $router);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ namespace BookStack\App\Providers;
|
||||||
|
|
||||||
use BookStack\Theming\ThemeEvents;
|
use BookStack\Theming\ThemeEvents;
|
||||||
use BookStack\Theming\ThemeService;
|
use BookStack\Theming\ThemeService;
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class ThemeServiceProvider extends ServiceProvider
|
class ThemeServiceProvider extends ServiceProvider
|
||||||
|
|
|
@ -98,6 +98,25 @@ class ThemeEvents
|
||||||
*/
|
*/
|
||||||
const PAGE_INCLUDE_PARSE = 'page_include_parse';
|
const PAGE_INCLUDE_PARSE = 'page_include_parse';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Routes register web event.
|
||||||
|
* Called when standard web (browser/non-api) app routes are registered.
|
||||||
|
* Provides an app router, so you can register your own web routes.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Routing\Router
|
||||||
|
*/
|
||||||
|
const ROUTES_REGISTER_WEB = 'routes_register_web';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Routes register web auth event.
|
||||||
|
* Called when auth-required web (browser/non-api) app routes can be registered.
|
||||||
|
* These are routes that typically require login to access (unless the instance is made public).
|
||||||
|
* Provides an app router, so you can register your own web routes.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Routing\Router
|
||||||
|
*/
|
||||||
|
const ROUTES_REGISTER_WEB_AUTH = 'routes_register_web_auth';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Web before middleware action.
|
* Web before middleware action.
|
||||||
* Runs before the request is handled but after all other middleware apart from those
|
* Runs before the request is handled but after all other middleware apart from those
|
||||||
|
|
|
@ -256,6 +256,40 @@ class ThemeTest extends TestCase
|
||||||
$this->assertEquals($otherPage->id, $args[3]->id);
|
$this->assertEquals($otherPage->id, $args[3]->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_event_routes_register_web_and_web_auth()
|
||||||
|
{
|
||||||
|
$functionsContent = <<<'END'
|
||||||
|
<?php
|
||||||
|
use BookStack\Theming\ThemeEvents;
|
||||||
|
use BookStack\Facades\Theme;
|
||||||
|
use Illuminate\Routing\Router;
|
||||||
|
Theme::listen(ThemeEvents::ROUTES_REGISTER_WEB, function (Router $router) {
|
||||||
|
$router->get('/cat', fn () => 'cat')->name('say.cat');
|
||||||
|
});
|
||||||
|
Theme::listen(ThemeEvents::ROUTES_REGISTER_WEB_AUTH, function (Router $router) {
|
||||||
|
$router->get('/dog', fn () => 'dog')->name('say.dog');
|
||||||
|
});
|
||||||
|
END;
|
||||||
|
|
||||||
|
$this->usingThemeFolder(function () use ($functionsContent) {
|
||||||
|
|
||||||
|
$functionsFile = theme_path('functions.php');
|
||||||
|
file_put_contents($functionsFile, $functionsContent);
|
||||||
|
|
||||||
|
$app = $this->createApplication();
|
||||||
|
/** @var \Illuminate\Routing\Router $router */
|
||||||
|
$router = $app->get('router');
|
||||||
|
|
||||||
|
/** @var \Illuminate\Routing\Route $catRoute */
|
||||||
|
$catRoute = $router->getRoutes()->getRoutesByName()['say.cat'];
|
||||||
|
$this->assertEquals(['web'], $catRoute->middleware());
|
||||||
|
|
||||||
|
/** @var \Illuminate\Routing\Route $dogRoute */
|
||||||
|
$dogRoute = $router->getRoutes()->getRoutesByName()['say.dog'];
|
||||||
|
$this->assertEquals(['web', 'auth'], $dogRoute->middleware());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public function test_add_social_driver()
|
public function test_add_social_driver()
|
||||||
{
|
{
|
||||||
Theme::addSocialDriver('catnet', [
|
Theme::addSocialDriver('catnet', [
|
||||||
|
|
Loading…
Reference in a new issue