のぐそんブログ

暗いおじさんがシコシコ書くブログです。

PHPもSQLもわからないけどLaravelをやる為のメモ

いよいよ業務でphpをやらなければなくなったので、自分用のメモとして残そうと思います。
見てもあまり参考にならないと思います。

Composerについて

phpをインストールする際に、Composerを利用すると便利っぽいです。
npmのようなものでしょう。

Composerは、PHPプログラミング言語向けのソフトウェアおよび必要なライブラリの依存関係を管理する標準形式を提供するアプリケーションレベルのパッケージ管理システムである。 Composer - ウィキペディア

Homebrewの場合は以下でインストール

brew install composer

laravelをインストールしてプロジェクトを起動する

インストール

composer global require "laravel/installer"

プロジェクトを作成

laravel new hogehoge

ファイル構成は以下

.
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── phpunit.xml
├── public
├── resources
├── routes
├── server.php
├── storage
├── tests
├── vendor
├── webpack.mix.js
└── yarn-error.log

もし実行時に、以下のエラーが出た場合は環境変数を変更する必要があります。

-bash: laravel: command not found

環境変数を変更。

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

環境変数を確認。

echo $PATH

ローカルサーバーを立ち上げ

cd hogehoge
php artisan serve

こんな画面が起動します。

WEBのルーティングを変更

webのルーティングを変更する場合は以下のファイルを変更する。

src/routes/web.php

こんな感じで設定していきます。

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

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

ルートティングでパラメーターを設定する

ルーティングを設定する際に、/detail/1のようにURLのパスをパラメーターとして設定したいことはよくある。

設定方法としては、以下のような感じになる。

Route::get('/detail/{id}', function ($id) {
    
});

ルーティングにcontrollerクラスを利用する

ルータの設定に直接controllerクラスを指定する場合は、以下のように指定する。
※パラメーターの最後に?をつけると、未設定も許容するようになる。

Route::get('/hello/{name?}', 'HelloController@hello');
controller
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    public function hello($name='suzuki') {
        return view('hello', ['name' => $name]);
    }
}

関数を指定しない場合は、controller側で__invokeを利用する。

Route::get('/hello/{name?}', 'HelloController');
controller
class HelloController extends Controller
{
    public function __invoke($name='suzuki') {
        return view('hello', ['name' => $name]);
    }
}

WEBのViewを変更

合わせて表示するViewの設定もみていきます。

webのViewを変更する場合は以下のファイルを変更する。

welcome.blade.php.bladeの部分はlaravelのテンプレートエンジンのようです。

src/resources/views

├── resources
│   └── views
│       ├── about.blade.php
│       └── welcome.blade.php

viewへ変数を渡す

routerからviewに変数をおくってみます。
※普通routerから変数を送ったりするのかはよくわかりません。

src/routes/web.php
Route::get('/', function () {
    return view('welcome',[
        'name' => 'Suzuki'
    ]);
});
src/resources/views/welcome.blade.php
<h1>Hello,<?= $name; ?></h1>
結果

withをつかってviewに変数を渡す

Route::get('/', function () {
    return view('welcome') -> with('name','Kato');
});

compactをつかってviewに変数を渡す

Route::get('/', function () {
    $name1= 'Tanaka';
    $name2 = 'Sasaki';
    return view('welcome',compact('name1','name2'));
});

配列とかも渡せます。

Route::get('/', function () {
    $tasks = [
        'Tanaka',
        'Sasaki',
        'Kato'
    ];

    return view('welcome',compact('tasks'));
});

それをfor文したり。

<?php foreach ($tasks as $task) : ?>
    <li><?= $task; ?></li>
<?php endforeach; ?>

<!--これでもOK-->
@foreach ($tasks as $task)
 <li>{{$task}}</li>
@endforeach

データベースに関する設定

データベースに関する設定は以下のファイルを変更する。

src/config/database.php

環境ごとの設定

開発環境やステージング環境、本番環境など、環境毎での設定は以下のファイルを変更する。

src/.env

このあたりをDBの設定にあわせて修正する。

DB_HOST=host
DB_DATABASE=database
DB_USERNAME=username
DB_PASSWORD=password

.envファイルはキャッシュが優先されるので、キャッシュをクリアする。

php artisan config:cache

ModelからDBに値を入れてみる

①テーブルを作る

↓のようなテーブルをまずつくります。

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(80) NOT NULL DEFAULT '',
  `email` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  UNIQUE KEY(`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
②Modelクラスをつくる

Modelクラスを作る

php artisan make:model Models/User

Modelsフォルダ配下にUser.phpが作成されます。

中身は一旦↓のようにします。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = 'users';

    protected $primaryKey = 'id';

    protected $guarded = ['id']; //create()、fill()、update()で値が代入されない

    public static function create_user($param) {
        $item = null;
        \DB::transaction(function() use($param, &$item) {

            $data = [
                'name'           => 'taro',
                'email'          => 'taro@sample.co.jp',
                'password'       => '12345678',
            ];
                
              //データを追加
            $item = self::create($data);
        });

        return $item;       

    }

    public static function get_user($param) {

    }
}

controllerは以下のようにします。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class HelloController extends Controller
{
    public function users() {
        $param = [
            'name' => 'taro',
            'email' => 'taro@sample.co.jp',
            'password' => '12345678'
        ];

        $users = User::create_user($param);
      
       return view('user', $users);
        
    }
}

viewはこんな感じ。

<!DOCTYPE html>

<html>
<head>
    <title></title>
</head>
<body>
<table>
    <tr>
        <th>id</th>
        <td>{{$id}}</td>
    </tr>
    <tr>
        <th>名前</th>
        <td>{{$name}}</td>
    </tr>
    <tr>
        <th>email</th>
        <td>{{$email}}</td>
    </tr>
</table>
</body>
</html>

結果はこんな感じ。

phpコマンド

# バージョン確認
php -v
# ローカルサーバーを起動
php artisan serve

#laravelコマンド一覧を表示
php artisan

#controllerを作成
php artisan make:controller HogeController

#階層を持ったcontrollerを作成
php artisan make:controller Hoge/HogeController

まとめ

phpがよくわかっていないのでハマります。。。