Ich verwende Jenssegers Optimus-Paket, um meine URLs zu verschleiern.Wie benutzt man Jenssegers Optimus in Laravel Models?
Momentan rufe ich es in jedem einzelnen Controller an, der sich mit get-Anfragen beschäftigt. Problem ist, ich muss meine IDs in fast allen Methoden in meinen Controllern ständig codieren und dekodieren.
Z. B .:
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);
}
}
Ich dachte an die Schaffung Accessoren & Mutatoren immer die IDs der Modelle zu verschlüsseln Ich muss in der URL verschleiern. Also würde ich sie in einen Zug bringen, um den Code wiederzuverwenden. Ich habe versucht:
use Jenssegers\Optimus\Optimus;
trait EncodeId{
public function getIdAttribute($value, Optimus $optimus)
{
return $optimus->encode($value);
}
}
Dann habe ich dieses Merkmal zu meinem Modell hinzugefügt. Laravel würde jedoch einen Fehler über Optimus $ optimus in der Methodendefinition werfen. Es wurde gesagt, dass $ optimus eine Art von Jenssegers \ Optimus \ Optimus sein sollte, obwohl ich es deklariere. Das funktioniert bei Controllern gut, bei Modellen funktioniert das anscheinend nicht. Oder ich sollte in diesem Fall nicht versuchen, ein Merkmal zu verwenden.
Hier ist der tatsächliche Fehler:
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
Es wäre wirklich schön, wenn ich eher seine Codierung und Decodierung Funktionen mehrere Male in meinem Controller als Aufruf Optimus Verschleierung auf Modellebene nutzen könnten.
Es gibt ein anderes Paket namens FakeID, das dazu gedacht ist. Ich habe versucht, es in meinem Projekt zu implementieren, aber es hat nicht funktioniert. Ich bin mir ziemlich sicher, dass ich selbst damit umgehen könnte, da es eine einfache Aufgabe zu sein scheint.
Bitte aktualisieren Sie Ihre Frage mit dem genauen Fehler, damit wir sie kommentieren können – Gayan
@Gayan Sure. Ich habe es nicht dort hingelegt, weil ich meine Trait-Datei verloren habe. Bald werde ich es wiederherstellen, um den Fehler zu reproduzieren. Sobald ich nach Hause komme, werde ich meine Frage aktualisieren. Danke – Leandro
@Gayan Ich habe gerade den vollen Fehler hinzugefügt. – Leandro