/ / Zählvariable vom Controller an View in Laravel übergeben 5 - php, Laravel, Controller, Ansichten, Blade

Zählervariable vom Controller an View in Laravel übergeben 5 - php, Laravel, Controller, Ansichten, Blade

Ich versuche an meiner Laravel-Site eine Theke zu bauen. Dieser Zähler nimmt alle Kommentare vom Modell auf Bemerkungen welche von Carbon :: now () bis startofMonth () erstellt wurden. Also ich habe meinen Controller und Funktionszähler so:

 class CommentsController extends Controller
{
public function counter()
{
$new_comments=Comments::where("created_at", Carbon::now()->startofMonth())->get();

$counted->count($new_comments["created_at"]);


return View::make("pages.dashboard")->with("new_comments", $counted);
}
}

Meine Klingenvorlage:

<div class="row">
<div class="col-xs-3">
<i class="fa fa-comments fa-5x"></i>
</div>
<div class="col-xs-9 text-right">
<div class="huge">{{!!$new_comments!!}}</div>
<div>New Comments!</div>
</div>

Ich erhalte ständig eine undefinierte Fehlermeldung, obwohl die Variable im Controller aufgerufen wird! Die Dashboard-Seite funktioniert gut, wenn die Variable nicht in der Blade-Vorlage aufgerufen wird.

BEARBEITEN:

Es ist mir gelungen, dies zu erreichen, wenn der Controller ignoriert wird und Folgendes in meine Ansicht eingefügt wird:

{{AppComments::count()}}

Dies zeigt nur die Gesamtzahl der Zeilen in der Tabelle Kommentare, aber ich werde versuchen, die MySQL-Abfrage hinzuzufügen.

Ich weiß immer noch nicht, warum es vom Controller nicht als Variable aufgerufen werden kann.

Antworten:

0 für die Antwort № 1

In Ihrer Blade-Vorlage rufen Sie es aber richtig auf! bringt solche Probleme {{!!$new_comments!!}} es wird Variable undefined sagen.

Versuchen Sie es ohne !!, es hat für mich funktioniert.


0 für die Antwort № 2

Erstens: Sie möchten, dass alle Kommentare von Anfang des Monats bis jetzt erstellt werden. Sie benötigen eine whereBetween-Abfrage, die nicht gleich ist.

Zweitens: Sie rufen eine undefinierte Variable $ counted auf. Ich denke du musst entfernen

$counted->count($new_comments["created_at"]);

und übergeben Sie $ new_comments an View statt $ counted

return View::make("pages.dashboard")->with("new_comments", $new_comments);

und Anzeige der Kommentare in der Ansicht

{{ $new_comments->count() }}

Hoffe das hilft dir


0 für die Antwort № 3

Dies ist eine etwas verspätete Antwort, aber ich glaube, Sie übergeben Ihre Variablen falsch mit der ->with() Funktion. Aus meiner Erfahrung mit Laravel ->with() verwendet eine Array-Syntax, um mehrere Variablen an eine Ansicht zu übergeben. Zum Beispiel:

 return View::make("pages.dashboard")
->with(["new_comments" => $new_comments, "counted" => $counted]);
// Note the array usage, works with [] or array()

Dann in deinem dashboard.blade.php Sie können entweder anrufen {{ $new_comments }} oder {!! $new_comments !!} um diesen Wert auszudrücken (man ignoriert HTML-Markup, man schließt ihn ein.)

Nebenbei bemerkt, der Versuch, den Inhalt einer Eloquent-Sammlung auszusprechen Comment::get() im Gegensatz zu so etwas Comment::first()) funktioniert möglicherweise nicht. Sie sollten die Ergebnisse durchlaufen und entsprechend wiederholen:

@foreach($new_comments AS $new_comment)
{!! $new_comment->created_at !!}
...
@endforeach

0 für die Antwort № 4

Dies wurde gelöst. Ich habe die Rückkehransicht :: Make (Dashboard) in einem anderen (Seite) Controller aufgerufen. Dieser Controller hatte Präzedenzfall, daher trat diese Ansicht nicht auf. Deshalb habe ich in meinem Pagecontroller Folgendes angewendet:

public function dashboard()
{
$count = Comments::where("created_at", ">", Carbon::today())->count();

return View::make("pages.dashboard")->with("new_comments_count", $count);
}

Ich kann dann new_comments_count in meiner Ansicht aufrufen. Vielen Dank für die Hilfe.