LoginSignup
2024_Hello_World
@2024_Hello_World

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Laravel】bootstrapの適用の仕方がわからない

解決したいこと

ページネーションで使うリンクのスタイルにBootstrapのものを適用させるには、
どうすればいいか教えてください。

Illuminate\Pagination\AbstractPaginator::defaultView("pagination::bootstrap-4");

参考書には、/bootstrap/app.phpreturn $appの前にこの文追加するように書いてあったのですがLaravelのバージョン11ではreturn $appの文がなくなっていて書く場所がわからない。

発生している問題・エラー

スクリーンショット 2024-04-03 151138.png
↓このように表示させたい。
スクリーンショット 2024-04-03 151310.png

該当するソースコード

web.php
<?php

use App\Http\Controllers\HelloController;
use Illuminate\Support\Facades\Route;

Route::get('hello',[HelloController::class,'index']);
HelloController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Pagination\MyPaginator;
use App\Models\Person;

class HelloController extends Controller
{
    public function index(Request $request)
    {
        $id        = $request->query('page');
        $msg       = 'show page: ' . $id;
        $result    = Person::paginate(3);
        $paginator = new MyPaginator($result);
        $data = [
            'msg'       => $msg,
            'data'      => $result,
            'paginator' => $paginator,
        ];
        return view('hello.index', $data);
    }
}

index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>Index</title>
    <link href ="/css/app.css" rel="stylesheet">
</head>
<body>
    <h1>Hello/Index</h1>
    <p>{{$msg}}</p>
    <ul>
        @foreach ($data as $item)
            <li>{{$item->name}} [{{$item->mail}},{{$item->age}}]</li>
        @endforeach
    </ul>
    {!! $paginator->link() !!}
</body>
</html>
Person.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Person extends Model
{
    use HasFactory;
}
MyPaginator.php
<?php
namespace App\Http\Pagination;
use Illuminate\Contracts\Pagination\Paginator;

class MyPaginator
{
    private $paginator;

    public function __construct(Paginator $paginator)
    {
        $this->paginator = $paginator;
    }

    public function link()
    {
        $prev = $this->paginator->currentPage() == 1 ? 'disabled' : '';
        $next = $this->paginator->currentPage() == $this->paginator->count() ? 'disabled' : '';
        $result = '<ul class = "pagination" role = "navigation" >';
        $result .= '<li class = "page-item ' . $prev . ' "><a class = "page-link" href = " '. $this->paginator->previousPageUrl() . '">←前のページ</a></li>';

        $result .= '<li class = "page-item '. $next .'"><a class = "page-link '. $this->paginator->nextPageUrl() .'">次のページ→</a></li>';
        $result .= '</ul>';
        return $result;
    }
}
app.php
<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use App\Http\Middleware\MyMiddleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->append(MyMiddleware::class);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

自分で試したこと

Illuminate\Pagination\AbstractPaginator::defaultView("pagination::bootstrap-4");

参考書には、/bootstrap/app.phpreturn $appの前にこの文追加するように書いてあったのですがLaravelのバージョン11ではreturn $appの文がなくなっていて書く場所がわからない。

0

1Answer

その参考書は何?
完全に間違ってるので名前を公開して「読んだらダメな本」として共有すべき。

Laravel10までのbootstrap/app.phpは一切触ることはない。ここに追加するなんて教えてる本は100%間違っている。

ページネーションのデフォルトテーマの変更方法はAppServiceProviderに書く。

<?php
 
namespace App\Providers;
 
use Illuminate\Pagination\Paginator;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Paginator::useBootstrapFour();
    }
}

使うのはIlluminate\Pagination\Paginator
bootstrap4ならuseBootstrapFour()だけでいい。
5ならuseBootstrapFive()
通常用とシンプル用両方設定される。
bootstrap以外ならdefaultView()defaultSimpleView()で自分で指定。

Laravel9から11まで同じ。つまり最初から正しい方法を使っていれば11でも何も変わらない。

bootstrap/app.phpIlluminate\Pagination\AbstractPaginator::defaultView("pagination::bootstrap-4"); を追加」なんて教えてるその本は100%間違っていると分かる。
MyPaginatorも意味不明なので読まないほうがいい。

2

Your answer might help someone💌