Laravel-コントローラー

MVCフレームワークでは、文字「C」はコントローラーを表します。これは、ビューとモデル間のトラフィックの誘導として機能します。この章では、Laravelのコントローラーについて学習します。

コントローラの作成

使用しているオペレーティングシステムに基づいてコマンドプロンプトまたはターミナルを開き、次のコマンドを入力して、Artisan CLI(コマンドラインインターフェイス)を使用してコントローラーを作成します。

php artisan make:controller <controller-name> --plain

<controller-name>をコントローラーの名前に置き換えます。これにより、引数を渡すときにプレーンコンストラクターが作成されます—plain。プレーンなコンストラクターを作成したくない場合は、引数を無視してかまいません。作成されたコンストラクターはで見ることができますapp/Http/Controllers

いくつかの基本的なコーディングがすでに行われていることがわかり、カスタムコーディングを追加できます。作成されたコントローラーは、routes.phpから次の構文で呼び出すことができます。

構文

Route::get(‘base URI’,’controller@method’);

Step 1 −次のコマンドを実行して作成します UserController

php artisan make:controller UserController --plain

Step 2 −正常に実行されると、次の出力が表示されます。

Step 3 −作成されたコントローラーは次の場所で確認できます。 app/Http/Controller/UserController.php いくつかの基本的なコーディングがすでに作成されており、必要に応じて独自のコーディングを追加できます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   //
}

コントローラミドルウェア

ミドルウェアは以前に見たことがあり、コントローラーでも使用できます。ミドルウェアは、コントローラーのルートまたはコントローラーのコンストラクター内に割り当てることもできます。ミドルウェア方式を使用して、ミドルウェアをコントローラーに割り当てることができます。登録されたミドルウェアは、コントローラーの特定の方法に制限することもできます。

ルートへのミドルウェアの割り当て

Route::get('profile', [
   'middleware' => 'auth',
   'uses' => 'UserController@showProfile'
]);

ここでは、プロファイルルートのUserControllerに認証ミドルウェアを割り当てています。

コントローラのコンストラクタ内でミドルウェアを割り当てる

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   public function __construct() {
      $this->middleware('auth');
   }
}

ここで割り当てています auth のミドルウェアメソッドを使用したミドルウェア UserController コンストラクタ。

Step 1 −次のコード行をに追加します app/Http/routes.php ファイルして保存します。

routes.php

<?php
Route::get('/usercontroller/path',[
   'middleware' => 'First',
   'uses' => 'UserController@showPath'
]);

Step 2 −と呼ばれるミドルウェアを作成します FirstMiddleware 次のコード行を実行します。

php artisan make:middleware FirstMiddleware

Step 3 −次のコードをに追加します handle 新しく作成されたFirstMiddlewareのメソッド app/Http/Middleware

FirstMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

class FirstMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>First Middleware';
      return $next($request);
   }
}

Step 4 −と呼ばれるミドルウェアを作成します SecondMiddleware 次のコマンドを実行します。

php artisan make:middleware SecondMiddleware

Step 5 −新しく作成されたSecondMiddlewareのhandleメソッドに次のコードを追加します。 app/Http/Middleware

SecondMiddleware.php

<?php

namespace App\Http\Middleware;
use Closure;

class SecondMiddleware {
   public function handle($request, Closure $next) {
      echo '<br>Second Middleware';
      return $next($request);
   }
}

Step 6 −というコントローラーを作成します UserController 次の行を実行します。

php artisan make:controller UserController --plain

Step 7 − URLが正常に実行されると、次の出力が表示されます−

Step 8 −次のコードをにコピーします app/Http/UserController.php ファイル。

app/Http/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class UserController extends Controller {
   public function __construct() {
      $this->middleware('Second');
   }
   public function showPath(Request $request) {
      $uri = $request->path();
      echo '<br>URI: '.$uri;
      
      $url = $request->url();
      echo '<br>';
      
      echo 'URL: '.$url;
      $method = $request->method();
      echo '<br>';
      
      echo 'Method: '.$method;
   }
}

Step 9 −まだ実行していない場合は、次のコマンドを実行してphpの内部Webサーバーを起動します。

php artisan serve

Step 10 −次のURLにアクセスしてください。

http://localhost:8000/usercontroller/path

Step 11 −次の図に示すように出力が表示されます。

Restfulリソースコントローラー

多くの場合、アプリケーションの作成中に実行する必要があります CRUD (Create, Read, Update, Delete)操作。Laravelはこの仕事を私たちにとって簡単にします。コントローラを作成するだけで、LaravelはCRUD操作のすべてのメソッドを自動的に提供します。また、routes.phpファイルのすべてのメソッドに対して単一のルートを登録することもできます。

Step 1 −というコントローラーを作成します MyController 次のコマンドを実行します。

php artisan make:controller MyController

Step 2 −次のコードをに追加します

app/Http/Controllers/MyController.php ファイル。

app/Http/Controllers/MyController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class MyController extends Controller {
   public function index() {
      echo 'index';
   }
   public function create() {
      echo 'create';
   }
   public function store(Request $request) {
      echo 'store';
   }
   public function show($id) {
      echo 'show';
   }
   public function edit($id) {
      echo 'edit';
   }
   public function update(Request $request, $id) {
      echo 'update';
   }
   public function destroy($id) {
      echo 'destroy';
   }
}

Step 3 −次のコード行をに追加します app/Http/routes.php ファイル。

app/Http/routes.php

Route::resource('my','MyController');

Step 4−コントローラーをリソースに登録することにより、MyControllerのすべてのメソッドを登録しています。以下は、リソースコントローラーによって処理されるアクションの表です。

動詞 アクション ルート名
取得する /僕の インデックス my.index
取得する / my / create 作成する my.create
役職 /僕の お店 私の店
取得する / my / {my} 公演 my.show
取得する / my / {my} / edit 編集 my.edit
PUT / PATCH / my / {my} 更新 my.update
削除 / my / {my} 破壊 my.destroy

Step 5 −次の表に示すURLを実行してみてください。

URL 説明 出力画像
http:// localhost:8000 / my MyController.phpのインデックスメソッドを実行します インデックス
http:// localhost:8000 / my / create MyController.phpのcreateメソッドを実行します 作成する
http:// localhost:8000 / my / 1 MyController.phpのshowメソッドを実行します 公演
http:// localhost:8000 / my / 1 / edit MyController.phpの編集メソッドを実行します 編集

暗黙のコントローラー

暗黙的コントローラーを使用すると、コントローラー内のすべてのアクションを処理する単一のルートを定義できます。route.phpファイルで次のように定義できますRoute:controller 以下に示す方法。

Route::controller(‘base URI’,’<class-name-of-the-controller>’);

<class-name-of-the-controller>を、コントローラーに指定したクラス名に置き換えます。

コントローラのメソッド名は、getやpostなどのHTTP動詞で始まる必要があります。getで開始すると、getリクエストのみが処理され、postで開始すると、postリクエストが処理されます。HTTP動詞の後に、メソッドに任意の名前を付けることができますが、URIのタイトルケースバージョンに従う必要があります。

Step 1−以下のコマンドを実行してコントローラを作成してください。クラス名はそのままにしておきますImplicitController。クラスには任意の名前を付けることができます。

php artisan make:controller ImplicitController --plain

Step 2 −ステップ1が正常に実行されると、次の出力が表示されます。

Step 3 −次のコードをにコピーします

app/Http/Controllers/ImplicitController.php ファイル。

app/Http/Controllers/ImplicitController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ImplicitController extends Controller {
   /**
      * Responds to requests to GET /test
   */
   public function getIndex() {
      echo 'index method';
   }
   
   /**
      * Responds to requests to GET /test/show/1
   */
   public function getShow($id) {
      echo 'show method';
   }
   
   /**
      * Responds to requests to GET /test/admin-profile
   */
   public function getAdminProfile() {
      echo 'admin profile method';
   }
   
   /**
      * Responds to requests to POST /test/profile
   */
   public function postProfile() {
      echo 'profile method';
   }
}

Step 4 −次の行をに追加します app/Http/routes.php 指定されたコントローラーに要求をルーティングするファイル。

app/Http/routes.php

Route::controller('test','ImplicitController');

コンストラクタインジェクション

Laravelサービスコンテナは、すべてのLaravelコントローラーを解決するために使用されます。その結果、コントローラーがコンストラクターで必要とする可能性のある依存関係をタイプヒントすることができます。依存関係は自動的に解決され、コントローラーインスタンスに挿入されます。

Step 1 −次のコードをに追加します app/Http/routes.php ファイル。

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Step 2 −次のコードをに追加します

app/Http/Controllers/ImplicitController.php ファイル。

app/Http/Controllers/ImplicitController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ImplicitController extends Controller {
   private $myclass;
   
   public function __construct(\MyClass $myclass) {
      $this->myclass = $myclass;
   }
   public function index() {
      dd($this->myclass);
   }
}

Step 3 −次のURLにアクセスして、コンストラクターの挿入をテストします。

http://localhost:8000/myclass

Step 4 −次の図に示すように出力が表示されます。

メソッド注入

コンストラクターの挿入に加えて、次のように入力することもできます—コントローラーのアクションメソッドへの依存関係をヒントします。

Step 1 −次のコードをに追加します app/Http/routes.php ファイル。

app/Http/routes.php

class MyClass{
   public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');

Step 2 −次のコードをに追加します

app/Http/Controllers/ImplicitController.php ファイル。

app/Http/Controllers/ImplicitController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ImplicitController extends Controller {
   public function index(\MyClass $myclass) {
      dd($myclass);
   }
}

Step 3 −次のURLにアクセスして、コンストラクターの挿入をテストします。

http://localhost:8000/myclass

次の出力が生成されます-