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
次の出力が生成されます-