Laravel day 1

環境構築

M1 Macに環境を構築していく

Composerの準備

LaravelはComposerを使用するため、Composerをインストール。今回はHomebrewを使用してインストールする。諸々アップデートも入るので、結構時間かかるのね。

$ brew install composer
.....
$ composer --version
Composer version 2.3.5 2022-04-13 16:43:00

Laravelのインストール

Versionは4.2をインストールする。
公式サイトのドキュメント通りに進めていく。

composer global require "laravel/installer=~1.1"

pathを通そうと思って気が付いたが、シェルがbashになってる。確かzshが標準なはずなので、過去に何かやっている時に変えてしまったのかな。とりあえず戻す。

$ chsh -s /bin/zsh

これで戻った。ターミナルの再起動で確認。ついでにVSCodeのシェルも変更する。
こちらは、設定から「terminal.integrated.shell.Osx」を検索して、一覧からzshを選択する。(デフォルトのターミナルを変えれば連動するかも)

次にパスを通す。.zshrcに次の行を追加。追加後シェルの再起動。

PATH=$PATH:~/.composer/vendor/bin

エラー:Laravelのインストールに失敗

% composer create-project laravel/laravel cmap --prefer-dist
Creating a "laravel/laravel" project at "./cmap"
Installing laravel/laravel (v9.1.8)

In ProjectInstaller.php line 75:
                                    
  mkdir(): Operation not permitted  

mkdirで権限エラー。chmodを使用してパーミッションを変更するものの解消されず。結局下記手順でうまくいく。原因については今度調査するかも。

% mkdir cmap
%cd cmap
%composer create-project laravel/laravel . --prefer-dist

ローカルサーバにて動作確認

% php artisan serve
Starting Laravel development server: http://127.0.0.1:8000
[Mon May 16 00:03:39 2022] PHP 8.1.6 Development Server (http://127.0.0.1:8000) started

http://127.0.0.1:8000にブラウザでアクセス
正常に表示できたら開発環境の構築完了

もっといい方法?Dockerで開発環境を作る

改めてLaravel 9系のマニュアル見たらDockerを使用する方法を推奨してた。なので、試してみる。と思ったけど、ライセンスを確認したところ無料プランはあるものの、基本的にビジネスユースになることと、最終的にリモートサーバ上で動作させるため見送ることにする。

恒例のHello worldの表示

様式美に従ってHello worldを表示する。

初期設定

config/app.php

'name' => env('APP_NAME', 'CMAP'),
'env' => env('APP_ENV', 'production'),
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
'fallback_locale' => 'ja',
'faker_locale' => 'ja_JP',

.env

APP_NAME=CMAP

ルーティングの設定

/helloで表示されるようにルーティングの設定
routes/web.php
web用のルーティングはここで設定

Route::get('/hello', function() {
    return view('hello');
});

resource/views/hello.blade.php
表示用のテンプレートファイル

<body class="antialiased">
	<div>
		<h1>Hello world.</h1>
	</div>
</body>

http://127.0.0.1:8000/hello
でhello worldが表示。

Controllerを使ってみる

コントローラーからHello worldを返して表示する。ついでに、/hello/123でアクセスすると「Hello World.123」と表示するようにする。
app/Http/Contollers/MapController.php

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class MapController extends Controller
{
    /**
     * Hello worldを返すだけ
     *
     * @param  int  $id
     * @return \Illuminate\View\View
     */
    public function show($id) {
        return view('hello', [
            'map' => 'Hello world'.$id
        ]);
    }
}

resource/views/hello.blade.php

<body class="antialiased">
	<div>
		<h1>{{ $map }}</h1>
	</div>
</body>

セキュリティは大事。特に入出力があるサイトを作成する場合は注意が必要。そういう時に、ドキュメントに明記されていると助かる。

Bladeの{{ }}エコー文は、XSS攻撃を防ぐために、PHPのhtmlspecialchars関数を通して自動的に送信します。

https://readouble.com/laravel/9.x/ja/blade.html

routes/web.php

Route::get('/hello/{id}', [MapController::class, 'show']);

次回:Modelを使ってみる

今日はここまで。次回は、DBを用意してModelを使ってDBとの連携を行う。

この記事が気に入ったらサポートをしてみませんか?