Как распечатать все результаты в цикле? - PullRequest
4 голосов
/ 04 октября 2019

В своем коде я попытался распечатать все результаты для "montag" IS "geschlossen". Это работает, но я должен напечатать это в var_dump(), в противном случае я получаю ошибку.

Мой вопрос, как я могу вернуть результаты в цикле? Я хочу сделать это (пример PDO) с Doctrine, Symfony и веткой:

foreach ($pdo->query($sql) as $row) {
   echo $row['value1']."<br />";
   echo $row['value2']."<br />";
}
<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\Offnungszeiten;
use Doctrine\ORM\EntityManagerInterface;

class OffnungsController extends AbstractController
{
    /**
     * @Route("/")
     */
    public function index(EntityManagerInterface $em)
    {
        $repository = $em->getRepository(Offnungszeiten::class);
        /** @var Offnungszeiten $open */
        $open = $repository->findOneBy(['id' => 3]);
        if (!$open) {
            throw $this->createNotFoundException(sprintf('Not Found Exception - SQL findOneBy() is undefined'));
        }


        $repository = $this->getDoctrine()->getRepository(Offnungszeiten::class);

        $products = $repository->findBy(
            ['montag' => 'Geschlossen'],
            ['id' => 'ASC']
        );

        $products = $repository->findAll();

    $result = var_dump($products);



        $response = $this->forward('App\Controller\IndexController::index', [
            'open' => $open,
            'productsrt' => $result
        ]);
        return $response;
    }
}

В ветке я попытался напечатать это так:

    {% for productsrt in productsrt %}
        {{ productsrt }}
    {% endfor %}

IndexController.php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class IndexController extends AbstractController
{
    public function index($open, $productsrt)
    {
        return $this->render('index/index.html.twig', [
            'controller_name' => 'IndexController',
            'pagetype' => 'index',
            'pageurl' => "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]",
            'open' => $open,
            'productsrt' => $productsrt
        ]);
    }

Он печатает:

array(2) { [0]=> object(App\Entity\Offnungszeiten)#490 (8) { ["id":"App\Entity\Offnungszeiten":private]=> int(3) ["montag":"App\Entity\Offnungszeiten":private]=> string(11) "Geschlossen" ["dienstag":"App\Entity\Offnungszeiten":private]=> string(22) " 09.00 Uhr - 18.00 Uhr" ["mittwoch":"App\Entity\Offnungszeiten":private]=> string(22) " 09.00 Uhr - 18.00 Uhr" ["donnerstag":"App\Entity\Offnungszeiten":private]=> string(22) " 09.00 Uhr - 20.00 Uhr" ["freitag":"App\Entity\Offnungszeiten":private]=> string(22) " 09.00 Uhr - 18.00 Uhr" ["samstag":"App\Entity\Offnungszeiten":private]=> string(21) "09.00 Uhr - 13.00 Uhr" ["sonntag":"App\Entity\Offnungszeiten":private]=> string(11) "Geschlossen" } [1]=> object(App\Entity\Offnungszeiten)#493 ... и т. Д.

, но я не могу «переформатировать» его в обычный массив или в цикле

Я получил ошибку

An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class App\Entity\Offnungszeiten could not be converted to string").

, если попытался без var_dump()

Я надеюсь, что проблема понятна, и вы можете мне помочь! Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Ваша ошибка говорит о том, что объект не может быть преобразован в строку. Может быть, вы должны использовать to string casting?

     /**
     * To string casting
     *
     * @return string
     */
    public function __toString(): string
    {
        return (string)$this->name;
    }

, чтобы добавить его к своей сущности. Или используйте

    {% for productsrt in productsrt %}
        {{ productsrt.name }}
    {% endfor %}

в вашем контроллере, вы должны отправить $ products, вам не нужно использовать var_dump ()

$products = $repository->findAll();

        $response = $this->forward('App\Controller\IndexController::index', [
            'open' => $open,
            'productsrt' => $products
        ]);
        return $response;
0 голосов
/ 04 октября 2019

Попробуйте использовать метод дампа в Symfony

dump(var)

Правильно отображает информацию об объектах / переменных.

Дополнительная информация https://symfony.com/doc/current/components/var_dumper.html

...