chore: adapt UrlGenerator

This commit is contained in:
Sami Mazouz 2023-08-11 15:48:04 +01:00
parent 3b3efc7cbb
commit 9c3460a619
No known key found for this signature in database
45 changed files with 99 additions and 128 deletions

View File

@ -36,7 +36,7 @@ class AkismetProvider extends AbstractServiceProvider
return new Akismet(
$settings->get('flarum-akismet.api_key'),
$url->to('forum')->base(),
$url->base('forum'),
$app::VERSION,
$extensions->getExtension('flarum-akismet')->getVersion() ?? 'unknown',
$config->inDebugMode()

View File

@ -50,7 +50,7 @@ class ConfigureMentions
private function configureUserMentions(Configurator $config): void
{
$config->rendering->parameters['PROFILE_URL'] = $this->url->to('forum')->route('user', ['username' => '']);
$config->rendering->parameters['PROFILE_URL'] = $this->url->route('forum.user', ['username' => '']);
$tagName = 'USERMENTION';
@ -108,7 +108,7 @@ class ConfigureMentions
private function configurePostMentions(Configurator $config): void
{
$config->rendering->parameters['DISCUSSION_URL'] = $this->url->to('forum')->route('discussion', ['id' => '']);
$config->rendering->parameters['DISCUSSION_URL'] = $this->url->route('forum.discussion', ['id' => '']);
$tagName = 'POSTMENTION';
@ -246,7 +246,7 @@ class ConfigureMentions
private function configureTagMentions(Configurator $config): void
{
$config->rendering->parameters['TAG_URL'] = $this->url->to('forum')->route('tag', ['slug' => '']);
$config->rendering->parameters['TAG_URL'] = $this->url->route('forum.tag', ['slug' => '']);
$tagName = 'TAGMENTION';

View File

@ -2,6 +2,6 @@
'{recipient_display_name}' => $user->display_name,
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{url}' => $url->route('forum.discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{content}' => $blueprint->post->content
]) !!}

View File

@ -3,6 +3,6 @@
'{replier_display_name}' => $blueprint->reply->user->display_name,
'{post_number}' => $blueprint->post->number,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->reply->discussion_id, 'near' => $blueprint->reply->number]),
'{url}' => $url->route('forum.discussion', ['id' => $blueprint->reply->discussion_id, 'near' => $blueprint->reply->number]),
'{content}' => $blueprint->reply->content
]) !!}

View File

@ -2,6 +2,6 @@
'{recipient_display_name}' => $user->display_name,
'{mentioner_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{url}' => $url->route('forum.discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{content}' => $blueprint->post->content
]) !!}

View File

@ -48,7 +48,7 @@ class ListTasksController extends AbstractListController
$document->addMeta('total', (string) $total);
$document->addPaginationLinks(
$this->url->to('api')->route('package-manager.tasks.index'),
$this->url->route('api.package-manager.tasks.index'),
$request->query(),
$offset,
$limit,

View File

@ -2,6 +2,6 @@
'{recipient_display_name}' => $user->display_name,
'{poster_display_name}' => $blueprint->post->user->display_name,
'{title}' => $blueprint->post->discussion->title,
'{url}' => $url->to('forum')->route('discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{url}' => $url->route('forum.discussion', ['id' => $blueprint->post->discussion_id, 'near' => $blueprint->post->number]),
'{content}' => $blueprint->post->content
]) !!}

View File

@ -1,4 +1,4 @@
{!! $translator->trans('flarum-suspend.email.unsuspended.body', [
'{recipient_display_name}' => $user->display_name,
'{forum_url}' => $url->to('forum')->base(),
'{forum_url}' => $url->base('forum'),
]) !!}

View File

@ -57,7 +57,7 @@ class ListTagsController extends AbstractListController
$tags = $results->getResults();
$document->addPaginationLinks(
$this->url->to('api')->route('tags.index'),
$this->url->route('api.tags.index'),
$request->query(),
$offset,
$limit,

View File

@ -50,7 +50,7 @@ class Tags
$document->title = $this->translator->trans('flarum-tags.forum.all_tags.meta_title_text');
$document->meta['description'] = $this->translator->trans('flarum-tags.forum.all_tags.meta_description_text');
$document->content = $this->view->make('tags::frontend.content.tags', compact('primaryTags', 'secondaryTags', 'children'));
$document->canonicalUrl = $this->url->to('forum')->base().($defaultRoute === '/tags' ? '' : $request->getUri());
$document->canonicalUrl = $this->url->base('forum').($defaultRoute === '/tags' ? '' : $request->getUri());
$document->payload['apiDocument'] = $apiDocument;
return $document;

View File

@ -7,7 +7,7 @@
<ul>
@foreach ($apiDocument->data as $discussion)
<li>
<a href="{{ $url->to('forum')->route('discussion', [
<a href="{{ $url->route('forum.discussion', [
'id' => $discussion->attributes->slug
]) }}">
{{ $discussion->attributes->title }}
@ -17,10 +17,10 @@
</ul>
@if (isset($apiDocument->links->prev))
<a href="{{ $url->to('forum')->route('tag', ['slug' => $tag->slug]) }}?page={{ $page - 1 }}">&laquo; {{ $translator->trans('core.views.index.previous_page_button') }}</a>
<a href="{{ $url->route('forum.tag', ['slug' => $tag->slug]) }}?page={{ $page - 1 }}">&laquo; {{ $translator->trans('core.views.index.previous_page_button') }}</a>
@endif
@if (isset($apiDocument->links->next))
<a href="{{ $url->to('forum')->route('tag', ['slug' => $tag->slug]) }}?page={{ $page + 1 }}">{{ $translator->trans('core.views.index.next_page_button') }} &raquo;</a>
<a href="{{ $url->route('forum.tag', ['slug' => $tag->slug]) }}?page={{ $page + 1 }}">{{ $translator->trans('core.views.index.next_page_button') }} &raquo;</a>
@endif
</div>

View File

@ -7,7 +7,7 @@
<ul>
@foreach ($category->pluck('attributes', 'id') as $id => $tag)
<li>
<a href="{{ $url->to('forum')->route('tag', [
<a href="{{ $url->route('forum.tag', [
'slug' => $tag['slug']
]) }}">
{{ $tag['name'] }}
@ -17,7 +17,7 @@
<ul>
@foreach ($children->get($id) as $child)
<li>
<a href="{{ $url->to('forum')->route('tag', [
<a href="{{ $url->route('forum.tag', [
'slug' => $child['attributes']['slug']
]) }}">
{{ $child['attributes']['name'] }}

View File

@ -43,9 +43,10 @@ class AdminServiceProvider extends AbstractServiceProvider
$factory = $container->make(RouteHandlerFactory::class);
$router->middleware('admin')->prefix($config->path('admin'))->group(
fn (Router $router) => (include __DIR__.'/routes.php')($router, $factory)
);
$router->middleware('admin')
->prefix($config->path('admin'))
->name('admin.')
->group(fn (Router $router) => (include __DIR__.'/routes.php')($router, $factory));
});
$this->container->singleton('flarum.admin.middleware', function () {

View File

@ -34,6 +34,6 @@ class UpdateExtensionController extends AbstractController
new ToggleExtension($actor, $name, $enabled)
);
return new RedirectResponse($this->url->to('admin')->base());
return new RedirectResponse($this->url->base('admin'));
}
}

View File

@ -34,9 +34,10 @@ class ApiServiceProvider extends AbstractServiceProvider
$router->middlewareGroup('api', $container->make('flarum.api.middleware'));
$router->middleware('api')->prefix($config->path('api'))->group(
fn (Router $router) => (include __DIR__.'/routes.php')($router)
);
$router->middleware('api')
->prefix($config->path('api'))
->name('api.')
->group(fn (Router $router) => (include __DIR__.'/routes.php')($router));
});
$this->container->singleton('flarum.api.throttlers', function () {

View File

@ -40,7 +40,7 @@ class ListAccessTokensController extends AbstractListController
$tokens = $this->filterer->filter(new QueryCriteria($actor, $filter), $limit, $offset);
$document->addPaginationLinks(
$this->url->to('api')->route('access-tokens.index'),
$this->url->route('api.access-tokens.index'),
$request->query(),
$offset,
$limit,

View File

@ -65,7 +65,7 @@ class ListDiscussionsController extends AbstractListController
}
$document->addPaginationLinks(
$this->url->to('api')->route('discussions.index'),
$this->url->route('api.discussions.index'),
$request->query(),
$offset,
$limit,

View File

@ -47,7 +47,7 @@ class ListGroupsController extends AbstractListController
$queryResults = $this->filterer->filter($criteria, $limit, $offset);
$document->addPaginationLinks(
$this->url->to('api')->route('groups.index'),
$this->url->route('api.groups.index'),
$request->query(),
$offset,
$limit,

View File

@ -63,7 +63,7 @@ class ListNotificationsController extends AbstractListController
}
$document->addPaginationLinks(
$this->url->to('api')->route('notifications.index'),
$this->url->route('api.notifications.index'),
$request->query(),
$offset,
$limit,

View File

@ -56,7 +56,7 @@ class ListPostsController extends AbstractListController
$results = $this->filterer->filter(new QueryCriteria($actor, $filters, $sort, $sortIsDefault), $limit, $offset);
$document->addPaginationLinks(
$this->url->to('api')->route('posts.index'),
$this->url->route('api.posts.index'),
$request->query(),
$offset,
$limit,

View File

@ -68,7 +68,7 @@ class ListUsersController extends AbstractListController
}
$document->addPaginationLinks(
$this->url->to('api')->route('users.index'),
$this->url->route('api.users.index'),
$request->query(),
$offset,
$limit,

View File

@ -69,11 +69,11 @@ class ForumSerializer extends AbstractSerializer
'title' => $this->settings->get('forum_title'),
'description' => $this->settings->get('forum_description'),
'showLanguageSelector' => (bool) $this->settings->get('show_language_selector', true),
'baseUrl' => $url = $this->url->to('forum')->base(),
'baseUrl' => $url = $this->url->base('forum'),
'basePath' => $path = parse_url($url, PHP_URL_PATH) ?: '',
'baseOrigin' => substr($url, 0, strlen($url) - strlen($path)),
'debug' => $this->config->inDebugMode(),
'apiUrl' => $this->url->to('api')->base(),
'apiUrl' => $this->url->base('api'),
'welcomeTitle' => $this->settings->get('welcome_title'),
'welcomeMessage' => $this->settings->get('welcome_message'),
'themePrimaryColor' => $this->settings->get('theme_primary_color'),
@ -94,7 +94,7 @@ class ForumSerializer extends AbstractSerializer
];
if ($this->actor->can('administrate')) {
$attributes['adminUrl'] = $this->url->to('admin')->base();
$attributes['adminUrl'] = $this->url->base('admin');
$attributes['version'] = Application::VERSION;
}

View File

@ -43,7 +43,7 @@ trait ExtendsRoutes
$router
->addRoute($route['method'], $route['path'], $action)
->prefix($config->path($this->frontend))
->name($route['name']);
->name("$this->frontend.{$route['name']}");
}
}
);

View File

@ -46,7 +46,7 @@ class Filesystem implements ExtenderInterface
* ->disk('flarum-uploads', function (Paths $paths, UrlGenerator $url) {
* return [
* 'root' => "$paths->public/assets/uploads",
* 'url' => $url->to('forum')->path('assets/uploads')
* 'url' => $url->path('forum', 'assets/uploads')
* ];
* });
* ```

View File

@ -119,7 +119,7 @@ class Theme implements ExtenderInterface
* (new Extend\Theme())
* ->addCustomLessVariable('my-extension__asset_path', function () {
* $url = resolve(UrlGenerator::class);
* $assetUrl = $url->to('forum')->base().'/assets/extensions/my-extension/my-asset.jpg';
* $assetUrl = $url->base('forum').'/assets/extensions/my-extension/my-asset.jpg';
* return "\"$assetUrl\"";
* })
* ```

View File

@ -35,14 +35,14 @@ class FilesystemServiceProvider extends AbstractServiceProvider
'flarum-assets' => function (Paths $paths, UrlGenerator $url) {
return [
'root' => "$paths->public/assets",
'url' => $url->to('forum')->path('assets'),
'url' => $url->path('forum', 'assets'),
'visibility' => Visibility::PUBLIC
];
},
'flarum-avatars' => function (Paths $paths, UrlGenerator $url) {
return [
'root' => "$paths->public/assets/avatars",
'url' => $url->to('forum')->path('assets/avatars')
'url' => $url->path('forum', 'assets/avatars')
];
},
];

View File

@ -60,7 +60,7 @@ class Discussion
$queryString = http_build_query($newQueryParams);
return $this->url->to('forum')->route('discussion', ['id' => $apiDocument->data->attributes->slug]).
return $this->url->route('forum.discussion', ['id' => $apiDocument->data->attributes->slug]).
($queryString ? '?'.$queryString : '');
};

View File

@ -54,7 +54,7 @@ class Index
$document->content = $this->view->make('flarum.forum::frontend.content.index', compact('apiDocument', 'page'));
$document->payload['apiDocument'] = $apiDocument;
$document->canonicalUrl = $this->url->to('forum')->base().($defaultRoute === '/all' ? '' : $request->getUri()->getPath());
$document->canonicalUrl = $this->url->base('forum').($defaultRoute === '/all' ? '' : $request->getUri()->getPath());
$document->page = $page;
$document->hasNextPage = isset($apiDocument->links->next);

View File

@ -32,7 +32,7 @@ class User
$user = $apiDocument->data->attributes;
$document->title = $user->displayName;
$document->canonicalUrl = $this->url->to('forum')->route('user', ['username' => $user->slug]);
$document->canonicalUrl = $this->url->route('forum.user', ['username' => $user->slug]);
$document->payload['apiDocument'] = $apiDocument;
return $document;

View File

@ -40,6 +40,6 @@ class ConfirmEmailController extends AbstractController
$token = SessionAccessToken::generate($user->id);
$this->authenticator->logIn($session, $token);
return new RedirectResponse($this->url->to('forum')->base());
return new RedirectResponse($this->url->base('forum'));
}
}

View File

@ -39,7 +39,7 @@ class LogOutController extends AbstractController
$session = $request->attributes->get('session');
$actor = RequestUtil::getActor($request);
$url = $request->query('return', $this->url->to('forum')->base());
$url = $request->query('return', $this->url->base('forum'));
// If there is no user logged in, return to the index.
if ($actor->isGuest()) {
@ -54,7 +54,7 @@ class LogOutController extends AbstractController
$return = $request->query('return');
$view = $this->view->make('flarum.forum::log-out')
->with('url', $this->url->to('forum')->route('logout').'?token='.$csrfToken.($return ? '&return='.urlencode($return) : ''));
->with('url', $this->url->route('forum.logout').'?token='.$csrfToken.($return ? '&return='.urlencode($return) : ''));
return new HtmlResponse($view->render());
}

View File

@ -60,7 +60,7 @@ class SavePasswordController extends AbstractController
$request->attributes->get('session')->put('errors', new MessageBag($e->errors()));
// @todo: must return a 422 instead, look into renderable exceptions.
return new RedirectResponse($this->url->to('forum')->route('resetPassword', ['token' => $token->token]));
return new RedirectResponse($this->url->route('forum.resetPassword', ['token' => $token->token]));
}
$token->user->changePassword($password);
@ -72,6 +72,6 @@ class SavePasswordController extends AbstractController
$accessToken = SessionAccessToken::generate($token->user->id);
$this->authenticator->logIn($session, $accessToken);
return new RedirectResponse($this->url->to('forum')->base());
return new RedirectResponse($this->url->base('forum'));
}
}

View File

@ -50,9 +50,10 @@ class ForumServiceProvider extends AbstractServiceProvider
$factory = $container->make(RouteHandlerFactory::class);
$router->middleware('forum')->prefix($config->path('forum'))->group(
fn (Router $router) => (include __DIR__.'/routes.php')($router, $factory)
);
$router->middleware('forum')
->prefix($config->path('forum'))
->name('forum.')
->group(fn (Router $router) => (include __DIR__.'/routes.php')($router, $factory));
$this->setDefaultRoute(
$router,

View File

@ -210,13 +210,14 @@ class Application extends IlluminateContainer implements LaravelApplication
'filesystem' => [\Illuminate\Filesystem\FilesystemManager::class, \Illuminate\Contracts\Filesystem\Factory::class],
'filesystem.disk' => [\Illuminate\Contracts\Filesystem\Filesystem::class],
'filesystem.cloud' => [\Illuminate\Contracts\Filesystem\Cloud::class],
'flarum' => [\Illuminate\Contracts\Container\Container::class, \Illuminate\Contracts\Foundation\Application::class, \Psr\Container\ContainerInterface::class, self::class],
'flarum' => [self::class, \Illuminate\Contracts\Container\Container::class, \Illuminate\Contracts\Foundation\Application::class, \Psr\Container\ContainerInterface::class],
'flarum.paths' => [Paths::class],
'hash' => [\Illuminate\Contracts\Hashing\Hasher::class],
'mailer' => [\Illuminate\Mail\Mailer::class, \Illuminate\Contracts\Mail\Mailer::class, \Illuminate\Contracts\Mail\MailQueue::class],
'router' => [\Flarum\Http\Router::class, \Illuminate\Routing\Router::class, \Illuminate\Contracts\Routing\Registrar::class, \Illuminate\Contracts\Routing\BindingRegistrar::class],
'session' => [\Illuminate\Session\SessionManager::class],
'session.store' => [\Illuminate\Session\Store::class, \Illuminate\Contracts\Session\Session::class],
'url' => [\Flarum\Http\UrlGenerator::class, \Illuminate\Routing\UrlGenerator::class, \Illuminate\Contracts\Routing\UrlGenerator::class],
'validator' => [\Illuminate\Validation\Factory::class, \Illuminate\Contracts\Validation\Factory::class],
'view' => [\Illuminate\View\Factory::class, \Illuminate\Contracts\View\Factory::class],
];

View File

@ -1,40 +0,0 @@
<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\Http;
/**
* @internal
*/
class RouteCollectionUrlGenerator
{
public function __construct(
protected string $baseUrl,
protected RouteCollection $routes
) {
}
public function route(string $name, array $parameters = []): string
{
$path = $this->routes->getPath($name, $parameters);
$path = ltrim($path, '/');
return $this->baseUrl.'/'.$path;
}
public function path(string $path): string
{
return $this->baseUrl.'/'.$path;
}
public function base(): string
{
return $this->baseUrl;
}
}

View File

@ -13,4 +13,22 @@ class RoutingServiceProvider extends IlluminateRoutingServiceProvider
return new Router($container['events'], $container);
});
}
protected function registerUrlGenerator(): void
{
$this->app->singleton('url', function (Container $container) {
$routes = $container['router']->getRoutes();
// The URL generator needs the route collection that exists on the router.
// Keep in mind this is an object, so we're passing by references here
// and all the registered routes will be available to the generator.
$container->instance('routes', $routes);
return new UrlGenerator(
$routes, $container->rebinding(
'request', $this->requestRebinder()
), $container['config']['app.asset_url']
);
});
}
}

View File

@ -1,43 +1,32 @@
<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\Http;
use Flarum\Foundation\Application;
use Flarum\Foundation\Config;
use Illuminate\Routing\UrlGenerator as IlluminateUrlGenerator;
class UrlGenerator
class UrlGenerator extends IlluminateUrlGenerator
{
protected array $routes = [];
protected Config $config;
public function __construct(
protected Application $app
) {
public function setConfig(Config $config): void
{
$this->config = $config;
}
/**
* Register a named route collection for URL generation.
*/
public function addCollection(string $key, RouteCollection $routes, ?string $prefix = null): static
public function base(string $frontend): string
{
$this->routes[$key] = new RouteCollectionUrlGenerator(
$this->app->url($prefix),
$routes
);
$url = $this->config->url();
return $this;
if ($frontend) {
$url .= '/'.$this->config->path($frontend);
}
return $url;
}
/**
* Retrieve a URL generator instance for the given named route collection.
*/
public function to(string $collection): RouteCollectionUrlGenerator
public function path(string $frontend, string $path): string
{
return $this->routes[$collection];
return $this->base($frontend).'/'.ltrim($path, '/');
}
}

View File

@ -28,7 +28,7 @@ trait AccountActivationMailerTrait
{
return [
'username' => $user->display_name,
'url' => $this->url->to('forum')->route('confirmEmail', ['token' => $token->token]),
'url' => $this->url->route('forum.confirmEmail', ['token' => $token->token]),
'forum' => $this->settings->get('forum_title')
];
}

View File

@ -51,7 +51,7 @@ class EmailConfirmationMailer
return [
'username' => $user->display_name,
'url' => $this->url->to('forum')->route('confirmEmail', ['token' => $token->token]),
'url' => $this->url->route('forum.confirmEmail', ['token' => $token->token]),
'forum' => $this->settings->get('forum_title')
];
}

View File

@ -43,7 +43,7 @@ class RequestPasswordResetJob extends AbstractJob
$data = [
'username' => $user->display_name,
'url' => $url->to('forum')->route('resetPassword', ['token' => $token->token]),
'url' => $url->route('forum.resetPassword', ['token' => $token->token]),
'forum' => $settings->get('forum_title'),
];

View File

@ -44,7 +44,7 @@ class FilesystemTest extends TestCase
$this->extend((new Extend\Filesystem)->disk('flarum-uploads', function (Paths $paths, UrlGenerator $url) {
return [
'root' => "$paths->public/assets/uploads",
'url' => $url->to('forum')->path('assets/uploads')
'url' => $url->path('forum', 'assets/uploads')
];
}));
@ -148,7 +148,7 @@ class UploadsDisk
{
return [
'root' => "$paths->public/assets/uploads",
'url' => $url->to('forum')->path('assets/uploads')
'url' => $url->path('forum', 'assets/uploads')
];
}
}

View File

@ -5,7 +5,7 @@
{{ $message }}
</p>
<p>
<a href="{{ $url->to('forum')->base() }}">
<a href="{{ $url->base('forum') }}">
{{ $translator->trans('core.views.error.not_found_return_link', ['forum' => $settings->get('forum_title')]) }}
</a>
</p>

View File

@ -50,7 +50,7 @@
<span class="ExtensionListItem-Dot {{ $isEnabled ? 'enabled' : 'disabled' }}" aria-hidden="true"></span>
</td>
<td class="NoJs-ExtensionsTable-toggle Table-controls">
<form action="{{ $url->to('admin')->route('extensions.update', ['name' => $extension->getId()]) }}" method="POST">
<form action="{{ $url->route('admin.extensions.update', ['name' => $extension->getId()]) }}" method="POST">
<input type="hidden" name="csrfToken" value="{{ $csrfToken }}">
<input type="hidden" name="enabled" value="{{ $isEnabled ? 0 : 1 }}">

View File

@ -6,7 +6,7 @@
<ul>
@foreach ($apiDocument->data as $discussion)
<li>
<a href="{{ $url->to('forum')->route('discussion', [
<a href="{{ $url->route('forum.discussion', [
'id' => $discussion->attributes->slug
]) }}">
{{ $discussion->attributes->title }}
@ -16,10 +16,10 @@
</ul>
@if (isset($apiDocument->links->prev))
<a href="{{ $url->to('forum')->route('index') }}?page={{ $page - 1 }}">&laquo; {{ $translator->trans('core.views.index.previous_page_button') }}</a>
<a href="{{ $url->route('forum.index') }}?page={{ $page - 1 }}">&laquo; {{ $translator->trans('core.views.index.previous_page_button') }}</a>
@endif
@if (isset($apiDocument->links->next))
<a href="{{ $url->to('forum')->route('index') }}?page={{ $page + 1 }}">{{ $translator->trans('core.views.index.next_page_button') }} &raquo;</a>
<a href="{{ $url->route('forum.index') }}?page={{ $page + 1 }}">{{ $translator->trans('core.views.index.next_page_button') }} &raquo;</a>
@endif
</div>

View File

@ -14,7 +14,7 @@
</div>
@endif
<form class="form" method="POST" action="{{ $url->to('forum')->route('savePassword') }}">
<form class="form" method="POST" action="{{ $url->route('forum.savePassword') }}">
<input type="hidden" name="csrfToken" value="{{ $csrfToken }}">
<input type="hidden" name="passwordToken" value="{{ $passwordToken }}">