Laravelのルーティングとコントローラーを試してみる

VagrantでCentOS8を起動

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "bento/centos-8.3"
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.synced_folder ".", "/vagrant", type:"virtualbox"

  config.vm.provision "shell", inline: <<-SHELL
    dnf install -y git zip unzip

    # MariaDBのインストール
    dnf install -y mariadb-server
    systemctl enable --now mariadb

    # PHPのインストール
    dnf install -y php php-json php-mbstring php-xml php-zip php-pdo php-mysqlnd

    # Composerのインストール
    curl -sS https://getcomposer.org/installer | php
    mv composer.phar /usr/local/bin/composer
  SHELL
end
> vagrant up
> vagrant ssh

プロジェクトを作成

$ cd /vagrant
$ composer create-project laravel/laravel hoge --prefer-dist
$ cd hoge

起動

$ php artisan serve --host 0.0.0.0

Laravelの画面が表示できた。
f:id:yk5656:20210205001429j:plain

ルーティングの設定

ルーティングの初期状態は下記の通り。

$ cat routes/web.php
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

下記の行を追加する。

$ vi routes/web.php
・・・
Route::get('/hello1', function () {
    return 'Hello, world!';
});

http://192.168.33.10:8000/hello1
にアクセスするとHello, world!が表示される。
f:id:yk5656:20210205001445j:plain

今度は、ビューを作って、

$ vi resources/views/hello2.blade.php
<h2>Hello, world!</h2>

ビューを指定。

$ vi routes/web.php
・・・
Route::get('/hello2', function () {
    return view('hello2');
});

http://192.168.33.10:8000/hello2
にアクセスすると、ビューが表示される。
f:id:yk5656:20210205001458j:plain

コントローラーの作成

コントローラーを作成。

$ php artisan make:controller HelloController

下記のファイルが作られる。

$ cat app/Http/Controllers/HelloController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    //
}

下記のように修正し、

$ vi app/Http/Controllers/HelloController.php
・・・
class HelloController extends Controller
{
  public function index()
  {
      return view('hello3');
  }
}

ビューも作成する。

$ vi resources/views/hello3.blade.php
<h3>Hello, world! 3</h3>

ルートを追加。

$ vi routes/web.php
・・・
Route::get('/hello3', 'HelloController@index');

http://192.168.33.10:8000/hello3
にアクセスすると、コントローラーを経由してビューが表示される。 f:id:yk5656:20210205001509j:plain

補足

ちなみに、コントローラを作成する際に「--resource」を付けると

$ php artisan make:controller Hello4Controller --resource

CRUD(生成/読取/更新/削除)に適したコントローラが作成される。

$ cat app/Http/Controllers/Hello4Controller.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class Hello4Controller extends Controller
{
    public function index()
    {
    }

    public function create()
    {
    }

    public function store(Request $request)
    {
    }

    public function show($id)
    {
    }

    public function edit($id)
    {
    }

    public function update(Request $request, $id)
    {
    }

    public function destroy($id)
    {
    }
}
※長くなるので、コメントを省略しています。

resourceのルートを追加すると、

$ vi routes/web.php
・・・
Route::resource('hello4', 'Hello4Controller');

CRUD用のルートが追加される。

$ php artisan route:list
+--------+-----------+----------------------+----------------+-----------------------------------------------+------------+
| Domain | Method    | URI                  | Name           | Action                                        | Middleware |
+--------+-----------+----------------------+----------------+-----------------------------------------------+------------+
|        | GET|HEAD  | /                    |                | Closure                                       | web        |
|        | GET|HEAD  | api/user             |                | Closure                                       | api        |
|        |           |                      |                |                                               | auth:api   |
|        | GET|HEAD  | hello1               |                | Closure                                       | web        |
|        | GET|HEAD  | hello2               |                | Closure                                       | web        |
|        | GET|HEAD  | hello3               |                | App\Http\Controllers\HelloController@index    | web        |
|        | GET|HEAD  | hello4               | hello4.index   | App\Http\Controllers\Hello4Controller@index   | web        |
|        | POST      | hello4               | hello4.store   | App\Http\Controllers\Hello4Controller@store   | web        |
|        | GET|HEAD  | hello4/create        | hello4.create  | App\Http\Controllers\Hello4Controller@create  | web        |
|        | GET|HEAD  | hello4/{hello4}      | hello4.show    | App\Http\Controllers\Hello4Controller@show    | web        |
|        | PUT|PATCH | hello4/{hello4}      | hello4.update  | App\Http\Controllers\Hello4Controller@update  | web        |
|        | DELETE    | hello4/{hello4}      | hello4.destroy | App\Http\Controllers\Hello4Controller@destroy | web        |
|        | GET|HEAD  | hello4/{hello4}/edit | hello4.edit    | App\Http\Controllers\Hello4Controller@edit    | web        |
+--------+-----------+----------------------+----------------+-----------------------------------------------+------------+

続き

Laravelのモデルを試してみる https://yk5656.hatenablog.com/entry/20210103/1612495103