■P099

────────────────
class ClassA {
    private $classB;
    public function __construct()
    {
        $this->classB = new ClassB();
    }
    
    public function run()
    {
        $this->classB->run();
    }
}
────────────────

────────────────
class ClassB {
    public function __construct() {}
    
    public function run()
    {
            // 何かしらの処理を行う
    }
}
────────────────

────────────────
public function __construct()
{
    $this->classB = new ClassB(); // クラスBのインスタンスを生成
}
────────────────


■P100

────────────────
public function run()
{
    $this->classB->run(); // クラスBのrun()メソッドを実行
}
────────────────

────────────────
public function __construct()
{
    $this->classB = new ClassB(); // クラスBのインスタンスを生成
}
────────────────


■P103

────────────────
public function __construct(ClassB $classB)
{
    $this->classB = $classB;
}
────────────────

────────────────
$classB = new ClassB(); // クラスBのインスタンスを生成
$classA = new ClassA($classB); // クラスBのインスタンスをクラスAに渡す
────────────────


■P102

●app/Http/Controllers/Tweet/IndexController.php（すでに記述済み）
────────────────
public function __invoke(Request $request)
{
    $tweets = Tweet::query()->orderBy('created_at', 'DESC')->get();

    return view('tweet.index')
        ->with('tweets', $tweets);
}
────────────────


●app/Services/TweetService.php
────────────────
<?php

namespace App\Services;

use App\Models\Tweet;

class TweetService
{
    public function getTweets()
    {
        return Tweet::query()->orderBy('created_at', 'DESC')->get();
    }
}
────────────────


■P103

●app/Http/Controllers/Tweet/IndexController.php
────────────────
<?php

namespace App\Http\Controllers\Tweet;

use App\Controllers\Controller;
use App\Services\TweetService; // TweetServiceのインポート
use Illiminate\Http\Reqeuest;

class IndexController extends Controller
{
    /**
     * Handle the incoming request.
     */
    public function __invoke(Request $request)
    {
        $tweetService = new TweetService(); // TweetServiceのインスタンスを作成
        $tweets = $tweetService->getTweets(); // つぶやきの一覧を取得

        return view('tweet.index')
            ->with('tweets', $tweets);
    }
}
────────────────


■P104

●routes/web.php（すでに記述済み）
────────────────
Route::get('/tweet', \App\Http\Controllers\Tweet\IndexController::class)->name('tweet.index');
────────────────


●app/Http/Controllers/Tweet/IndexController.php
────────────────
    public function __invoke(Request $request, TweetService $tweetService)
    {
        $tweets = $tweetService->getTweets();

        return view('tweet.index')
            ->with('tweets', $tweets);
    }
────────────────


■P106

●app/Http/Controllers/Tweet/CreateController.php（すでに記述済み）
────────────────
public function __invoke(CreateRequest $request)
{
    $tweet = new Tweet;
    $tweet->content = $request->tweet();
    $tweet->save();
    return redirect()->route('tweet.index');
}
────────────────


■P107

●vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php（参考）
────────────────
namespace Illuminate\Foundation\Http;

use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Auth\Access\Response;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Validation\Factory as ValidationFactory;
use Illuminate\Contracts\Validation\ValidatesWhenResolved;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use Illuminate\Validation\ValidatesWhenResolvedTrait;
// ...省略...
────────────────

