Мне удалось найти ресурсы для разбивки на страницы нормальной страницы с помощью ajax. Это довольно просто. вы можете просто получить это:
if ($request->ajax()) {
return [
'posts' => view('ajax.index')->with(compact('posts'))->render(),
'next_page' => $posts->nextPageUrl()
];
}
Но для Представление композитора это не сработает, так как у меня не может быть $request
в View Composer. Кто-нибудь может просветить меня. Возможно, есть способ получить переменные внутри композитора, поскольку ссылка для его разбивки на страницы в основном является текущей страницей плюс расширение для следующего contnet.
Вы можете! просто введите подсказку класса 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
ах, позволь мне попробовать это
Там написано Слишком мало аргументов для функции app \ Http \ Composers \ TodayComposer :: compose (), 1 пройден и ровно 2 ожидаются
Ой может он примет зависимость только через __construct
попробуйте обновить
хорошо, похоже, что это сработало, нужно написать код ajax, чтобы проверить это. Тогда я приму этот ответ.
Работает, спасибо за помощь. Так что я могу сделать __construct и получить запрос внутри композиторов. это новое
Единственная проблема в том, что когда я делаю консольный журнал console.info(data.posts);
или console.info(data.next_page);
, он выдает undefined. но в консоли. Я вижу, что запрос был успешным
я должен внедрять все, что находится в поле зрения или что-то? потому что он выбрасывает category
undefined. категория используется в компоновщике представлений, но не используется в указательном представлении. Должен ли я предоставить все, что использует композитор?
Извините за поздний ответ, да, вам нужно, потому что композитор представления может получить доступ только к тем объектам (кроме запроса), которые вы передаете от контроллера к этому представлению с помощью return view('myview')->with->("category", $category)
. Смотрите обновление для получения дополнительной информации
Итак, вот ответ на этот вопрос. В случае пагинации 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()
предназначен для предоставления ссылки на следующую страницу, чтобы вы могли назначить ее кнопке для следующей разбивки на страницы.
Все будущие зрители, которые пытаются разбить на страницы контент View Composer, не пытайтесь использовать его внутри Compose. Потому что, когда вы это делаете, вы прерываете работу. Я еще не решил проблему. Как только я это сделаю, я отправлю ответ