iTAC_Technical_Documents

アイタックソリューションズ株式会社

ブログ名

PHP LaravelでWEBアプリ開発 【ルーティング】

前回の記事で認証機能を作成まで解説しました。

ここからWEBアプリに必要な画面や機能をどんどん作っていくことになります。

前回作成した認証機能でログインすると、以下の画面が表示されます。

f:id:iTD_GRP:20190609110003j:plain

ログイン画面からHome画面に遷移しています。

では、このアクセスはどのように制御されているのでしょうか?

Laravelでは、ブラウザからのURLアクセスに対してのルーティングを設定するファイルがあります。

今回はこのルーティングの基本とよく使われるルーティングについて、解説します。

【ルーティングファイル】

Laravelで通常のブラウザからのHTTPリクエストに対するルーティング設定を行う場合は、 laravel/routes/web.php で行います。

まずはこのファイルの中身を見てみましょう。

[web.php]

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

デフォルトでは、上記一つのルーティングのみが設定されています。

このルーティングは、Laravelのウェルカムページ(インストール後に最初に表示されるページ)のルーティングになります。

f:id:iTD_GRP:20190609100621j:plain

Route::get( 第1引数 , 第2引数 );

上記のルーティングはルーティングの基本となるGETアクセスと呼ばれるものです。

Routeクラスのgetメソッドを使用して設定します。

第1引数にはURIを、第2引数にはそれによって呼び出される処理を記載します。

ウェルカムページのルーティングでは、第1引数はトップページを示す'/'、第2引数はクロージャ(無名関数)になっており

view関数を使って戻り値にwelcomeテンプレートを設定しています。

このルーティングによって、トップページにウェルカムページを表示する制御を行っています。

テンプレートについては今後の記事で詳しく解説します。

【ルート定義メソッド】

HTTPリクエストに対して使用可能なルート定義メソッドは以下となります。

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

主に使うのは上の二つです。

Route::get($uri, $callback);

GETリクエストに対してのルーティングを定義します。

主に通常のURL遷移やフォームのGETリクエストに対して用います。

Route::post($uri, $callback);

POSTリクエストに対してのルーティングを定義します。

主にフォームのPOSTリクエストに対して用います。

なお、post() put() delete()メソッドを用いる際は、送信元からCSRFトークンフィールドを渡す必要があります。

【コントローラへのルーティング】

ブラウザからどのURLにアクセスした時に、どのコントローラへ処理を渡すかを設定します。

コントローラへのルーティングは、以下のように記述します。

Route::get('test', 'TestController@index');

この場合は、ブラウザから http://localhost/testにアクセスすると、TestControllerのindex()メソッドへ処理を渡すという事になります。

【ルートパラメータ】

①必須パラメータ

URLからコントローラ側へパラメータを渡したい時は以下のように記述します。

Route::get('test/{user_id}', 'TestController@index');

上記のように {user_id} と記述すると、コントローラ側で変数 $user_id としてパラメータを取得する事が出来ます。

コントローラ側では以下のようにして取得します。

[TestController.php]

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index($user_id)
    {
        print_r($user_id);
    }
}

パラメータは複数同時に渡すことも可能です。

Route::get('test/{user_id}/{user_name}/{email}', 'TestController@index');
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index($user_id, $user_name, $email)
    {
        $params = [
            'user_id'   => $user_id,
            'user_name' => $user_name,
            'email'     => $email,
        ];

        print_r($params);
    }
}

②任意パラメータ

パラメータの入力を任意のものとしたい(パラメータが無くても許容する)場合は以下のように記述します。

Route::get('test/{user_name?}', 'TestController@index');

{user_name?} と末尾にクエスチョンマーク「?」を付ける事で、パラメータが無くても許容されます。

もちろん、この場合はコントローラ側でデフォルト時の処理も忘れずに記述しましょう。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index($user_name = 'John')
    {
        print_r($user_name);
    }
}

【ビューへのルーティング】

コントローラではなくビューへ直接ルーティングを行いたい場合は、view()メソッドで設定します。

Route::view('/welcome', 'welcome');

第1引数にはURIを、第2引数には呼び出すビューの名称を設定します。

ビューへデータを渡したい場合は、第3引数に配列の形で渡します。

Route::view('/welcome', 'welcome', ['name' => 'John']);

ルーティングの基礎的な部分の解説は以上となります。

WEBアプリに処理を追加していくうえでの根幹にかかわる部分なので、しっかり理解して使いこなしていきましょう。


次の記事へ

前の記事へ 目次に戻る