1
0
mirror of https://github.com/flarum/core.git synced 2025-10-12 07:24:27 +02:00

Refactor translation and validation

We now use Symfony's Translation component. Yay! We get more powerful pluralisation and better a fallback mechanism. Will want to implement the caching mechanism at some point too. The API is replicated in JavaScript, which could definitely use some testing.

Validators have been refactored so that they are decoupled from models completely (i.e. they simply validate arrays of user input). Language packs should include Laravel's validation messages.

ref #267
This commit is contained in:
Toby Zerner
2015-10-15 22:30:45 +10:30
parent a23180f279
commit c08b62af80
32 changed files with 578 additions and 4096 deletions

View File

@@ -13,6 +13,7 @@ namespace Flarum\Core\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Group;
use Flarum\Core\Validator\GroupValidator;
use Flarum\Event\GroupWillBeSaved;
use Flarum\Core\Support\DispatchEventsTrait;
use Illuminate\Contracts\Events\Dispatcher;
@@ -23,11 +24,18 @@ class CreateGroupHandler
use AssertPermissionTrait;
/**
* @param Dispatcher $events
* @var GroupValidator
*/
public function __construct(Dispatcher $events)
protected $validator;
/**
* @param Dispatcher $events
* @param GroupValidator $validator
*/
public function __construct(Dispatcher $events, GroupValidator $validator)
{
$this->events = $events;
$this->validator = $validator;
}
/**
@@ -53,6 +61,8 @@ class CreateGroupHandler
new GroupWillBeSaved($group, $actor, $data)
);
$this->validator->assertValid($group->getAttributes());
$group->save();
$this->dispatchEventsFor($group, $actor);

View File

@@ -14,6 +14,7 @@ use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Repository\DiscussionRepository;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Core\Validator\DiscussionValidator;
use Flarum\Event\DiscussionWillBeSaved;
use Illuminate\Contracts\Events\Dispatcher;
@@ -27,14 +28,21 @@ class EditDiscussionHandler
*/
protected $discussions;
/**
* @var DiscussionValidator
*/
protected $validator;
/**
* @param Dispatcher $events
* @param DiscussionRepository $discussions
* @param DiscussionValidator $validator
*/
public function __construct(Dispatcher $events, DiscussionRepository $discussions)
public function __construct(Dispatcher $events, DiscussionRepository $discussions, DiscussionValidator $validator)
{
$this->events = $events;
$this->discussions = $discussions;
$this->validator = $validator;
}
/**
@@ -70,6 +78,8 @@ class EditDiscussionHandler
new DiscussionWillBeSaved($discussion, $actor, $data)
);
$this->validator->assertValid($discussion->getDirty());
$discussion->save();
$this->dispatchEventsFor($discussion, $actor);

View File

@@ -14,6 +14,7 @@ use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Group;
use Flarum\Core\Repository\GroupRepository;
use Flarum\Core\Validator\GroupValidator;
use Flarum\Event\GroupWillBeSaved;
use Flarum\Core\Support\DispatchEventsTrait;
use Illuminate\Contracts\Events\Dispatcher;
@@ -28,14 +29,21 @@ class EditGroupHandler
*/
protected $groups;
/**
* @var GroupValidator
*/
protected $validator;
/**
* @param Dispatcher $events
* @param GroupRepository $groups
* @param GroupValidator $validator
*/
public function __construct(Dispatcher $events, GroupRepository $groups)
public function __construct(Dispatcher $events, GroupRepository $groups, GroupValidator $validator)
{
$this->events = $events;
$this->groups = $groups;
$this->validator = $validator;
}
/**
@@ -70,6 +78,8 @@ class EditGroupHandler
new GroupWillBeSaved($group, $actor, $data)
);
$this->validator->assertValid($group->getDirty());
$group->save();
$this->dispatchEventsFor($group, $actor);

View File

@@ -12,6 +12,7 @@ namespace Flarum\Core\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Repository\PostRepository;
use Flarum\Core\Validator\PostValidator;
use Flarum\Event\PostWillBeSaved;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Core\Post\CommentPost;
@@ -27,14 +28,21 @@ class EditPostHandler
*/
protected $posts;
/**
* @var PostValidator
*/
protected $validator;
/**
* @param Dispatcher $events
* @param PostRepository $posts
* @param PostValidator $validator
*/
public function __construct(Dispatcher $events, PostRepository $posts)
public function __construct(Dispatcher $events, PostRepository $posts, PostValidator $validator)
{
$this->events = $events;
$this->posts = $posts;
$this->validator = $validator;
}
/**
@@ -73,6 +81,8 @@ class EditPostHandler
new PostWillBeSaved($post, $actor, $data)
);
$this->validator->assertValid($post->getDirty());
$post->save();
$this->dispatchEventsFor($post, $actor);

View File

@@ -13,6 +13,7 @@ namespace Flarum\Core\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\User;
use Flarum\Core\Repository\UserRepository;
use Flarum\Core\Validator\UserValidator;
use Flarum\Event\UserWillBeSaved;
use Flarum\Event\UserGroupsWereChanged;
use Flarum\Core\Support\DispatchEventsTrait;
@@ -28,14 +29,21 @@ class EditUserHandler
*/
protected $users;
/**
* @var UserValidator
*/
protected $validator;
/**
* @param Dispatcher $events
* @param UserRepository $users
* @param UserValidator $validator
*/
public function __construct(Dispatcher $events, UserRepository $users)
public function __construct(Dispatcher $events, UserRepository $users, UserValidator $validator)
{
$this->events = $events;
$this->users = $users;
$this->validator = $validator;
}
/**
@@ -119,6 +127,8 @@ class EditUserHandler
new UserWillBeSaved($user, $actor, $data)
);
$this->validator->assertValid(array_merge($user->getDirty(), array_only($attributes, ['password', 'email'])));
$user->save();
$this->dispatchEventsFor($user, $actor);

View File

@@ -11,6 +11,7 @@
namespace Flarum\Core\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Validator\PostValidator;
use Flarum\Event\PostWillBeSaved;
use Flarum\Core\Repository\DiscussionRepository;
use Flarum\Core\Post\CommentPost;
@@ -33,19 +34,27 @@ class PostReplyHandler
*/
protected $notifications;
/**
* @var PostValidator
*/
protected $validator;
/**
* @param Dispatcher $events
* @param DiscussionRepository $discussions
* @param NotificationSyncer $notifications
* @param PostValidator $validator
*/
public function __construct(
Dispatcher $events,
DiscussionRepository $discussions,
NotificationSyncer $notifications
NotificationSyncer $notifications,
PostValidator $validator
) {
$this->events = $events;
$this->discussions = $discussions;
$this->notifications = $notifications;
$this->validator = $validator;
}
/**
@@ -79,6 +88,8 @@ class PostReplyHandler
new PostWillBeSaved($post, $actor, $command->data)
);
$this->validator->assertValid($post->getAttributes());
$post->save();
$this->notifications->onePerUser(function () use ($post, $actor) {

View File

@@ -13,6 +13,7 @@ namespace Flarum\Core\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\User;
use Flarum\Core\AuthToken;
use Flarum\Core\Validator\UserValidator;
use Flarum\Event\UserWillBeSaved;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Settings\SettingsRepository;
@@ -29,14 +30,21 @@ class RegisterUserHandler
*/
protected $settings;
/**
* @var UserValidator
*/
protected $validator;
/**
* @param Dispatcher $events
* @param SettingsRepository $settings
* @param UserValidator $validator
*/
public function __construct(Dispatcher $events, SettingsRepository $settings)
public function __construct(Dispatcher $events, SettingsRepository $settings, UserValidator $validator)
{
$this->events = $events;
$this->settings = $settings;
$this->validator = $validator;
}
/**
@@ -88,6 +96,8 @@ class RegisterUserHandler
new UserWillBeSaved($user, $actor, $data)
);
$this->validator->assertValid(array_merge($user->getAttributes(), compact('password')));
$user->save();
if (isset($token)) {

View File

@@ -14,6 +14,7 @@ use Exception;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Discussion;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Core\Validator\DiscussionValidator;
use Flarum\Event\DiscussionWillBeSaved;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Illuminate\Contracts\Events\Dispatcher as EventDispatcher;
@@ -28,15 +29,22 @@ class StartDiscussionHandler
*/
protected $bus;
/**
* @var DiscussionValidator
*/
protected $validator;
/**
* @param EventDispatcher $events
* @param BusDispatcher $bus
* @param DiscussionValidator $validator
* @internal param Forum $forum
*/
public function __construct(EventDispatcher $events, BusDispatcher $bus)
public function __construct(EventDispatcher $events, BusDispatcher $bus, DiscussionValidator $validator)
{
$this->events = $events;
$this->bus = $bus;
$this->validator = $validator;
}
/**
@@ -64,6 +72,8 @@ class StartDiscussionHandler
new DiscussionWillBeSaved($discussion, $actor, $data)
);
$this->validator->assertValid($discussion->getAttributes());
$discussion->save();
// Now that the discussion has been created, we can add the first post.