I have a simple task. Add a list of languages.
I created migration, seed some data to table.
I created model ;
<?php
namespace FlarpalTeam\FlarpalAuth;
use Flarum\Database\AbstractModel;
class Language extends AbstractModel
{
/**
* {@inheritdoc}
*/
protected $table = 'languages';
/**
* Create a new language.
*
* @param string $name
* @param string $code
* @param string $alias
* @return static
*/
public static function build($name, $code, $alias)
{
$lang = new static;
$lang->name = $name;
$lang->code = $code;
$lang->alias = $alias;
return $lang;
}
}
Serrializer
<?php
namespace FlarpalTeam\FlarpalAuth\Api\Serializer;
use Flarum\Api\Serializer\AbstractSerializer;
class LanguageSerializer extends AbstractSerializer
{
/**
* {@inheritdoc}
*/
protected $type = 'languages';
/**
* {@inheritdoc}
*/
protected function getDefaultAttributes($language)
{
$attributes = [
'name' => $language->name,
'code' => $language->code,
'alias' => $language->alias
];
return $attributes;
}
}
Controller
<?php
namespace FlarpalTeam\FlarpalAuth\Api\Controller;
use Flarum\Api\Controller\AbstractCollectionController;
use FlarpalTeam\FlarpalAuth\Api\Serializer\LanguageSerializer;
use FlarpalTeam\FlarpalAuth\Language;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ListLanguagesController extends AbstractCollectionController
{
/**
* {@inheritdoc}
*/
public $serializer = LanguageSerializer::class;
/**
* @var \FlarpalTeam\FlarpalAuth\Language
*/
protected $languages;
/**
* @param \FlarpalTeam\FlarpalAuth\Language $languages
*/
public function __construct(Language $languages)
{
$this->languages = $languages;
}
/**
* {@inheritdoc}
*/
protected function data(ServerRequestInterface $request, Document $document)
{
$include = $this->extractInclude($request);
$languages = $this->languages->all();
return $languages->load($include);
}
}
Added routes
<?php
namespace FlarpalTeam\FlarpalAuth\Listener;
use Flarum\Event\ConfigureApiRoutes;
use FlarpalTeam\FlarpalAuth\Api\Controller;
use Illuminate\Contracts\Events\Dispatcher;
class AddLanguagesApi
{
public function subscribe(Dispatcher $events)
{
$events->listen(ConfigureApiRoutes::class, [$this, 'configureApiRoutes']);
}
public function configureApiRoutes(ConfigureApiRoutes $event)
{
$event->get('/languages', 'languages.index', Controller\ListLanguagesController::class);
}
}
js store
import Model from 'flarum/Model';
import mixin from 'flarum/utils/mixin';
export default class Language extends mixin(Model, {
name: Model.attribute('name'),
code: Model.attribute('code'),
alias: Model.attribute('alias')
}) {}
But app.store.all('languages') always empty.
Please, help, what I am doing wrong.