mirror of
https://github.com/flarum/core.git
synced 2025-10-14 16:34:26 +02:00
Slug Driver Support (#2456)
- Support slug drivers for core's sluggable models, easily extends to other models - Add automated testing for affected single-model API routes - Fix nickname selection UI - Serialize slugs as `slug` attribute - Make min search length a constant
This commit is contained in:
@@ -12,6 +12,7 @@ namespace Flarum\Api\Controller;
|
||||
use Flarum\Api\Serializer\DiscussionSerializer;
|
||||
use Flarum\Discussion\Discussion;
|
||||
use Flarum\Discussion\DiscussionRepository;
|
||||
use Flarum\Http\SlugManager;
|
||||
use Flarum\Post\PostRepository;
|
||||
use Flarum\User\User;
|
||||
use Illuminate\Support\Arr;
|
||||
@@ -31,6 +32,11 @@ class ShowDiscussionController extends AbstractShowController
|
||||
*/
|
||||
protected $posts;
|
||||
|
||||
/**
|
||||
* @var SlugManager
|
||||
*/
|
||||
protected $slugManager;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
@@ -61,11 +67,13 @@ class ShowDiscussionController extends AbstractShowController
|
||||
/**
|
||||
* @param \Flarum\Discussion\DiscussionRepository $discussions
|
||||
* @param \Flarum\Post\PostRepository $posts
|
||||
* @param \Flarum\Http\SlugManager $slugManager
|
||||
*/
|
||||
public function __construct(DiscussionRepository $discussions, PostRepository $posts)
|
||||
public function __construct(DiscussionRepository $discussions, PostRepository $posts, SlugManager $slugManager)
|
||||
{
|
||||
$this->discussions = $discussions;
|
||||
$this->posts = $posts;
|
||||
$this->slugManager = $slugManager;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,7 +85,11 @@ class ShowDiscussionController extends AbstractShowController
|
||||
$actor = $request->getAttribute('actor');
|
||||
$include = $this->extractInclude($request);
|
||||
|
||||
$discussion = $this->discussions->findOrFail($discussionId, $actor);
|
||||
if (Arr::get($request->getQueryParams(), 'bySlug', false)) {
|
||||
$discussion = $this->slugManager->forResource(Discussion::class)->fromSlug($discussionId, $actor);
|
||||
} else {
|
||||
$discussion = $this->discussions->findOrFail($discussionId, $actor);
|
||||
}
|
||||
|
||||
if (in_array('posts', $include)) {
|
||||
$postRelationships = $this->getPostRelationships($include);
|
||||
|
Reference in New Issue
Block a user