Я использую пакет Jenssegers Optimus для обфускации своих URL.Как использовать Jenssegers Optimus в моделях Laravel?
В настоящее время я звоню в каждый контроллер, который имеет дело с запросами на получение. Проблема в том, что мне нужно постоянно кодировать и декодировать мои идентификаторы почти во всех методах моих контроллеров.
т.д .:
use Jenssegers\Optimus\Optimus;
class ResponseController extends Controller
{
protected $optimus;
public function __construct(Optimus $opt)
{
$this->optimus = $opt;
}
public function index()
{
$labels = Label->get();
foreach ($labels as $key => $label){
$label->id = $this->optimus->encode($label->id);
$labels[$key] = $label;
}
return view('responses/index', compact('labels'));
}
public function show($id)
{
$id = $this->optimus->decode($id);
$label = Label::get($id);
}
}
Я думал о создании Accessors & Мутаторов всегда шифровать идентификаторы моделей, мне нужно, чтобы запутать в URL. Поэтому я использовал бы их для повторного использования кода. Я пробовал:
use Jenssegers\Optimus\Optimus;
trait EncodeId{
public function getIdAttribute($value, Optimus $optimus)
{
return $optimus->encode($value);
}
}
Затем я добавил эту черту к своей модели. Тем не менее, Laravel выкидывает ошибку, говорящую о Optimus $ optimus в определении метода. Он сказал, что ожидается, что $ optimus будет типом Jenssegers \ Optimus \ Optimus, хотя я его объявляю. Это прекрасно работает для контроллеров, но, по-видимому, это не работает для моделей. Или я не должен пытаться использовать черту в этом случае.
Вот фактическая ошибка:
FatalThrowableError in EncodeId.php line 10:
Type error: Argument 2 passed to App\Label::getIdAttribute() must be an instance of Jenssegers\Optimus\Optimus, none given, called in /home/../vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 2734
Было бы очень хорошо, если бы я мог бы использовать Optimus запутывание на уровне модели, а не вызывая его кодирование и декодирование ФУНКЦИИ несколько раз в моих контроллерах.
Существует еще один пакет под названием FakeID, предназначенный для этого. Я попытался реализовать его в своем проекте, но это не сработало. Я почти уверен, что смогу справиться с этим, так как это кажется простой задачей.
Пожалуйста, уточните свой вопрос с точной погрешностью, чтобы мы могли комментировать его. – Gayan
@Gayan. Я не помещал его туда, потому что потерял свой файл признаков. Вскоре я отзову его, чтобы воспроизвести ошибку. Как только я вернусь домой, я уточню свой вопрос. Спасибо – Leandro
@Gayan Я просто добавил полную ошибку. – Leandro