Ich habe gelernt Laravel io (https://github.com/laravelio/laravel.io/tree/master/app/Forum/Threads) Quellcode zum Erstellen eines Threads in einem Forum. Zuerst kommt die Anfrage an die ForumThreadController. Der Controller ruft ThreadCreator Klasse auf, die für das Erstellen eines Threads verantwortlich ist. Diese Klasse überprüft zunächst den Thread-Betreff und den Nachrichtentext auf Spam. Wenn es Spam ist, wird ein Fehler zurückgegeben, andernfalls wird ein Thread erstellt.Design-Muster in Laravel io Quellcode
interface ThreadCreatorListener
{
public function threadCreationError();
public function threadCreated();
}
class ForumThreadController implements ThreadCreatorListener
{
public function __construct(ThreadCreator $threadCreator)
{
$this->threadCreator = $threadCreator;
}
public function threadCreationError()
{
return $this->redirectBack(['errors' => $errors]);
}
public function threadCreated($thread)
{
return $this->redirectAction('Forum\[email protected]', [$thread->slug]);
}
public function postCreateThread()
{
$threadSubject = $request->get('subject');
$threadBody = $request->get('body');
return $this->threadCreator->create($this , $threadSubject);
}
}
class ThreadCreator
{
private $spamDetector;
public function __construct(SpamDetector spamDetector)
{
$this->spamDetector = spamDetector;
}
public functin create(ThreadCreatorListener $listener , $subject)
{
if($this->spamDetector->isSpam($subject))
{
return $listener->threadCreationError("Subject is spam");
}
return $listener->threadCreated();
}
}
Meine Frage ist, warum sollte ich einen ThreadCreatorListene r in ThreadCreator Klasse übergeben? Welchen Nutzen habe ich damit? Die Klasse könnte leicht einen Fehlercode wie das Rückgabe-Array zurückgeben ('Erfolg' => Wahr, 'Nachricht' => 'Spam erkannt'); was den Purpost lösen würde.
Auch, Ist das eine Art Design-Muster? Ich habe mit Listener Desing-Muster gegoogelt und Beobachter Design-Muster gefunden.
Grüße, Tanvir
Bitte ich das nicht bekommen: in 'ForumThreadController :: postCreateThread()' was ist '$ this-> threadCreator'?! –
Hallo, Ismail, Dies ist eine Instanz der Klasse ThreadCreator. Ich habe meinen Code aktualisiert. Bitte überprüfe es jetzt. – Rumel
Überprüfen Sie Ihren AppServiceProvider oder einen anderen Anbieter, den Sie finden eine Bindung für 'ThreadCreatorListener', die für' ForumThreadController' auflösen !! –