1
0
mirror of https://github.com/flarum/core.git synced 2025-07-28 20:20:34 +02:00

Explicit mapping of post type to class

This commit is contained in:
Toby Zerner
2015-02-13 10:30:32 +10:30
parent 011ae3603e
commit 5e09fd7cd8
2 changed files with 20 additions and 6 deletions

View File

@@ -5,6 +5,7 @@ use Config;
use Event; use Event;
use Flarum\Core\Formatter\FormatterManager; use Flarum\Core\Formatter\FormatterManager;
use Flarum\Core\Posts\Post;
class CoreServiceProvider extends ServiceProvider class CoreServiceProvider extends ServiceProvider
{ {
@@ -31,6 +32,9 @@ class CoreServiceProvider extends ServiceProvider
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\DiscussionMetadataUpdater'); Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\DiscussionMetadataUpdater');
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\UserMetadataUpdater'); Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\UserMetadataUpdater');
Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\RenamedPostCreator'); Event::listen('Flarum.Core.*', 'Flarum\Core\Listeners\RenamedPostCreator');
Post::addType('comment', 'Flarum\Core\Posts\CommentPost');
Post::addType('renamed', 'Flarum\Core\Posts\RenamedPost');
} }
/** /**

View File

@@ -27,6 +27,8 @@ class Post extends Entity
'hide_user_id' => 'integer', 'hide_user_id' => 'integer',
]; ];
protected static $types = [];
public static function boot() public static function boot()
{ {
parent::boot(); parent::boot();
@@ -111,15 +113,23 @@ class Post extends Entity
} }
} }
public static function addType($type, $class)
{
static::$types[$type] = $class;
}
public function newFromBuilder($attributes = []) public function newFromBuilder($attributes = [])
{ {
if (!empty($attributes->type)) { if (!empty($attributes->type)) {
$class = 'Flarum\Core\Posts\\'.ucfirst($attributes->type).'Post'; $type = $attributes->type;
if (class_exists($class)) { if (isset(static::$types[$type])) {
$instance = new $class; $class = static::$types[$type];
$instance->exists = true; if (class_exists($class)) {
$instance->setRawAttributes((array) $attributes, true); $instance = new $class;
return $instance; $instance->exists = true;
$instance->setRawAttributes((array) $attributes, true);
return $instance;
}
} }
} }