私はJenssegers Optimusパッケージを使用してURLを難読化しています。Jenssegers OptimusをLaravel Modelsで使用するには?
現在、私はget要求を処理するすべてのコントローラで呼び出しています。問題は、コントローラのほぼすべてのメソッドでIDを常にエンコードしてデコードする必要があることです。
例えば:
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);
}
}
私はいつも私がURLに難読化する必要があるモデルのIDを暗号化するためにアクセサ&ミューテータを作成すると思いました。だから私はコードを再利用するためにそれらを特性に入れました。私は試した:
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
は、私はむしろ私のコントローラでそのエンコードとデコード機能を複数回呼び出すよりも、モデルレベルでオプティマスの難読化を使用することができればそれは本当にいいだろう。
これを行うためのFakeIDという別のパッケージがあります。私は私のプロジェクトでそれを実装しようとしましたが、うまくいきませんでした。私はそれが簡単な作業のように見えるので、私はそれを自分で処理できると確信しています。
あなたの質問を正確なエラーで更新して、コメントすることができます – Gayan
@Gayan確かに。私は自分の形質ファイルを失ったので、そこに置かなかった。まもなく私はそれを再現してエラーを再現します。私が家に帰ると、私は質問を更新します。ありがとう – Leandro
@ガヤン私はちょうど完全なエラーを追加しました。 – Leandro