プロジェクトにコントロール追加
プロジェクトとは
初期化の流れの中で composer create-project laravel/laravel:^13.0 laravel13-app で作ったlaravel13-appがプロジェクトになります。 プロジェクトの中に複数のコントロールを入れることができます。初期化の時にはprojectsというフォルダーを作り、その中にlaravel13-appプロジェクトを 作りましたので、また別のプロジェクトを作るときはprojectsフォルダー配下に別のプロジェクトを追加することになります。 このlaravelではMVC(Model View Control)で作り上げていきます。現在行おうとしていのがMVCのCのControl部分です。
FirstTestというコントローラを追加する
Docker Desktopを起動してから、ubuntuまたはwslを起動します
次にlaravel13-appのプロジェクトに移動して、sailを起動してから、そのプロジェクトにfirstTestという名前のコントロールを追加しましょう。 code .とするとその場所をフォルダーとしてvscodeが起動されるので、appフォルダー配下のHttpフォルダーの配下のControllersフォルダーに FirstTestフォルダーができて、その中にIndexController.phpが生成されているのを確認しましょう。
cd ~/projects/laravel13-app ./vendor/bin/sail up -d ./vendor/bin/sail artisan make:controller FirstTest/IndexController code .
コマンドの最期のcode . はVisual Studio Codeをカレントのフォルダーで開くことを表しています。ubuntu側のソースファイルはこれで開いてください。Windowsのデスクトップからアイコンで開くのではubuntuのファイルを開くことは難しいです。
/projects
/Laravel13-app
/app
/Http
/Controllers
/FirstTest
IndexController.php
さきほどのmake:controllerコマンドで、作成したのはプロジェクトの中の1つのページのひな型です。ではその中身をみてみましょう。
<?php
namespace App\Http\Controllers\FirstTest;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class IndexController extends Controller
{
//
}
内容は、Controllerクラスを継承したIndexControllerオブジェクトを宣言していますが、中身はまだないというものです。 このオブジェクトの関数の戻り値をViewに渡して表示させるのですが、まずはViewを使わず、そのまま表示してみましょう。。
class IndexController extends Controller
{
public function showTest() {
return 'Laravel13-test';
}
}
続いて、routeの設定をします。
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});
Route::get('/firstTest', [\App\Http\Controllers\FirstTest\IndexController::class,
'showTest']);
このように必要なコントールを追加していきます。ルートが要らなくなったら'/'のfunctionは捨てて構いません。
ブラウザで「localhost/firstTest」を呼び出します
同じコントロールに引数を追加
おなじfirstTestに引数を追加してみましょう。
Route::get('/firstTest', [\App\Http\Controllers\FirstTest\IndexController::class,
'showTest']);
Route::get('/firstTest/{p1}', [\App\Http\Controllers\FirstTest\IndexController::class,
'showPara']);
引数をルーティングで追加して、新しい関数で受け取ってみましょう
class IndexController extends Controller
{
public function showTest() {
return 'Laravel13-test';
}
public function showPara($p1) {
return "Laravel13-parameter({$p1})";
}
}
ルーティングを追加して実験します
HTMLテンプレートを使用する
ではHTMLテンプレートを作ってviewの力を借りて表示してみましょう
そのために、コントロールを一つ追加します。
./vendor/bin/sail artisan make:controller TempTest/IndexController --invokable
前回と同じようにコントロールを追加しますが、今回はシングルアクションコントールとして作成します。 1つのコントローラーに1つのエンドポイントしか作成できない方式で、firstTestでは引数ありとなしの2つできましたが、 今回はそれを許さない方式です。
Route::get('/tempTest',\App\Http\Controllers\TempTest\IndexController::class);
これで /tempTestのurlのコントロールがIndexControllerに渡りますので、そこでindex.blade.phpというファイルに繋ぐように変更しましょう。
class IndexController extends Controller
{
/**
* Handle the incoming request.
*/
public function __invoke(Request $request)
{
return view('tempTest.index',['name'=>'Laravel Temprate']);
}
}
'tempTest.index'でbladeファイルを指示しているので、そこに変数を渡します。
ところでviewsの下にはTempTestフォルダーが無いので作りましょう。またindex.blade.phpファイルを開きます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>テンプレートテスト</title>
</head>
<body>
<h1>テンプレートテスト</h1>
<p>{{ $name }}</p>
</body>
</html>
localhost/tempTest でテンプレートにデータを渡したサンプルが動きます