информации о фильмах на новой странице

131
29 апреля 2021, 21:00

Подскажите по этому проекту кое что (https://github.com/annbin000/cinema_mvc)

есть вложенные темплейты с выгрузкой с бд как на скрине, подскажите как выгрузитьб инфу с бд о этих фильмах и при нажатии открывать в новой странице.

У меня есть модель /app/Models/Films.php в которой я записала методы гет сет на каждое поле.

Дальше есть сервис app/Services/FilmService.php В нем я выбираю все информацию о фильмах

$sql = <<<SQL
    select films.*
    from films
    where films.id = :id
SQL;

После чего идет код с подключением к бд и получении по айди велью и тд.

Дальше есть контроллер app/Controllers/FilmController.php и в нем такой метод

public function execute()
{
    $filmService = new FilmService();
    $view = new View();
    $result = $view->show(Films::class);
    return $result;
}

После чего передаю все во вьюху app/Views/Film.php

class Film extends AbstractBlock implements ViewInterface
{
    protected function getVars(): array
    {
        $filmService = new FilmService();
        return [
            'films' => $filmService->findOneFilm()
        ];
    }
}

После чего есть темплейт templates/film.phtml

В котором я по идее должна выгрузить инфу о фильме а в темплейте templates/comeout.phtml передать ссылку на этот фильм, подскажите как это сделать

Answer 1

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

С Сервисом FilmService.php все норм, так и оставим. В FilmController.php в принципе все верно, но я вижу ты пыталась сделать на примере своего кода из CinemaController.php, но ComeOutController.php тебе больше поможет

public function execute() {
    $view = new Film();
    $result = $view->render();
    return $result;
}

show там не нужна ибо ты уже переписала все на render. С контроллером все, если все хорошо, то при наведении на new Film(); у тебя должно редиректнуть на твою вьюху. К ней и перейдем. Там на примере так же твоего кода нужно чет такое.

class Film extends AbstractBlock implements ViewInterface
{
    private $id;
    public function setFilm(int $id): Film {
        $this->id = $id;
        return $this;
    }
    protected function getVars(): array
    {
        $id = $this->id ?? (int) $_GET['id'];
        $filmService = new FilmService();
        $temp = $filmService->findOneFilm($id);
        return [
            'film' => $filmService->findOneFilm($id)
        ];
    }
}

В самом темплейте фильма поправь вот так.

<?php /** @var \App\Models\Films $film */ ?>
<ul>
    <li>Имя: <?= $film->getName() ?></li>
</ul>

а в темплейте comeout сделай 
<?php /** @var \App\Models\Films[] $comeOut */ ?>
<?php foreach ($comeOut as $film): ?>
    <li><a href="<?= "film/?id=" . $film->getId() ?>"><?= $film->getName() ?></a></li>
<?php endforeach; ?>

Теперь, по идее должно по нажатию переходить на урл типа https://site.com/film/?id=1 Ну и там теперь в дебагере посмотри какие у тебя еще поля приходят и добавь их для полноценной картины о фильме.

READ ALSO
Авто логин в приложении android

Авто логин в приложении android

Нужно сделать авто логин в приложенииСоздано оно на Android Studio и авторизация на Firebase

89
Yaw Pitch Length преобразовать в XYZ

Yaw Pitch Length преобразовать в XYZ

У меня есть 3д вектор который хранит в себе Yaw, Pitch, Length

262