He hecho una plantilla de blog pero tengo problemas para hacer las rutas. Cuando hago clic en el enlace, debería redirigirme a la página del artículo. En cambio, simplemente me redirige a la misma página/misma ubicación exacta. Aquí está mi código:
<section id="about" class="ts-block" > <div id="cards_landscape_wrap-2"> <div class="container"> <div class="row"> @foreach($blogs as $blog) <div class="col-lg-4"> <a href={{route("blogs.show",$blog->slug)}}> <div class="card-flyer" > <div class="text-box"> <div class="image-box "> <img src="{{'/images/blogs/'.$blog->image}}" alt="{{$blog->title}}" class="img-fluid rounded mx-auto d-block" width="100%"/> </div> <div class="text-container"> <h6>{{$blog->title}}</h6> <p style="max-width: 18rem;"class="ts-opacity__50">{{Str::limit($blog->description,100)}}</p> </div> <div class="card-footer"> <span class="text-primary font-weight-bold">Read</span> </div> </div> </div> </a> </div> @endforeach </div> </div> </div> </section>BlogController :
public function getArticles() { return view('blog')->with([ 'blogs' => Blog::all(), ]); }Rutas :
Route::get('/blog/', [App\Http\Controllers\BlogController::class, 'index'])->name('blog'); Route::get('blogs/','App\Http\Controllers\BlogController@getArticles')->name('blogs.show'); Route::get('/admin/blog', 'App\Http\Controllers\BlogController@getBlog')->name('admin.blog'); Route::resource('/blog','App\Http\Controllers\BlogController'); La ruta que se supone que me está redirigiendo a otra página es la segunda con BlogController@getArticles . Las otras rutas están bien y no tienen problema.
¿Puede alguien amablemente mostrarme lo que hice mal?
Primero, cambia tu ruta por:
Route::get('/blogs/{slug}','App\Http\Controllers\BlogController@getArticles')->name('blogs.show');Entonces, en tu función:
public function getArticles($slug) { return view('blog')->with([ 'blogs' => Blog::firstWhere('slug', $slug); ]); }Bueno, tu pregunta es un poco confusa, porque ese es el resultado esperado del código.
Estás llamando a la ruta 'blogs.show', que te redirige a la página de blogs. Si desea crear una página separada para cada artículo, puede usar Dynamic Rounting en laravel.
Todo lo que tienes que hacer es:
en web.php:
Route::get('blogs/{slug}', 'App\Http\Controllers\BlogController@getArticle')->name('article.show');y en tu controlador:
public function getArticles($slug) { $article = Blog::where('slug', $slug)->first(); return view('article')->with([ 'article' => $article, ]); } Después de eso, <a href={{route("article.show",$blog->slug)}}></a> funcionará.