「PHPフレームワークLaravel入門 第2版」には多くのサンプルコードが示されています。ただ、バージョンの違い等から、そのままでは動作しないコードが多々あります。コードはお互いに関連しているので、一度つまづくとその先に進めなくなってしまいます。
本記事は、そのようなコードへの対応方法を示しました。
(付箋紙に書いたメモを転記しているため、記憶がほとんどないところもあります。多分、質問されても答えらえませんので、ご容赦下さい)

- はじめに
- Chapter 1の手引き
- Chapter 2の手引き
- P.34 1行目
- P.43 リスト2-8~P.44 図2-17あたり
- P.50 リスト2-14
- P.51Column l.4
- P.111 HelloMiddlewareを修正する
- P.123 リスト4-15
- P.159 リスト4-34
- P.162 $exceptに追記する
- P.165 リスト4-38下から9行目
- P.183
- P.193 図5-21
- P.198 リスト5-10
- P.228 1行目
- P.239 リスト6-2 3行目
- P.241 リスト6-4
- P.259 リスト6-20
- P.273 リスト6-31
- P.276 リスト6-34
- P.278 リスト6-35
- P.295 リスト7-3
- P.299 リスト7-6
- P.299 リスト7-7
- P.311 1行目
- P.312 phpコマンド
- P.127 リスト7-22
- P.328 3行目
- P.331 認証ページ
- P.339 リスト7-37
- P.341 Windowsの場合
- p.344 リスト7-42
- まとめ
はじめに
用いた本は、掌田津耶乃著、PHPフレームワークLaravel入門 第2版、第1版第5刷です。
第2版なのになぜ第1版なのだろう?
それは置いておいて、僕のWindows PCにインストールしたLaravel(Artisan) Frameworkのバージョンは、11.21.0です。
Chapter 1の手引き
P.7 Composerについて
・ComposerをダウンロードするにはPHPがインストールされていることが必要
・XAMPPのPHPはスレッドセーフ
P.9 Installation Options
・Install for all users(recommended)を選ぶべき
→ Install for me onlyを選ぶと管理者権限でないためか、インストールできない
P.12 Laravelをインストールする
・gitがないと怒られる(git was not found in your PATH, shipping source download)
→ php.iniの「;extensions=zip」のセミコロンを取る
P.17 プロジェクトの作成
・「laravel new laravelapp」を打つといろいろ聞かれるが、全てEnterでなんとかなった
P.19 http://localhost:8000/
・そのままだとエラーが出る
→ php.iniの「;extension=pdo_sqlite」のセミコロンを外す
→ General errorが出るので、「php artisan migrate」を実行する
P.20 XAMPPにデプロイする
・XAMPPを「C:\Program files」にインストールするとウィルス対策ソフトが邪魔する
→ 「C:\XAMPTT」を作り、そこにインストールする
・「xampp_control.exe」を実行すると、443ポートが、あるプロセスによって使われているらしいので、コマンドプロンプトから「taskkill /pid PID番号 /f」でPIDを停止させて再実行する
・XAMPPのコントロールパネルで、Apachをスタートするとポート443、80が使われるので、「http://localhost/laravelapp/public」が実行できる
P.21 指定のアドレスで公開する
・「httpd.conf」は、「C:\XAMPP\apache\conf」にある
・エクスプローラで「C:\XAMPP\htdocs\laravelapp」を開いた状態で、アドレス欄に「cmd」と打って「Enter」
→ 現れたコマンドプロンプトに「php artisan serve」と打って「Enter」
→ そうすると、ChromeやEdgeから「http://localhost:8000/」で、Laravelが表示される
Chapter 2の手引き
P.34 1行目
・「先ほどのRoute::get分を削除」ではなく、「return」の中身を書き換える
P.43 リスト2-8~P.44 図2-17あたり
・/helloにアクセスすると、「Target class[○○○ Controller]does not exist」が表示される
→「routes\web.php」の2行目くらいに「use App\Http\Controllers\HelloController;」を追記する
→ リスト2-8の「Route::get(‘hello/index’, ’HelloController@index’]);」の代わりに、「Route::get(‘hello/index’, [HelloController::class, ‘index’]);」とする
P.50 リスト2-14
・リスト2-14の代わりに、「Route::get(‘hello’, HelloController::class);」とする
P.51Column l.4
・誤「マジックメソッドは、予め特別な役割を与えられているメソッドのことで、一般に半角マイナス2つで始まる名前をしています」
→正「マジックメソッドは、予め特別な役割を与えられているメソッドのことで、一般に半角アンダースコア2つで始まる名前をしています」
P.111 HelloMiddlewareを修正する
・「app」内の「Http」内にあるKernel.phpを開き・・・
→ このKernel.phpは、「bootstrap/app.php」に変更になった
→ app.phpの内容は以下の通り
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use App\Http\Middleware\HelloMiddleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('hello', [
HelloMiddleware::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
P.123 リスト4-15
・下から4行目
・「$this->validate($request, $validate_rule);」のままだとエラーが出る
→ 「$validated = $request->validate($validate_rule);」に変更する
P.159 リスト4-34
・passesとmessageを合わせたvalidateメソッドで書き換えました
・具体的なコードは次の通りです
<?php
/* 4-34 */
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class Myrule implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
if($value % $this->num != 0)
{ $fail($this->num . 'で割り切れる値が必要です。'); }
}
public function __construct($n)
{
$this->num = $n;
}
}
P.162 $exceptに追記する
・読み進めていた時は、図4-21を見て「ValidateCsrfToken.php」が「app\Http\Middleware」フォルダにあると思っていて、それが見つからなかった
・そのため、次のURLを見て、「routes\web.php」を書き換えて対応した

・ただ、今、ファイルを検索すると、「vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware」フォルダに「ValidateCsrfToken.php」がある。これを書き換えれば動作するかもしれない
P.165 リスト4-38下から9行目
・$this->…の行を次のように変更する
$validate = $request->validate($validate_rule);
P.183
・「sqlite3 database.sqlite」が効かなかった
→sqlite3をインストールていなかったし、Pathも切れていなかった
→対応方法をよく覚えていないが、sqlite3のサイトから「sqlite-tools-win-x64-3490100」をダウンロードして展開し、「c:」直下に「sqlite3」として置いた
→エクスプローラで「laravelapp\database」フォルダを開き、ファイル表示ウィンドにカーソルを置き、「cmd」と打つと、「laravelapp\database」フォルダでコマンドプロンプトが開く
→そこで、「c:\sqlite3\sqlite3 database.sqlite」と打ってdatabase.sqliteファイルを開いたような気がします。うろ覚えなので、正確ではないかもしれません
P.193 図5-21
・/helloにアクセスすると、「SQLSTATE[HY000]:Generalerror:|no such table :sessions(Connection:sqlite, SQL:select * from “sessions” where “id” = … limit1)」というエラーが出ます
→「.env」ファイルで「SESSION_DRIVER=database」が有効であることが原因
→「SESSION_DRIVER=file」とすれば動く
P.198 リスト5-10
・@マーク付近の書式が下記のように変わった
Route::get('hello/add', [HelloController::class, 'add']);
Route::post('hello/add', [HelloController::class, 'create']);
P.228 1行目
・touchは、Linuxのコマンドです。Windowsの場合は、
copy nul database\database.sqlite
又は、
type nul > database\database.sqlite
とする
P.239 リスト6-2 3行目
・「use App\Person;」では動かないので、
「use App\Models\Person;」とする
P.241 リスト6-4
・次の1行も追記のこと
「use App\Http\Controllers\PersonController;」
P.259 リスト6-20
・次の1行を変更
変更前:$this->validate($request, Person::$rules);
変更後:$validate = $request->validate(Person::$rules);
P.273 リスト6-31
・リスト6-31には変更点が2か所ある
変更前1:use App\Board;
変更後1:use App\Models\Board;
変更前2:$this->validate($request, Board::$rules);
変更後2:$validate = $request->validate(Board::$rules);
P.276 リスト6-34
・次の1行を追記する必要がある
use App\Http\Controllers\BoardController;
P.278 リスト6-35
・次のように変更
変更前:return $this->hasOne(‘App\Board’);
変更後:return $this->hasOne(‘App\Models\Board’);
P.295 リスト7-3
・以下1行を追記する
use App\Models\Restdata;
P.299 リスト7-6
・以下を追記
use App\Http\Controllers\RestappController;
・次のように変更
変更前:Route::resource(‘rest’, ‘RestappController’);
変更後:Route::resource(‘rest’, RestappController::class);
P.299 リスト7-7
・次のように変更
変更前:use App\Restdata;
変更後:use App\Models\Restdata;
P.311 1行目
・僕の場合だけかもしれないが、php artisan session:tableを実行するとき、「migration」フォルダの下にあった「0001_01_01_000000_create_users_table.php」を別のフォルダに移さないと、「sessionあり」のエラーになった
P.312 phpコマンド
・既にsessionsテーブルが存在していたので、以下のphpコマンドは実行しなかった
php artisan migrate
P.127 リスト7-22
・次の1行を追加する
use App\Models\Person;
P.328 3行目
・user.phpがあるフォルダ名が違っている
誤:Laravelプロジェクトでは、「app」フォルダ内に「usr.php」という…
正:Laravelプロジェクトでは、「app\Models」フォルダ内に「usr.php」という…
P.331 認証ページ
・「登録」リンクをクリックするときに、P.327の「npm run dev」が実行状態でないと、「Internal Server Error」で、「Vite manifest not found」が出る
P.339 リスト7-37
内容がだいぶ違っているので、びっくりしないように
P.341 Windowsの場合
最近は、以下のコマンドに変更になった
php artisan test
p.344 リスト7-42
・リスト7-42には変更点が2か所ある
変更前1:use App\User;
変更後1:use App\Models\User;
変更前2:$user = factory(User::class)->create();
変更後2:$user = User::factory()->create();
まとめ
この記事を参照していただいた方々が、順調に読み終えられることを祈念しております。
続きものなので、一度分からなくなると先に進めなくなってしまいますが、本が高価なので、挫折して欲しくありません。
ちなみに、僕が全体を読み終えた感想を一言で述べると、「これだけ苦労して、できることはこれだけか」です。でも、これだけの知識を持つ著者の方はすごいなと思いました。



コメント