У меня есть 2 переменные, извлеченные из моего DB $ month и $ id. Когда я делаю $ if (isset ($ slug)), если запрашивает БД и отображает результаты. Когда я делаю то же самое для $ month, он ничего не выводит, но загружает страницу. Я не вижу ничего плохого в коде, так как все соответствует ??
routes.php
Route::get('blog/{id}', ['as' => 'blog.id', 'uses' => 'BlogController@ShowbyId']);
Route::get('blog/{month}', ['as' => 'blog.month', 'uses' => 'BlogController@ShowbyMonth']);
<?php class BlogController extends BaseController {
public function ShowAll() {
$blogs = Blog::all();
$blogs = DB::table('blogs')->paginate(3);
return View::make('pages.blog')
->with('blogs', $blogs);
}
public function ShowById($id) {
$ids = Blog::where('id', $id)
->get();
return View::make('pages.blog')
->with('ids', $ids);
}
public function ShowByMonth($month) {
$months = Blog::where('month', $month);
$months = DB::table('blogs')->paginate(3);
return View::make('pages.blog')
->with('months', $months);
}
}
blog.blade.php
@if(isset($blogs))
@foreach ($blogs as $blog)
<div class="blog-outer-wrap">
<img src="https://web-answers.ru/wp-content/uploads/2019/03/blog/{{ $blog->img}}">
<div class="blog-header">{{ $blog->header }}</div>
<div class="blog-text">{{ $blog->content }}</div>
<a href="{{ URL::route('blog.id', [$blog->id]) }}"><div class="blog-readmore">Read More</div>
</div>
@endforeach
@elseif(isset($ids))
@foreach ($ids as $id)
<div class="blog-outer-wrap">
<img src="../images/blog/{{ $id->img}}">
<div class="blog-header">{{ $id->header }}</div>
<div class="blog-text">{{ $id->content }}</div>
</div>
@endforeach
@elseif(isset($months))
@foreach ($months as $month)
<div class="blog-outer-wrap">
<img src="https://web-answers.ru/wp-content/uploads/2019/03/blog/{{ $month->img}}">
<div class="blog-header">{{ $month->header }}</div>
<div class="blog-text">{{ $month->content }}</div>
<a href="{{ URL::route('blog.month', [$month->slug]) }}"><div class="blog-readmore">Read
</div>
@endforeach
@endif
Так как я не могу комментировать, я отправлю как ответ.
Ваши два маршрута:
Route::get('blog/{id}', . . . );
Route::get('blog/{month}', . . . );
Такие же, любые ури blog/whatever
будет попадать на первый маршрут, несмотря ни на что, второй никогда не попадет, потому что первый шаблон {id} примет любой аргумент. Так ты всегда бьешь BlogController@ShowById
Так что я угадываю ваше прохождение в месяц, чтобы попытаться поразить контроллер ShowByMonth. Вместо этого он направляет вас к:
public function ShowById($id) {
$ids = Blog::where('id', $id)
->get();
return View::make('pages.blog')
->with('ids', $ids);
}
Где ваш запрос становится Blog::where('id', 'January');
или любой другой месяц, который вы положили в свой URI.
Добавить ограничения
Route::get('blog/{id}', [
'as' => 'blog.id',
'uses' => 'BlogController@ShowbyId']
)->where('id', '[0-9]+'); // Only if {id} is any integerRoute::get('blog/{month}', [
'as' => 'blog.month',
'uses' => 'BlogController@ShowbyMonth']
)->where('month', '[A-Za-z]+'); // Only if {month} is any alpha character
Других решений пока нет …