Laravel View Composer разбиение на страницы с помощью ajax

Мне удалось найти ресурсы для разбивки на страницы нормальной страницы с помощью ajax. Это довольно просто. вы можете просто получить это:

if ($request->ajax()) {
    return [
        'posts' => view('ajax.index')->with(compact('posts'))->render(),
        'next_page' => $posts->nextPageUrl()
    ];
}

Но для Представление композитора это не сработает, так как у меня не может быть $request в View Composer. Кто-нибудь может просветить меня. Возможно, есть способ получить переменные внутри композитора, поскольку ссылка для его разбивки на страницы в основном является текущей страницей плюс расширение для следующего contnet.

Все будущие зрители, которые пытаются разбить на страницы контент View Composer, не пытайтесь использовать его внутри Compose. Потому что, когда вы это делаете, вы прерываете работу. Я еще не решил проблему. Как только я это сделаю, я отправлю ответ

Agil 10.09.2018 22:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
217
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете! просто введите подсказку класса Request, и сервис-контейнер внедрит его во время выполнения. После этого вы сможете получить доступ ко всем свойствам объекта запроса.

use Illuminate\Http\Request;

class MyComposer 
{
    public function __construct(Request $request)
    {
        $this->request= $request;
    }

    function compose($view)
    {
        if ($this->request->ajax()) {
          return [
            'posts' => view('ajax.index')->with(compact('posts'))->render(),
            'next_page' => $posts->nextPageUrl()
          ];
        }
    }

}

Обновлять: Если вы не передаете его из контроллера в представление, но объект $ category все еще используется в композиторе, вы получите сообщение об ошибке. Чтобы избежать этого, вы можете либо удалить *, либо явно передать имена представлений тем представлениям, которые используют категорию, и создать другое объявление, передавая имена тех представлений, которые этого не делают, поэтому вам понадобятся два составителя представлений.

//these views use category
View::composer([ 'view1','view2'], 'App\Http\ViewComposers\MyComposerWithCategory' ); 


//these views don't
View::composer([ 'view3','view4'], 'App\Http\ViewComposers\MyComposerWithoutCategory' ); 

Или вы можете просто проверить, установлена ​​ли переменная $ category в операторе if

ах, позволь мне попробовать это

Agil 10.09.2018 18:58

Там написано Слишком мало аргументов для функции app \ Http \ Composers \ TodayComposer :: compose (), 1 пройден и ровно 2 ожидаются

Agil 10.09.2018 19:42

Ой может он примет зависимость только через __construct попробуйте обновить

Vinay 10.09.2018 19:52

хорошо, похоже, что это сработало, нужно написать код ajax, чтобы проверить это. Тогда я приму этот ответ.

Agil 10.09.2018 20:21

Работает, спасибо за помощь. Так что я могу сделать __construct и получить запрос внутри композиторов. это новое

Agil 10.09.2018 20:45

Единственная проблема в том, что когда я делаю консольный журнал console.info(data.posts); или console.info(data.next_page);, он выдает undefined. но в консоли. Я вижу, что запрос был успешным

Agil 10.09.2018 20:51

я должен внедрять все, что находится в поле зрения или что-то? потому что он выбрасывает category undefined. категория используется в компоновщике представлений, но не используется в указательном представлении. Должен ли я предоставить все, что использует композитор?

Agil 10.09.2018 21:30

Извините за поздний ответ, да, вам нужно, потому что композитор представления может получить доступ только к тем объектам (кроме запроса), которые вы передаете от контроллера к этому представлению с помощью return view('myview')->with->("category", $category). Смотрите обновление для получения дополнительной информации

Vinay 11.09.2018 05:09
Ответ принят как подходящий

Итак, вот ответ на этот вопрос. В случае пагинации View Composer. Вы не можете разбивать на страницы в композиторе, технически у вас есть возможность сделать это, но даже если вы получите выполнение запросов к провайдеру (что, очевидно, плохая идея), разбиение на страницы по-прежнему не будет работать очень хорошо.

Одна из основных проблем, с которой вы сразу же столкнетесь, - это разбиение страницы на другую страницу, такую ​​как posts/postslug, эта страница будет легко выдавать ошибки. Вместо этого вам следует создать очень простую функцию в контроллере и выполнять запросы к этой странице.

Вот пример. Допустим, вы предоставляете данные по следующему запросу:

$posts = Post::orderBy('created_at', 'desc')
->paginate(15, ["*"], 'sidebar')->withPath('postPaginator');

Функция, которая будет разбивать это на страницы, должна быть примерно такой:

public function postPaginator(){
$posts = Post::orderBy('created_at', 'desc')->paginate(15 , ["*"], 'sidebar');  
}

если вы хотите, чтобы этот pagiantor был гибким как для запроса ajax, так и для базовых запросов на получение, вы можете вернуть результат, например:

if ($this->request->ajax()) {
      return [
          'posts' => view('ajax.sidebarindex', ['posts' => $posts])->render(),
          'next_page' => $posts->nextPageUrl(),
      ];
}

$posts->nextPageUrl() предназначен для предоставления ссылки на следующую страницу, чтобы вы могли назначить ее кнопке для следующей разбивки на страницы.

Другие вопросы по теме