Laravel-Druckarray in Blade PHP

Lesezeit: 5 Minuten

Benutzeravatar von John Does Legacy
John macht Legacy

Ich möchte ein Array in meiner .blade.php anzeigen, aber es funktioniert nicht richtig, sodass mein Controller so aussieht:

class WatchController extends Controller
{

    public function index()
    {
        $watchFolderPath="C:\\xampp\\htdocs\\Pro\\rec\\";
        $watchFolder     = $this->dirToArray($watchFolderPath);
        return view('watch.new')->with('watchFolder', $watchFolder);
    }

    # Get Directories of Path as Array
    function dirToArray($dir) {

        $result = array();

        $cdir = scandir($dir);

        foreach ($cdir as $key => $value)
        {
            if (!in_array($value,array(".","..")))
            {
                if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
                {
                    $result[$value] = $this->dirToArray($dir . DIRECTORY_SEPARATOR . $value);
                }
                else
                {
                    $result[] = $value;
                }
            }
        }
        return $result;
    }
}

Und in meiner Klinge habe ich einfach versucht, es so zu nennen:

{{ $watchFolder }}

aber es hat nicht funktioniert, ich erhalte die folgende Fehlermeldung:

htmlentities() erwartet, dass Parameter 1 ein angegebener String und ein Array ist

Bearbeiten: Das Array, das ich bekomme, zeigt alle Ordner/Dateien mit Unterordnern in einem Verzeichnis. (verwendet dd())

Aktuell sieht es so aus:

array:6 [▼
  123123 => array:2 [▼
    "subfolder1" => array:1 [▼
      0 => "video.mpg"
    ]
    "subfolder2" => array:1 [▶]
  ]
  789 => array:2 [▶]
  "folder1" => array:2 [▶]
  "folder2" => array:2 [▶]
  "folder3" => array:2 [▶]
  "folder1" => []
]

  • Sie müssen die Elemente durchgehen, z @foreach Lesen Sie einfach das Blade-Handbuch

    – Kevin

    16. März 2016 um 7:44

  • Entweder {{ print_r($array, true) }} oder {!! dd($array) !!} wird dir helfen 🙂

    – Asche

    16. März 2016 um 8:57


  • Ich möchte es später in meiner Klinge schön zeigen.

    – John macht Legacy

    16. März 2016 um 9:00 Uhr

  • Ich habe geantwortet, mit meiner Antwort und der Antwort von Alexey haben Sie alles, was Sie brauchen – wenn Sie es immer noch nicht hinbekommen, dann ist das schwierig; Wir haben Sie genug mit dem Löffel gefüttert.

    – Asche

    16. März 2016 um 9:11 Uhr

  • Welcher Kommentar? Es gibt viele, bei denen keine bestimmte Frage gestellt wird. Warum verbessern Sie Ihre Frage nicht, um 100 % klar zu machen, was Sie erreichen möchten, was Sie bisher getan haben und was Sie nicht tun können …

    – Asche

    16. März 2016 um 9:14

Um das Array nur zu Debugzwecken in Blade auszugeben:

        @php
            var_dump($arr);
        @endphp

Verwenden Sie dann wie erwähnt eine foreach-Schleife.

Ashs Benutzeravatar
Asche

Aus Ihrer Frage geht hervor, dass Sie das ausgeben möchten Array für Debugging-Zwecke, die Sie, wie ich bereits kommentiert habe, einfach verwenden können <?php Und ?> Tags in Ihren Blade-Vorlagen.

<?php dd($array); ?>

Blade verfügt jedoch über ein Rohausgabe-Tag-Paar {!! Und !!}.

Sobald Sie bereit sind, die Ausgabe Ihrer Verzeichnisstruktur anzuzeigen, sollten Sie sie Ihrer Ansicht zuweisen.

Es gibt zwei schnelle Möglichkeiten, es entweder mit Reflection zu verwenden; in Ihrem Controller:

class WatchController extends Controller
{
    public function index(\Illuminate\Filesystem\Filesystem $filesystem)
    {
        $files = $filesystem->allFiles($watchFolderPath);

        // Your code.

        return view('name', ['files' => $files]);
    }
}

Oder um es von dort aus zu nennen Container:

class WatchController extends Controller
{
    public function index()
    {
        $files = app('files')->allFiles($watchFolderPath);

        // Your code.

        return view('name', ['files' => $files]);
    }
}

Auch du sollen Benutze die DateisystemEs besteht keine Notwendigkeit, das Rad neu zu erfinden – das sollten Sie tun Lesen Sie das Handbuch.

Du solltest benutzen @foreach:

@foreach ($watchFolder as $key => $value)
    Key: {{ $key }}    
    Value: {{ $value }} 
@endforeach

Oder

@foreach ($watchFolder as $w)
    {{ $w->name }}    
@endforeach

  • Wie würden Sie alle Werte des Arrays ausdrucken?

    – John macht Legacy

    16. März 2016 um 7:53

  • Wenn Sie fragen, wie Sie alle Werte zum Debuggen ausdrucken können, können Sie versuchen, Folgendes zu verwenden: dd($watchFolder); in Ihrem Controller bzw {{ dd($watchFolder); }} Ihrer Ansicht nach. Wenn Sie fragen, wie man Array-Werte in der Produktion ausdruckt, schauen Sie sich den Code in meiner Antwort an.

    – Alexey Mezenin

    16. März 2016 um 8:05


  • Funktioniert nicht. Ich erhalte folgende Fehlermeldung: ErrorException in helpers.php, Zeile 469: htmlentities() erwartet, dass Parameter 1 ein String und ein angegebenes Array ist

    – John macht Legacy

    16. März 2016 um 8:38

  • Da Sie ein kompliziertes Array erstellen, veröffentlichen Sie bitte Ihr Array-Strukturbeispiel in Ihrer Frage, damit wir Ihnen helfen können.

    – Alexey Mezenin

    16. März 2016 um 8:48

  • In Klinge {{ Und }} sind Ersatz für <?php echo Und ?> und werden auch durchgeparst e() um schlimmen Dingen zu entkommen. Daher bräuchte es das wörtlich Tags für HTML-Ausgabe oder RAW-PHP; {!! Und !!} oder <?php Und ?> können auch kostenlos innerhalb einer Blade-Vorlage verwendet werden (obwohl dies verpönt ist).

    – Asche

    16. März 2016 um 9:01 Uhr

Für diejenigen, die vielleicht so aussehen wie ich

echo implode("\n",$array);

Sonst, wenn es sich um ein mehrdimensionales Array handelt

echo implode("\n",array_collapse($array));

Sie können einfach Folgendes verwenden:

@dump($arr)

  • Während dieser Code die Frage lösen könnte, inklusive Erklärung Wie und warum das Problem dadurch gelöst wird, würde wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr positiven Stimmen führen. Denken Sie daran, dass Sie die Frage für zukünftige Leser beantworten und nicht nur für die Person, die jetzt stellt. Bitte bearbeiten Sie Ihre Antwort, um Erläuterungen hinzuzufügen und einen Hinweis darauf zu geben, welche Einschränkungen und Annahmen gelten.

    – Yunnosch

    23. Januar 2022 um 16:14

Um Ihre auszugeben $watchFolder Um ein Array in einer Blade-Datei zu erstellen, können Sie die folgende Methode verwenden:

<pre><code>{{ json_encode($watchFolder, JSON_PRETTY_PRINT) }}</code></pre>

Dadurch wird eine gut formatierte JSON-Version Ihres Arrays angezeigt und es besser lesbar gemacht:

{
    "123123": {
        "subfolder1": [
            "video.mpg"
        ],
        "subfolder2": []
    },
    "789": [],
    "folder1": [],
    "folder2": [],
    "folder3": []
}

Sie können das auch entfernen JSON_PRETTY_PRINT wenn Sie es nur in einer einzigen Zeile anzeigen müssen:

{"123123":{"subfolder1":["video.mpg"],"subfolder2":[]},"789":[],"folder1":[],"folder2":[],"folder3":[]}

  • Während dieser Code die Frage lösen könnte, inklusive Erklärung Wie und warum das Problem dadurch gelöst wird, würde wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr positiven Stimmen führen. Denken Sie daran, dass Sie die Frage für zukünftige Leser beantworten und nicht nur für die Person, die jetzt stellt. Bitte bearbeiten Sie Ihre Antwort, um Erläuterungen hinzuzufügen und einen Hinweis darauf zu geben, welche Einschränkungen und Annahmen gelten.

    – Yunnosch

    23. Januar 2022 um 16:14

1452140cookie-checkLaravel-Druckarray in Blade PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy