Код: Выделить всё
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class Blog extends Model
{
use HasFactory;
protected $guarded = [];
// This should work for route model binding
public function getRouteKeyName()
{
return 'slug';
}
Код: Выделить всё
Route::apiResource('/blogs',BlogController::class)->only(['index','show','store','destroy']);
Код: Выделить всё
public function show(Blog $blog) // ← Change parameter name to match resource
{
return new BlogResource($blog);
}
Код: Выделить всё
import Image from "next/image";
async function getBlog(slug) {
const baseUrl = process.env.APP_URL ?? "http://127.0.0.1:8000";
const url = `${baseUrl}/api/blogs/${slug}`;
console.log('🔄 Fetching from URL:', url); // Debug 1
try {
const response = await fetch(url, {
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
},
cache: "no-store",
});
console.log('📡 Response status:', response.status); // Debug 2
console.log('📡 Response ok:', response.ok); // Debug 3
if (!response.ok) {
const errorText = await response.text();
console.error('❌ HTTP Error:', response.status, errorText);
throw new Error(`Failed to fetch blog: ${response.status} ${response.statusText}`);
}
const result = await response.json();
console.log('📦 Full API result:', result); // Debug 4
console.log('📦 Data property:', result.data); // Debug 5
return result.data;
} catch (error) {
console.error('💥 [getBlog] Fetch error:', error);
return null;
}
}
export default async function BlogPage({ params }) {
const { slug } = params;
const blog = await getBlog(slug);
if (!blog) {
return (
Blog not found
);
}
return (
{/* Blog Title */}
{blog.title}
{/* Blog Thumbnail */}
{blog.thumbnail && (
)}
{/* Blog Body */}
{/* Button */}
Request Quotation
);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... how-method
Мобильная версия