Задать вопрос
@86-sys-ad

Роуты для ajax запросов, как правильно делать?

В целях практики пишу админку якобы для сайта, на главной странице выводятся все посты, там же через ajax их можно изменить, удалить. Там же есть иконка с ссылкой на страницу юзеров, при её нажатии заменяется контент с постами и подгружаются юзеры, все работает нормально, но когда через обычный запрос открываю ссылку типа домен/panel/users,
то у меня открывается голая страница с данными, и это естественно, так как layout главной странице не подгружен. Если в шаблоне с юзерами подключить layout, то у меня подгружается вся страница целиком и вставляется в div с постами.
Использую Slim + Twig
часть роутов, в контроллере получаю данные из БД, и рендерится шаблон через twig
$app->get('/panel', 'App\Controllers\AdminController:all_post');

$app->get('/panel/users', 'App\Controllers\UsersController:users');

Layout шаблон twig

<!DOCTYPE html>
<html lang="ru">
    <head>
        // подключение скриптов, css файлов
    </head>
    <body>
        <header>
             // ссылка на users
            <a id="btn_users" href="{{ baseUrl }}/panel/users"><i class="fas fa-user-circle fa-2x"></i></a>
        </header>
        <main class="transit">
        {% block content %}
        {% endblock %}
        </main>
        <script src="{{ baseUrl }}/public/js/functions.js"></script>
        <script src="{{ baseUrl }}/public/js/users/users.js"></script>
    </body>
</html>


шаблон Users

<div class="wrapper">

    {%for user in users%}
      // вывод данных юзеров
    {%endfor%}

</div>


Контроллер Users

class UsersController extends Controller
{
    public function users(Request $request, Response $response)
    {
            $stmt = $this->pdo->query("SELECT * FROM `users` ORDER BY `users`.`id` DESC");
            $users = $stmt->fetchAll(\PDO::FETCH_ASSOC);

            return $this->view->render($response, 'admins/users/users.twig', [
                'users' => $users
            ]);
    }
}

Ajax запрос к UsersController

$(document).ready(function () {
    $('#btn_users').on('click', function (e) {
        e.preventDefault();

        let href = $(this).attr('href')

        history.pushState('', '', href);
        $.ajax({
            url: location.origin+"/panel/users",
            type: "GET",
            dataType: 'html',
            cache: false,
            success: function (data) {
                $('.wrapper').replaceWith(data)
            }
        })
    });
});


Подскажите пожалуйста как это можно исправить, или что почитать, посмотреть, что бы разобраться в таких вопросах.
  • Вопрос задан
  • 84 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы