View Layouts and Pagination in Laravel

1. Create a Layout:

Create a layout file named admin.blade.php in the resources/views/layouts/ directory. This layout will contain the common structure of your pages.

<!-- resources/views/layouts/admin.blade.php -->
<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <!-- Add your CSS and JavaScript links here -->
        <!-- Your header content goes here -->
        <!-- Your navigation menu goes here -->
    <div class="content">
        <!-- Your footer content goes here -->

2. Modify Your Create View:

Modify your create.blade.php view file to extend the admin layout and provide a title section.

<!-- resources/views/posts/create.blade.php -->

@section('title', 'Create a Blog Post')

    <!-- Your create post content goes here -->
        <!-- Your form fields go here -->

3. List Posts (Index Page):

Create a new view file for listing posts, e.g., index.blade.php. Extend the admin layout, set the title, and define the content section.

<!-- resources/views/posts/index.blade.php -->

@section('title', 'Blog Posts')

    <!-- Your list of blog posts goes here -->
    @foreach($posts as $post)
        <!-- Display individual posts here -->

    <!-- Pagination links go here -->
    {{ $posts->links() }}

4. Define Routes:

Define routes for creating and listing blog posts in your web.php file.

// Define the route for creating a blog post
Route::get('posts/create', 'PostController@create')->middleware('auth');

// Define the route for listing blog posts
Route::get('posts', 'PostController@index')->middleware('auth');

5. Controller Methods:

In your PostController, add methods for creating and listing blog posts.

public function create()
    return view('posts.create');

public function index()
    // Fetch paginated blog posts (e.g., 10 posts per page)
    $posts = Post::paginate(10);

    return view('posts.index', compact('posts'));

6. Title Attribute for Posts:

In your Post model, define an accessor to generate the title for each post and a named route for viewing a single post.

// Post.php
public function getTitleAttribute()
    // Customize how you generate the title for each post
    return 'Blog Post: ' . $this->title;

// Define a named route for viewing a single post
Route::get('posts/{slug}', 'PostController@show')->name('');

7. View Single Post:

Create a view file named single.blade.php for viewing a single post.

<!-- resources/views/posts/single.blade.php -->

@section('title', $post->title)

    <!-- Display the single post content here -->
    <h1>{{ $post->title }}</h1>
    <p>{{ $post->content }}</p>

In your PostController, add a method to display a single post.

public function show($slug)
    $post = Post::withSlug($slug)->firstOrFail();

    return view('posts.single', compact('post'));

8. Pagination Links:

Laravel’s pagination links are generated automatically when you use paginate(). Include {{ $posts->links() }} in your index.blade.php to display the pagination links.

Notify of
Inline Feedbacks
View all comments
Would love your thoughts, please comment.x