Задача: реализовать возможность для некоторых групп пользователей оставлять ссылки в комментариях, для остальных - удалять ссылки.
Данные от пользователя попадают в контроллер,
public function store(StoreReviewRequest $request) {}
где они проходят валидацию, затем я получаю валидные данные:
$validatedData = $request->validated();
Затем мне нужно применить фильтры к тексту отзыва/комментария, для этого я написал фильтр:
Filter
abstract class Filter
{
protected $content;
protected $filter;
public function __construct($content,array $filters)
{
$this->content = $content;
$this->filters = $filters;
}
public function apply()
{
// code
}
}
TextFilter
class TextFilter extends Filter
{
/**
* Wrap links filter
*
* @return void
*/
public function wrapLinks()
{
// Code
}
}
Написал гейт, с помощью которого я проверяю возможность пользователя оставлять ссылки в комментариях:
if(Gate::allows('useLinkInComments', $request->user()) {
//code
}
И собственно, мне нужно в перед тем, как передать данные в модель, применить эти фильтры после проверки Gate. Делаю я это так:
new TextFilter($validatedData['message'],['wrap-links'])->apply();
Где это лучше делать? В контроллере? В таком случае (если будет расти логика) контроллер будет увеличиваться до больших размеров. Использовать хук afterValidation? Но вроде пишут что он чисто для кастомизации ошибок. Какие есть варианты правильного решения моей проблемы?