Laravel-quick-guide
Laravel-インストール
依存関係を管理するために、Laravelは composer を使用します。 Laravelをインストールする前に、システムにComposerがインストールされていることを確認してください。 この章では、Laravelのインストールプロセスについて説明します。
Laravelをシステムにインストールするには、以下に示す手順に従う必要があります-
- ステップ1 *-次のURLにアクセスし、コンポーザをダウンロードしてシステムにインストールします。
https://getcomposer.org/download/
- ステップ2 *-Composerのインストール後、次のスクリーンショットに示すように、コマンドプロンプトでComposerコマンドを入力してインストールを確認します。
- ステップ3 *-新しいLaravelプロジェクト用に、システムの任意の場所に新しいディレクトリを作成します。 その後、新しいディレクトリを作成したパスに移動し、そこに次のコマンドを入力してLaravelをインストールします。
composer create-project laravel/laravel –-prefer-dist
次に、バージョン5.7のインストールに焦点を当てます。 Laravelバージョン5.7では、次のコマンドを入力して完全なフレームワークをインストールできます-
composer create-project laravel/laravel test dev-develop
コマンドの出力は次のようになります-
Laravelフレームワークは、最新のフレームワークを含む開発ブランチで直接インストールできます。
- ステップ4 *-上記のコマンドは、現在のディレクトリにLaravelをインストールします。 次のコマンドを実行して、Laravelサービスを開始します。
php artisan serve
- ステップ5 *-上記のコマンドを実行すると、次のような画面が表示されます-
- ステップ6 *-上記のスクリーンショットで灰色の下線付きのURLをコピーして、ブラウザーでそのURLを開きます。 次の画面が表示された場合、Laravelが正常にインストールされたことを意味します。
Laravel-アプリケーション構造
Laravelのアプリケーション構造は、基本的にプロジェクトに含まれるフォルダー、サブフォルダー、およびファイルの構造です。 Laravelでプロジェクトを作成すると、次の画像に示すように、アプリケーション構造の概要がわかります。
ここに示すスナップショットは、Laravelのルートフォルダー、つまり laravel-project を参照しています。 さまざまなサブフォルダーとファイルが含まれます。 フォルダーとファイルの分析、およびそれらの機能的な側面を以下に示します-
App
これはアプリケーションフォルダであり、プロジェクトのソースコード全体が含まれています。 イベント、例外、ミドルウェア宣言が含まれます。 以下に説明するように、アプリフォルダはさまざまなサブフォルダで構成されています-
コンソール
コンソールには、Laravelに必要な職人コマンドが含まれています。 Commands という名前のディレクトリが含まれ、すべてのコマンドが適切な署名で宣言されます。 ファイル Kernal.php は、 Inspire.php で宣言されたコマンドを呼び出します。
Laravelで特定のコマンドを呼び出す必要がある場合は、このディレクトリで適切な変更を行う必要があります。
イベント
このフォルダーには、プロジェクトのすべてのイベントが含まれます。
イベントは、アクティビティをトリガーし、エラーまたは必要な検証を発生させ、柔軟性を高めるために使用されます。 Laravelはすべてのイベントを1つのディレクトリに保持します。 含まれるデフォルトのファイルは、すべての基本的なイベントが宣言されている event.php です。
例外
このフォルダーには、例外を処理するために必要なすべてのメソッドが含まれています。 また、すべての例外を処理する handle.php ファイルも含まれています。
Http
*Http* フォルダーには、コントローラー、ミドルウェア、およびアプリケーションリクエスト用のサブフォルダーがあります。 LaravelはMVC設計パターンに従っているため、このフォルダーには特定のディレクトリに対して定義されたモデル、コントローラー、ビューが含まれます。
- ミドルウェア*サブフォルダーには、フィルターメカニズムと応答と要求間の通信を含むミドルウェアメカニズムが含まれています。
*Requests* サブフォルダーには、アプリケーションのすべてのリクエストが含まれます。
Jobs
*Jobs* ディレクトリは、Laravelアプリケーションのキューに入れられたアクティビティを維持します。 基本クラスはすべてのジョブで共有され、1つの屋根の下にそれらを配置するための中央の場所を提供します。
リスナー
リスナーはイベントに依存し、イベントと例外を処理するために使用されるメソッドが含まれます。 たとえば、宣言された login イベントには LoginListener イベントが含まれます。
ポリシー
ポリシーは、承認ロジックを含むPHPクラスです。 Laravelには、このサブフォルダー内のポリシークラス内にすべての承認ロジックを作成する機能が含まれています。
プロバイダ
このフォルダーには、コアサーバーのイベントを登録し、Laravelアプリケーションを構成するために必要なすべてのサービスプロバイダーが含まれます。
ブートストラップ
このフォルダーには、すべてのアプリケーションブートストラップスクリプトが含まれます。 サブフォルダー、つまり cache が含まれ、Webアプリケーションのキャッシュに関連付けられたすべてのファイルが含まれます。 また、ブートストラップに必要なスクリプトを初期化する app.php ファイルを見つけることもできます。
設定
*config* フォルダーには、Laravelアプリケーションをスムーズに機能させるために必要なさまざまな構成と関連パラメーターが含まれています。 configフォルダー内に含まれるさまざまなファイルは、ここの画像に示されています。 ファイル名は、関連付けられている機能に従って機能します。
データベース
名前が示すように、このディレクトリにはデータベース機能のさまざまなパラメーターが含まれています。 以下の3つのサブディレクトリが含まれます-
- シード-データベースの単体テストに使用されるクラスが含まれています。
- 移行-このフォルダーは、Webアプリケーションで使用されるデータベースを移行するためのクエリに役立ちます。
- Factories -このフォルダーは、多数のデータレコードを生成するために使用されます。
パブリック
Laravelアプリケーションの初期化に役立つのはルートフォルダーです。 次のファイルとフォルダが含まれています-
- .htaccess -このファイルはサーバー構成を提供します。
- javascriptおよびcss -これらのファイルはアセットと見なされます。
- index.php -このファイルは、Webアプリケーションの初期化に必要です。
リソース
Resourcesディレクトリには、Webアプリケーションを強化するファイルが含まれています。 このディレクトリに含まれるサブフォルダとその目的は以下で説明されています-
- assets -アセットフォルダーには、Webアプリケーションのスタイル設定に必要なLESSやSCSSなどのファイルが含まれます。
- lang -このフォルダーには、ローカライズまたは内部化の構成が含まれています。
- * views-ビューは、エンドユーザーと対話し、MVCアーキテクチャで主要な役割を果たすHTMLファイルまたはテンプレートです。
アセットフォルダーを持たずに、resourcesディレクトリがフラット化されることを確認します。 同じの絵の表現は以下に示されています-
ストレージ
これは、Laravelプロジェクトの実行中に頻繁に必要とされるすべてのログと必要なファイルを保存するフォルダーです。 このディレクトリに含まれるサブフォルダとその目的は以下のとおりです-
- app -このフォルダには、連続して呼び出されるファイルが含まれます。
- フレームワーク-頻繁に呼び出されるセッション、キャッシュ、ビューが含まれます。
- ログ-すべての例外とエラーログはこのサブフォルダーで追跡されます。
テスト
すべてのユニットテストケースがこのディレクトリに含まれています。 テストケースクラスの命名規則は camel_case であり、クラスの機能に応じた規則に従います。
ベンダー
Laravelは、Composerの依存関係に完全に基づいています。たとえば、Laravelのセットアップをインストールしたり、サードパーティのライブラリを含めるなどです。 ベンダーフォルダーには、コンポーザーの依存関係がすべて含まれています。
上記のファイルに加えて、LaravelにはGitHub構成、パッケージ、サードパーティライブラリなどのさまざまな機能で主要な役割を果たす他のファイルも含まれています。
アプリケーション構造に含まれるファイルは以下に示されています-
Laravel-設定
前の章で、Laravelの基本設定ファイルが config ディレクトリに含まれていることを見てきました。 この章では、構成に含まれるカテゴリについて説明します。
環境設定
環境変数は、WebアプリケーションのWebサービスのリストを提供する変数です。 すべての環境変数は、構成の初期化に必要なパラメーターを含む .env ファイルで宣言されています。
デフォルトでは、*。env *ファイルには次のパラメータが含まれています-
APP_ENV = local
APP_DEBUG = true
APP_KEY = base64:ZPt2wmKE/X4eEhrzJU6XX4R93rCwYG8E2f8QUA7kGK8 =
APP_URL = http://localhost
DB_CONNECTION = mysql
DB_HOST = 127.0.0.1
DB_PORT = 3306
DB_DATABASE = homestead
DB_USERNAME = homestead
DB_PASSWORD = secret
CACHE_DRIVER = file
SESSION_DRIVER = file
QUEUE_DRIVER = sync
REDIS_HOST = 127.0.0.1
REDIS_PASSWORD = null
REDIS_PORT = 6379
MAIL_DRIVER = smtp
MAIL_HOST = mailtrap.ioMAIL_PORT = 2525
MAIL_USERNAME = null
MAIL_PASSWORD = null
MAIL_ENCRYPTION = null
重要なポイント
Laravelの基本的な構成ファイルを使用しながら、次の点に注意する必要があります-
- 各開発者またはユーザーは、Webアプリケーション用に事前定義された環境設定をいくつか持っているため、*。env *ファイルをアプリケーションソースコントロールにコミットしないでください。
- バックアップオプションの場合、開発チームは .env.example ファイルを含める必要があります。このファイルにはデフォルトの構成が含まれている必要があります。
環境変数の取得
*.env* ファイルで宣言されたすべての環境変数は、それぞれのパラメーターを呼び出す *env-helper* 関数によってアクセスできます。 これらの変数は、アプリケーションがユーザーエンドからリクエストを受け取るたびに、 *$ _ ENV* グローバル変数にもリストされます。 以下に示すように、環境変数にアクセスできます-
'env' => env('APP_ENV', 'production'),
*env-helper* 関数は、 *config* フォルダーに含まれる *app.php* ファイルで呼び出されます。 上記の例では、基本的なローカルパラメータを呼び出しています。
構成値へのアクセス
グローバル構成ヘルパー機能を使用すると、アプリケーション内のどこからでも簡単に構成値にアクセスできます。 構成値が初期化されていない場合、デフォルト値が返されます。
たとえば、デフォルトのタイムゾーンを設定するには、次のコードが使用されます-
config(['app.timezone' => 'Asia/Kolkata']);
構成のキャッシュ
パフォーマンスを向上させ、Webアプリケーションを向上させるには、すべての構成値をキャッシュすることが重要です。 設定値をキャッシュするためのコマンドは次のとおりです-
config:cache
次のスクリーンショットは、体系的なアプローチでキャッシュを示しています-
メンテナンスモード
いくつかの設定値を更新するか、Webサイトでメンテナンスを実行する必要がある場合があります。 そのような場合、 maintenance mode に保つと、簡単になります。 メンテナンスモードに保持されているこのようなWebアプリケーションは、503のステータスコードで例外、つまり MaintenanceModeException をスローします。
次のコマンドを使用して、Laravel Webアプリケーションでメンテナンスモードを有効にできます-
php artisan down
次のスクリーンショットは、ダウンしているときのWebアプリケーションの外観を示しています-
更新やその他のメンテナンスの作業が終了したら、次のコマンドを使用してWebアプリケーションのメンテナンスモードを無効にできます-
php artisan up
今、あなたはウェブサイトが適切に機能して出力を表示し、以下に示すようにメンテナンスモードが削除されたことを示すことがわかります-
Laravel-ルーティング
Laravelでは、すべてのリクエストはルートの助けを借りてマッピングされます。 基本ルーティングは、要求を関連するコントローラーにルーティングします。 この章では、Laravelでのルーティングについて説明します。
Laravelのルーティングには、次のカテゴリが含まれています-
- 基本的なルーティング
- ルートパラメータ
- 名前付きルート
基本的なルーティング
すべてのアプリケーションルートは、 app/routes.php ファイル内に登録されます。 このファイルは、応答するURIをLaravelに伝え、関連するコントローラーが特定の呼び出しを行います。 ウェルカムページのサンプルルートは、以下のスクリーンショットに示すように表示されます-
Route::get ('/', function () {
return view('welcome');});
例
ルーティングの詳細を理解するには、次の例をご覧ください-
*app/Http/routes.php*
<?php
Route::get('/', function () {
return view('welcome');
});
*resources/view/welcome.blade.php*
<!DOCTYPE html>
<html>
<head>
<title>Laravel</title>
<link href = "https://fonts.googleapis.com/css?family=Lato:100" rel = "stylesheet"
type = "text/css">
<style>
html, body {
height: 100%;
}
body {
margin: 0;
padding: 0;
width: 100%;
display: table;
font-weight: 100;
font-family: 'Lato';
}
.container {
text-align: center;
display: table-cell;
vertical-align: middle;
}
.content {
text-align: center;
display: inline-block;
}
.title {
font-size: 96px;
}
</style>
</head>
<body>
<div class = "container">
<div class = "content">
<div class = "title">Laravel 5.1</div>
</div>
</div>
</body>
</html>
ルーティングメカニズムは以下の画像に示されています-
ルーティングメカニズムに含まれるステップを詳細に理解しましょう-
- ステップ1 *-最初に、アプリケーションのルートURLを実行する必要があります。
ステップ2 *-実行されたURLは、 *route.php ファイル内の適切なメソッドと一致するはずです。 この場合、メソッドとルート(「/」)URLと一致する必要があります。 これにより、関連する機能が実行されます。
ステップ3 *-関数はテンプレートファイル resources/views/welcome.blade.php。*を呼び出します。
これは、以下の画像に示すようにHTML出力を生成します-
ルートパラメータ
Webアプリケーションでは、URLで渡されたパラメーターをキャプチャする必要がある場合があります。 そのためには、 routes.php ファイルのコードを変更する必要があります。
ここで説明したように、2つの方法で routes.php ファイルのパラメーターをキャプチャできます-
必須パラメーター
これらのパラメータは、Webアプリケーションをルーティングするために強制的にキャプチャする必要があるパラメータです。 たとえば、URLからユーザーの識別番号を取得することが重要です。 これは、以下に示すようにルートパラメータを定義することで可能になります-
Route::get('ID/{id}',function($id) {
echo 'ID: '.$id;
});
オプションのパラメータ
開発者はオプションでパラメータを作成できる場合があり、URLのパラメータ名の後に*?*を含めることで可能です。 パラメータ名として記載されているデフォルト値を保持することが重要です。 オプションのパラメータを定義する方法を示す次の例を見てください-
Route::get('user/{name?}', function ($name = 'finddevguides') { return $name;});
上記の例では、値が finddevguides に一致するかどうかを確認し、それに応じて定義されたURLにルーティングします。
名前付きルート
名前付きルートを使用すると、ルートを簡単に作成できます。 ルートのチェーンは、nameメソッドを使用してルート定義に指定できます。 次のコードは、コントローラで名前付きルートを作成する例を示しています-
Route::get('user/profile', 'UserController@showProfile')->name('profile');
ユーザーコントローラーは、パラメーターを profile にして関数 showProfile を呼び出します。 パラメーターは、ルート定義に対して name メソッドを使用します。
Laravel-ミドルウェア
ミドルウェアは、リクエストとレスポンスの間のブリッジとして機能します。 これは、フィルタリングメカニズムの一種です。 この章では、Laravelのミドルウェアメカニズムについて説明します。
Laravelには、アプリケーションのユーザーが認証されているかどうかを検証するミドルウェアが含まれています。 ユーザーが認証されると、ホームページにリダイレクトされます。認証されない場合は、ログインページにリダイレクトされます。
ミドルウェアは、次のコマンドを実行して作成できます-
php artisan make:middleware <middleware-name>
*<middleware-name>* をミドルウェアの名前に置き換えます。 作成するミドルウェアは、 *app/Http/Middleware* ディレクトリにあります。
例
ミドルウェアのメカニズムを理解するには、次の例を観察してください-
- ステップ1 *-AgeMiddlewareを作成しましょう。 それを作成するには、次のコマンドを実行する必要があります-
php artisan make:middleware AgeMiddleware
- ステップ2 *-コマンドが正常に実行されると、次の出力が表示されます-
ステップ3 *- *AgeMiddleware は app/Http/Middleware に作成されます。 新しく作成されたファイルには、次のコードが既に作成されています。
<?php
namespace App\Http\Middleware;
use Closure;
class AgeMiddleware {
public function handle($request, Closure $next) {
return $next($request);
}
}
ミドルウェアの登録
使用する前に、すべてのミドルウェアを登録する必要があります。 Laravelには2種類のミドルウェアがあります。
- グローバルミドルウェア
- ルートミドルウェア
グローバルミドルウェア*はアプリケーションのすべてのHTTPリクエストで実行されますが、*ルートミドルウェア*は特定のルートに割り当てられます。 ミドルウェアは、 app/Http/Kernel.php。に登録できます。このファイルには、2つのプロパティ *$ middleware および $ routeMiddleware が含まれています。 $ middleware プロパティはグローバルミドルウェアの登録に使用され、 $ routeMiddleware プロパティはルート固有のミドルウェアの登録に使用されます。
グローバルミドルウェアを登録するには、$ middlewareプロパティの最後にクラスをリストします。
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];
ルート固有のミドルウェアを登録するには、キーと値を$ routeMiddlewareプロパティに追加します。
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];
例
前の例で AgeMiddleware を作成しました。 ルート固有のミドルウェアプロパティに登録できるようになりました。 その登録のコードを以下に示します。
以下は app/Http/Kernel.php のコードです-
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'Age' => \App\Http\Middleware\AgeMiddleware::class,
];
}
ミドルウェアのパラメーター
ミドルウェアでパラメーターを渡すこともできます。 たとえば、アプリケーションにユーザー、管理者、スーパー管理者などのさまざまなロールがある場合 ロールに基づいてアクションを認証する場合、これはミドルウェアでパラメーターを渡すことで実現できます。 作成するミドルウェアには次の関数が含まれており、 $ next 引数の後にカスタム引数を渡すことができます。
public function handle($request, Closure $next) {
return $next($request);
}
例
- ステップ1 *-次のコマンドを実行してRoleMiddlewareを作成します-
php artisan make:middleware RoleMiddleware
- ステップ2 *-実行が成功すると、次の出力が表示されます-
ステップ3 *-新しく作成されたRoleMiddlewareatのhandleメソッドに次のコードを追加します app/Http/Middleware/RoleMiddleware.php。*
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
ステップ4 *-RoleMiddlewareを *app \ Http \ Kernel.php ファイルに登録します。 そのファイルに灰色で強調表示された行を追加して、RoleMiddlewareを登録します。
ステップ5 *-次のコマンドを実行して *TestController を作成します-
php artisan make:controller TestController --plain
- ステップ6 *-上記のステップが正常に実行されると、次の出力が表示されます-
ステップ7 *-次のコード行を *app/Http/TestController.php ファイルにコピーします。
*app/Http/TestController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index() {
echo "<br>Test Controller.";
}
}
ステップ8 *- *app/Http/routes.php ファイルに次のコード行を追加します。
*app/Http/routes.php*
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
- ステップ9 *-次のURLにアクセスして、パラメーターを使用してミドルウェアをテストします。
http://localhost:8000/role
- ステップ10 *-出力は次の画像のように表示されます。
終了可能なミドルウェア
終了可能なミドルウェアは、応答がブラウザーに送信された後に何らかのタスクを実行します。 これは、ミドルウェアで terminate メソッドを使用してミドルウェアを作成することで実現できます。 終了可能なミドルウェアは、グローバルミドルウェアに登録する必要があります。 terminateメソッドは、2つの引数 $ request および* $ response。*を受け取ります。Terminateメソッドは、次のコードに示すように作成できます。
例
ステップ1 *-以下のコマンドを実行して *TerminateMiddleware を作成します。
php artisan make:middleware TerminateMiddleware
- ステップ2 *-上記のステップにより、次の出力が生成されます-
ステップ3 *- app/Http/Middleware/TerminateMiddleware.php。で新しく作成された *TerminateMiddleware に次のコードをコピーします。
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response) {
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
ステップ4 *- *Term \ Middleware を app \ Http \ Kernel.php ファイルに登録します。 そのファイルに灰色で強調表示された行を追加して、TerminateMiddlewareを登録します。
ステップ5 *-次のコマンドを実行して *ABCController を作成します。
php artisan make:controller ABCController --plain
- ステップ6 *-URLが正常に実行されると、次の出力が表示されます-
ステップ7 *-次のコードを *app/Http/ABCController.php ファイルにコピーします。
*app/Http/ABCController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ABCController extends Controller {
public function index() {
echo "<br>ABC Controller.";
}
}
ステップ8 *- *app/Http/routes.php ファイルに次のコード行を追加します。
*app/Http/routes.php*
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'ABCController@index',
]);
- ステップ9 *-次のURLにアクセスして、Terminableミドルウェアをテストします。
http://localhost:8000/terminate
- ステップ10 *-出力は次の画像のように表示されます。
Laravel-名前空間
名前空間は、各要素がその関連クラスに対して一意の名前を持つ要素のクラスとして定義できます。 他のクラスの要素と共有できます。
名前空間の宣言
*use* キーワードを使用すると、開発者は名前空間を短縮できます。
use <namespace-name>;
Laravelで使用されるデフォルトの名前空間はAppですが、ユーザーはWebアプリケーションに合わせて名前空間を変更できます。 artisanコマンドを使用してユーザー定義の名前空間を作成する方法は次のとおりです-
php artisan app:name SocialNet
作成されたネームスペースには、コントローラーおよびさまざまなクラスで使用できるさまざまな機能を含めることができます。 Laravel-controllers
Laravel-リクエスト
この章では、Laravelのリクエストについて詳しく学習します。
リクエストURIを取得する
*"path"* メソッドは、要求されたURIを取得するために使用されます。 *is* メソッドは、メソッドの引数で指定された特定のパターンに一致する要求されたURIを取得するために使用されます。 完全なURLを取得するには、 *url* メソッドを使用できます。
例
ステップ1 *-以下のコマンドを実行して、 *UriController という新しいコントローラーを作成します。
php artisan make:controller UriController –plain
- ステップ2 *-URLが正常に実行されると、次の出力が表示されます-
- ステップ3 *-コントローラーを作成した後、そのファイルに次のコードを追加します。
*app/Http/Controllers/UriController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UriController extends Controller {
public function index(Request $request) {
//Usage of path method
$path = $request->path();
echo 'Path Method: '.$path;
echo '<br>';
//Usage of is method
$pattern = $request->is('foo/*');
echo 'is Method: '.$pattern;
echo '<br>';
//Usage of url method
$url = $request->url();
echo 'URL method: '.$url;
}
}
ステップ4 *- *app/Http/route.php ファイルに次の行を追加します。
*app/Http/route.php*
Route::get('/foo/bar','UriController@index');
- ステップ5 *-次のURLにアクセスします。
http://localhost:8000/foo/bar
- ステップ6 *-出力は次の画像のように表示されます。
入力の取得
入力値はLaravelで簡単に取得できます。 「get」*または「post」*のどのメソッドが使用されても、Laravelメソッドは両方のメソッドの入力値を同じ方法で取得します。 入力値を取得するには2つの方法があります。
- input()メソッドを使用する
- Requestインスタンスのプロパティを使用する
input()メソッドを使用する
- input()*メソッドは、1つの引数、フォーム内のフィールドの名前を取ります。 たとえば、フォームにユーザー名フィールドが含まれている場合、次の方法でアクセスできます。
$name = $request->input('username');
Requestインスタンスのプロパティを使用する
- input()*メソッドと同様に、リクエストインスタンスからユーザー名プロパティを直接取得できます。
$request->username
例
リクエストの詳細を理解するには、次の例をご覧ください-
ステップ1 *-登録フォームを作成します。ユーザーは自分で登録し、フォームを *resources/views/register.php に保存できます。
<html>
<head>
<title>Form Example</title>
</head>
<body>
<form action = "/user/register" method = "post">
<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>">
<table>
<tr>
<td>Name</td>
<td><input type = "text" name = "name"/></td>
</tr>
<tr>
<td>Username</td>
<td><input type = "text" name = "username"/></td>
</tr>
<tr>
<td>Password</td>
<td><input type = "text" name = "password"/></td>
</tr>
<tr>
<td colspan = "2" align = "center">
<input type = "submit" value = "Register"/>
</td>
</tr>
</table>
</form>
</body>
</html>
ステップ2 *-以下のコマンドを実行して、 *UserRegistration コントローラーを作成します。
php artisan make:controller UserRegistration --plain
- ステップ3 *-上記のステップが正常に実行されると、次の出力が表示されます-
- ステップ4 *-次のコードをコピーします
*app/Http/Controllers/UserRegistration.php* コントローラー。
*app/Http/Controllers/UserRegistration.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserRegistration extends Controller {
public function postRegister(Request $request) {
//Retrieve the name input field
$name = $request->input('name');
echo 'Name: '.$name;
echo '<br>';
//Retrieve the username input field
$username = $request->username;
echo 'Username: '.$username;
echo '<br>';
//Retrieve the password input field
$password = $request->password;
echo 'Password: '.$password;
}
}
ステップ5 *- *app/Http/routes.php ファイルに次の行を追加します。
*app/Http/routes.php*
Route::get('/register',function() {
return view('register');
});
Route::post('/user/register',array('uses'=>'UserRegistration@postRegister'));
- ステップ6 *-次のURLにアクセスすると、次の図に示す登録フォームが表示されます。 登録の詳細を入力して[登録]をクリックすると、2番目のページにユーザー登録の詳細を取得して表示したことが表示されます。
http://localhost:8000/register
- ステップ7 *-出力は、以下の画像の下に示すようになります。
Laravel-クッキー
Cookieは、Webアプリケーションでユーザーのセッションを処理する際に重要な役割を果たします。 この章では、LaravelベースのWebアプリケーションでのCookieの操作について学習します。
クッキーを作成する
Cookieは、LaravelのグローバルCookieヘルパーによって作成できます。 Symfony \ Component \ HttpFoundation \ Cookie のインスタンスです。 Cookieは、withCookie()メソッドを使用して応答に添付できます。 withCookie()メソッドを呼び出す Illuminate \ Http \ Response クラスの応答インスタンスを作成します。 Laravelによって生成されたCookieは暗号化および署名されており、クライアントが変更または読み取ることはできません。
サンプルコードと説明を次に示します。
//Create a response instance
$response = new Illuminate\Http\Response('Hello World');
//Call the withCookie() method with the response method
$response->withCookie(cookie('name', 'value', $minutes));
//return the response
return $response;
Cookie()メソッドは3つの引数を取ります。 最初の引数はCookieの名前、2番目の引数はCookieの値、3番目の引数はCookieの期間です。この期間を過ぎると、Cookieは自動的に削除されます。
Cookieは、以下のコードに示すように、foreverメソッドを使用して永久に設定できます。
$response->withCookie(cookie()->forever('name', 'value'));
Cookieを取得する
Cookieを設定したら、cookie()メソッドでCookieを取得できます。 このcookie()メソッドは、Cookieの名前になる引数を1つだけ取ります。 Cookieメソッドは、 Illuminate \ Http \ Request のインスタンスを使用して呼び出すことができます。
これがサンプルコードです。
//’name’ is the name of the cookie to retrieve the value of
$value = $request->cookie('name');
例
クッキーについての詳細を理解するには、次の例をご覧ください-
- ステップ1 *-以下のコマンドを実行して、Cookieを操作するコントローラーを作成します。
php artisan make:controller CookieController --plain
- ステップ2 *-実行が成功すると、次の出力が表示されます-
- ステップ3 *-次のコードをコピーします
*app/Http/Controllers/CookieController.php* ファイル。
*app/Http/Controllers/CookieController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class CookieController extends Controller {
public function setCookie(Request $request) {
$minutes = 1;
$response = new Response('Hello World');
$response->withCookie(cookie('name', 'virat', $minutes));
return $response;
}
public function getCookie(Request $request) {
$value = $request->cookie('name');
echo $value;
}
}
ステップ4 *- app/Http/routes.phpファイルに次の行を追加します*。
*app/Http/routes.php*
Route::get('/cookie/set','CookieController@setCookie');
Route::get('/cookie/get','CookieController@getCookie');
- ステップ5 *-次のURLにアクセスして、Cookieを設定します。
http://localhost:8000/cookie/set
- ステップ6 *-出力は次のように表示されます。 スクリーンショットに表示されるウィンドウは、Firefoxから取得されますが、ブラウザによっては、CookieオプションからCookieをチェックすることもできます。
- ステップ7 *-次のURLにアクセスして、上記のURLからCookieを取得します。
http://localhost:8000/cookie/get
- ステップ8 *-出力は次の画像のように表示されます。
Laravel-ビュー
MVCフレームワークでは、文字「“ V” 」は「ビュー」を表します。 アプリケーションロジックとプレゼンテーションロジックを分離します。 ビューは *resources/views ディレクトリに保存されます。 通常、ビューには、アプリケーションによって提供されるHTMLが含まれます。
例
ビューについての詳細を理解するには、次の例をご覧ください-
ステップ1 *-次のコードをコピーして、 *resources/views/test.php に保存します
<html>
<body>
<h1>Hello, World</h1>
</body>
</html>
ステップ2 *- *app/Http/routes.php ファイルに次の行を追加して、上記のビューのルートを設定します。
*app/Http/routes.php*
Route::get('/test', function() {
return view('test');
});
- ステップ3 *-次のURLにアクセスして、ビューの出力を確認します。
http://localhost:8000/test
- ステップ4 *-出力は次の画像のように表示されます。
ビューにデータを渡す
アプリケーションの構築中に、ビューにデータを渡す必要がある場合があります。 ヘルパー関数を表示する配列を渡します。 配列を渡した後、キーを使用して、HTMLファイルでそのキーの値を取得できます。
例
ビューへのデータの受け渡しについてさらに理解するには、次の例をご覧ください-
ステップ1 *-次のコードをコピーして、 *resources/views/test.php に保存します
<html>
<body>
<h1><?php echo $name; ?></h1>
</body>
</html>
ステップ2 *- *app/Http/routes.php ファイルに次の行を追加して、上記のビューのルートを設定します。
*app/Http/routes.php*
Route::get('/test', function() {
return view('test',[‘name’=>’Virat Gandhi’]);
});
- ステップ3 *-キー名の値はtest.phpファイルに渡され、$ nameはその値に置き換えられます。
- ステップ4 *-次のURLにアクセスして、ビューの出力を確認します。
http://localhost:8000/test
- ステップ5 *-出力は次の画像のように表示されます。
すべてのビューでデータを共有する
ビューにデータを渡す方法を見てきましたが、すべてのビューにデータを渡す必要がある場合があります。 Laravelはこれを簡単にします。 この目的に使用できる* share()というメソッドがあります。 * share()*メソッドは、キーと値の2つの引数を取ります。 通常、 share()メソッドは、サービスプロバイダーのbootメソッドから呼び出すことができます。 任意のサービスプロバイダー、 *AppServiceProvider または独自のサービスプロバイダーを使用できます。
例
すべてのビューでデータを共有する方法について詳しく理解するには、次の例をご覧ください-
ステップ1 *- *app/Http/routes.php ファイルに次の行を追加します。
*app/Http/routes.php*
Route::get('/test', function() {
return view('test');
});
Route::get('/test2', function() {
return view('test2');
});
ステップ2 *-2つのビューファイルを作成します。同じコードで *test.php と test2.php を作成します。 これらは、データを共有する2つのファイルです。 両方のファイルに次のコードをコピーします。 resources/views/test.php&resources/views/test2.php
<html>
<body>
<h1><?php echo $name; ?></h1>
</body>
</html>
ステップ3 *-以下に示すように、ファイル *app/Providers/AppServiceProvider.php のブートメソッドのコードを変更します。 (ここではshareメソッドを使用しており、渡したデータはすべてのビューで共有されます。) app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider {
/**
*Bootstrap any application services.
*
*@return void
*/
public function boot() {
view()->share('name', 'Virat Gandhi');
}
/**
*Register any application services.
*
*@return void
*/
public function register() {
//
}
}
- ステップ4 *-*次のURLにアクセスしてください。
http://localhost:8000/test
http://localhost:8000/test2
- ステップ5 *-出力は次の画像のように表示されます。
Laravel-ブレードテンプレート
Laravel 5.1では、 Blade というテンプレートエンジンを使用して独自のレイアウトを設計するという概念が導入されています。 このように設計されたレイアウトは、他のビューで使用でき、一貫した設計と構造が含まれています。
他のテンプレートエンジンと比較すると、Bladeは次の点でユニークです-
- 開発者がビューでプレーンPHPコードを使用することを制限しません。
- このように設計されたブレードビューは、変更されるまでコンパイルおよびキャッシュされます。
Laravelの完全なディレクトリ構造は、以下のスクリーンショットに示されています。
すべてのビューが resources/views ディレクトリに保存されており、Laravelフレームワークのデフォルトビューは welcome.blade.php であることがわかります。
他のブレードテンプレートも同様に作成されることに注意してください。
ブレードテンプレートレイアウトを作成する手順
次の手順を使用して、ブレードテンプレートレイアウトを作成する必要があります-
ステップ1
- resources/views フォルダー内にレイアウトフォルダーを作成します。 このフォルダーを使用して、すべてのレイアウトをまとめて保存します。
- それに関連付けられている次のコードを持つファイル名 master.blade.php を作成します-
<html>
<head>
<title>DemoLaravel - @yield('title')</title>
</head>
<body>
@yield('content')
</body>
</html>
ステップ2
このステップでは、レイアウトを拡張する必要があります。 レイアウトの拡張には、子要素の定義が含まれます。 Laravelは、子要素の定義に Blade @ extends ディレクティブを使用します。
あなたがレイアウトを拡張しているとき、次の点に注意してください-
- ブレードレイアウトで定義されたビューは、独自の方法でコンテナを挿入します。
- ビューのさまざまなセクションが子要素として作成されます。
- 子要素は、 child.blade.php としてレイアウトフォルダーに保存されます。
上記で作成されたレイアウトの拡張を示す例がここに示されています-
@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>This refers to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection
ステップ3
ビューに子要素を実装するには、必要に応じてレイアウトを定義する必要があります。
ここに示すスクリーンショットを確認してください。 ランディングページに記載されている各リンクはハイパーリンクであることがわかります。 上記の手順を使用して、ブレードテンプレートを使用して子要素として作成することもできます。 Laravel-redirections
Laravel-データベースの操作
Laravelは、データベースでの処理を非常に簡単にしました。 Laravelは現在、次の4つのデータベースをサポートしています-
- MySQL
- Postgres
- SQLite
- SQLサーバー
データベースへのクエリは、生のSQL、流れるようなクエリビルダー、Eloquent ORMを使用して起動できます。 LaravelでのすべてのCRUD(作成、読み取り、更新、削除)操作を理解するために、単純な学生管理システムを使用します。
データベースへの接続
*config/database.php* ファイルでデータベースを設定し、次の表に示すようにMySQLで構造を持つカレッジデータベースを作成します。
データベース:大学
表:学生
Column Name | Column Datatype | Extra |
---|---|---|
Id | int(11) | Primary key |
Auto increment | Name | varchar(25) |
学生テーブルでLaravelを使用して、データベースにレコードを追加、削除、更新、取得する方法を確認します。
Sr.No. | Record & Description |
---|---|
1 |
insertメソッドでDBファサードを使用してレコードを挿入できます。 |
2 |
データベースを構成したら、selectメソッドを使用したDBファサードを使用してレコードを取得できます。 |
3 |
updateメソッドを使用してDBファサードを使用してレコードを更新できます。 |
4 |
deleteメソッドでDBファサードを使用してレコードを削除できます。 |
Laravel-エラーとログ
この章では、Laravelプロジェクトでのエラーとロギング、およびそれらの操作方法について説明します。
エラー
進行中のプロジェクトには、いくつかのエラーが発生します。 新しいLaravelプロジェクトを開始すると、エラーと例外処理はすでに設定されています。 通常、ローカル環境では、デバッグのためにエラーを確認する必要があります。 これらのエラーを実稼働環境のユーザーから隠す必要があります。 これは、アプリケーションのルートに保存されている環境ファイル .env に設定されている変数 APP_DEBUG で実現できます。
ローカル環境では APP_DEBUG の値は true である必要がありますが、実稼働環境ではエラーを隠すために false に設定する必要があります。
注- APP_DEBUG 変数を変更した後、Laravelサーバーを再起動する必要があります。
ロギング
ロギングは、生成されたエラーをシステムが記録できる重要なメカニズムです。 システムの信頼性を向上させると便利です。 Laravelは、シングル、デイリー、syslog、エラーログモードなどのさまざまなロギングモードをサポートしています。 これらのモードは config/app.php ファイルで設定できます。
'log' => 'daily'
生成されたログエントリは、 storage/logs/laravel.log ファイルで確認できます。
Laravel-フォーム
Laravelは、HTMLフォームを簡単かつ安全に処理するためのさまざまな組み込みタグを提供します。 HTMLの主要な要素はすべて、Laravelを使用して生成されます。 これをサポートするには、composerを使用してHTMLパッケージをLaravelに追加する必要があります。
例1
- ステップ1 *-次のコマンドを実行して同じことを続行します。
composer require illuminate/html
- ステップ2 *-次の画像に示すように、これによりHTMLパッケージがLaravelに追加されます。
ステップ3 *-次に、 config/app.php。*に保存されているLaravel構成ファイルに上記のパッケージを追加する必要があります。このファイルを開くと、次の画像に示すようにLaravelサービスプロバイダーのリストが表示されます。 。 次の画像のアウトラインボックスに示されているように、HTMLサービスプロバイダーを追加します。
- ステップ4 *-HTMLとフォームの同じファイルにエイリアスを追加します。 次の画像のアウトラインボックスに示されている2行に注目し、これらの2行を追加します。
- ステップ5 *-これですべてがセットアップされました。 Laravelタグを使用してさまざまなHTML要素を使用する方法を見てみましょう。
フォームを開く
{{ Form::open(array('url' => 'foo/bar')) }}
//
{{ Form::close() }}
ラベル要素の生成
echo Form::label('email', 'E-Mail Address');
テキスト入力の生成
echo Form::text('username');
デフォルト値の指定
echo Form::text('email', '[email protected]');
パスワード入力の生成
echo Form::password('password');
ファイル入力の生成
echo Form::file('image');
チェックボックスまたはラジオ入力の生成
echo Form::checkbox('name', 'value');
echo Form::radio('name', 'value');
チェックされるチェックボックスまたはラジオ入力の生成
echo Form::checkbox('name', 'value', true);
echo Form::radio('name', 'value', true);
ドロップダウンリストの生成
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
送信ボタンの生成
echo Form::submit('Click Me!');
例2
- ステップ1 *-次のコードをコピーして、というビューを作成します
*resources/views/form.php* 。
*resources/views/form.php*
<html>
<body>
<?php
echo Form::open(array('url' => 'foo/bar'));
echo Form::text('username','Username');
echo '<br/>';
echo Form::text('email', '[email protected]');
echo '<br/>';
echo Form::password('password');
echo '<br/>';
echo Form::checkbox('name', 'value');
echo '<br/>';
echo Form::radio('name', 'value');
echo '<br/>';
echo Form::file('image');
echo '<br/>';
echo Form::select('size', array('L' => 'Large', 'S' => 'Small'));
echo '<br/>';
echo Form::submit('Click Me!');
echo Form::close();
?>
</body>
</html>
ステップ2 *- *app/Http/routes.php に次の行を追加して、form.phpビューのルートを追加します
*app/Http/routes.php*
Route::get('/form',function() {
return view('form');
});
- ステップ3 *-次のURLにアクセスして、フォームを確認します。
http://localhost:8000/form
- ステップ4 *-出力は次の画像のように表示されます。
Laravel-ローカリゼーション
Laravelのローカライズ機能は、アプリケーションで使用される異なる言語をサポートします。 異なる言語のすべての文字列をファイルに保存する必要があり、これらのファイルは resources/views ディレクトリに保存されます。 サポートされる言語ごとに個別のディレクトリを作成する必要があります。 すべての言語ファイルは、以下に示すようにキー付き文字列の配列を返す必要があります。
<?php
return [
'welcome' => 'Welcome to the application'
];
例
ステップ1 *-言語用に3つのファイルを作成します-*英語、フランス語、および*ドイツ語*。 resources/lang/en/lang.php に英語のファイルを保存します
<?php
return [
'msg' => 'Laravel Internationalization example.'
];
?>
ステップ2 *-フランス語のファイルを *resources/lang/fr/lang.php に保存します。
<?php
return [
'msg' => 'Exemple Laravel internationalisation.'
];
?>
ステップ3 *-ドイツ語のファイルを *resources/lang/de/lang.php に保存します。
<?php
return [
'msg' => 'Laravel Internationalisierung Beispiel.'
];
?>
ステップ4 *-次のコマンドを実行して、 *LocalizationController というコントローラーを作成します。
php artisan make:controller LocalizationController --plain
- ステップ5 *-正常に実行されると、次の出力が表示されます-
- ステップ6 *-次のコードをファイルにコピーします
*app/Http/Controllers/LocalizationController.php*
*app/Http/Controllers/LocalizationController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class LocalizationController extends Controller {
public function index(Request $request,$locale) {
//set’s application’s locale
app()->setLocale($locale);
//Gets the translated message and displays it
echo trans('lang.msg');
}
}
ステップ7 *- *app/Http/routes.php ファイルにLocalizationControllerのルートを追加します。 Localization/の後に\ {locale}引数を渡していることに注意してください。これは、異なる言語で出力を表示するために使用します。
*app/Http/routes.php*
Route::get('localization/{locale}','LocalizationController@index');
- ステップ8 *-次に、さまざまなURLにアクセスして、さまざまな言語をすべて表示します。 以下のURLを実行して、英語の出力を確認します。
http://localhost:8000/localization/en
- ステップ9 *-出力は次の画像のように表示されます。
- ステップ10 *-以下のURLを実行して、フランス語の出力を確認します。
http://localhost:8000/localization/fr
- ステップ11 *-出力は次の画像のように表示されます。
- ステップ12 *-以下のURLを実行して、ドイツ語の出力を表示します
http://localhost:8000/localization/de
- ステップ13 *-出力は次の画像のように表示されます。
Laravel-セッション
セッションは、リクエストに関するユーザーに関する情報を保存するために使用されます。 Laravelは、セッションファイルを処理するために、* file、cookie、apc、array、Memcached、Redis、、 *database などのさまざまなドライバーを提供します。 デフォルトでは、軽量であるため、ファイルドライバーが使用されます。 セッションは config/session.php に保存されているファイルで設定できます。
セッションデータへのアクセス
セッションデータにアクセスするには、HTTPリクエストを介してアクセスできるセッションのインスタンスが必要です。 インスタンスを取得したら、* get()メソッドを使用して、1つの引数“ key” *を取得し、セッションデータを取得できます。
$value = $request->session()->get('key');
- get()メソッドの代わりに all()*メソッドを使用してすべてのセッションデータを取得できます。
セッションデータの保存
- put()メソッドを使用して、データをセッションに保存できます。 * put()*メソッドは、“ key” と“ value” *の2つの引数を取ります。
$request->session()->put('key', 'value');
セッションデータの削除
- forget()メソッドは、セッションからアイテムを削除するために使用されます。 このメソッドは、引数として「キー」*を取ります。
$request->session()->forget('key');
すべてのセッションデータを削除するには、* forget()メソッドの代わりに flush()メソッドを使用します。 * pull()*メソッドを使用して、セッションからデータを取得し、後で削除します。 pull()メソッドも引数として *key を取ります。 * forget()メソッドと pull()メソッドの違いは、 forget()メソッドがセッションの値を返さず、 pull()*メソッドがそれを返してセッションからその値を削除することです。
例
ステップ1 *-次のコマンドを実行して、 *SessionController というコントローラーを作成します。
php artisan make:controller SessionController --plain
- ステップ2 *-実行が成功すると、次の出力が表示されます-
- ステップ3 *-次のコードをファイルにコピーします
app/Http/Controllers/SessionController.php。*
*app/Http/Controllers/SessionController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class SessionController extends Controller {
public function accessSessionData(Request $request) {
if($request->session()->has('my_name'))
echo $request->session()->get('my_name');
else
echo 'No data in the session';
}
public function storeSessionData(Request $request) {
$request->session()->put('my_name','Virat Gandhi');
echo "Data has been added to session";
}
public function deleteSessionData(Request $request) {
$request->session()->forget('my_name');
echo "Data has been removed from session.";
}
}
ステップ4 *- *app/Http/routes.php ファイルに次の行を追加します。
*app/Http/routes.php*
Route::get('session/get','SessionController@accessSessionData');
Route::get('session/set','SessionController@storeSessionData');
Route::get('session/remove','SessionController@deleteSessionData');
ステップ5 *-次のURLにアクセスして、*セッションでデータを設定します。
http://localhost:8000/session/set
- ステップ6 *-出力は次の画像のように表示されます。
ステップ7 *-次のURLにアクセスして、*セッションからデータを取得します。
http://localhost:8000/session/get
- ステップ8 *-出力は次の画像のように表示されます。
ステップ9 *-次のURLにアクセスして、*セッションデータを削除します。
http://localhost:8000/session/remove
- ステップ10 *-次の画像に示すようなメッセージが表示されます。
Laravel-検証
検証は、アプリケーションを設計する際の最も重要な側面です。 着信データを検証します。 デフォルトでは、ベースコントローラークラスは、さまざまな強力な検証ルールを使用して着信HTTP要求を検証する便利な方法を提供する ValidatesRequests 特性を使用します。
Laravelで利用可能な検証ルール
Laravelは常にセッションデータのエラーをチェックし、利用可能な場合は自動的にビューにバインドします。 そのため、すべてのリクエストですべてのビューで $ errors 変数が常に利用可能であり、 $ errors 変数が常に定義されていて安全に使用できると便利に想定できることに注意することが重要です。 次の表は、Laravelで利用可能なすべての検証ルールを示しています。
Laravelで利用可能な検証ルール
受け入れられた
アクティブなURL
後(日付)
アルファ
アルファダッシュ
英数字
アレイ
前(日付)
の間に
ブール値
確認済み
Date
日付フォーマット
異なる
桁
間の数字
Eメール
存在する(データベース)
画像ファイル)
In
整数
IPアドレス
JSON
Max
MIMEタイプ(ファイル)
Min
ありませんで
数値
正規表現
必須
必要な場合
必要な場合を除き
必須
すべてで必須
なしで必要
すべてなしで必要
Same
Size
ひも
タイムゾーン
ユニーク(データベース)
URL
*$ errors* 変数は、 *Illuminate \ Support \ MessageBag* のインスタンスになります。 以下に示すコードを追加することにより、エラーメッセージをビューファイルに表示できます。
@if (count($errors) > 0)
<div class = "alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
例
ステップ1 *-次のコマンドを実行して、 *ValidationController というコントローラーを作成します。
php artisan make:controller ValidationController --plain
- ステップ2 *-実行が成功すると、次の出力が表示されます-
- ステップ3 *-次のコードをコピーします
*app/Http/Controllers/ValidationController.php* ファイル。
*app/Http/Controllers/ValidationController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ValidationController extends Controller {
public function showform() {
return view('login');
}
public function validateform(Request $request) {
print_r($request->all());
$this->validate($request,[
'username'=>'required|max:8',
'password'=>'required'
]);
}
}
ステップ4 *- *resources/views/login.blade.php というビューファイルを作成し、そのファイルに次のコードをコピーします。
*resources/views/login.blade.php*
<html>
<head>
<title>Login Form</title>
</head>
<body>
@if (count($errors) > 0)
<div class = "alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<?php
echo Form::open(array('url'=>'/validation'));
?>
<table border = '1'>
<tr>
<td align = 'center' colspan = '2'>Login</td>
</tr>
<tr>
<td>Username</td>
<td><?php echo Form::text('username'); ?></td>
</tr>
<tr>
<td>Password</td>
<td><?php echo Form::password('password'); ?></td>
</tr>
<tr>
<td align = 'center' colspan = '2'
><?php echo Form::submit('Login'); ? ></td>
</tr>
</table>
<?php
echo Form::close();
?>
</body>
</html>
ステップ5 *- *app/Http/routes.php に次の行を追加します。
*app/Http/routes.php*
Route::get('/validation','ValidationController@showform');
Route::post('/validation','ValidationController@validateform');
- ステップ6 *-次のURLにアクセスして、検証をテストします。
http://localhost:8000/validation
ステップ7 *-テキストフィールドに何も入力せずに「ログイン」*ボタンをクリックします。 出力は次の画像のようになります。
Laravel-ファイルのアップロード
Laravelでのファイルのアップロードは非常に簡単です。 ユーザーがアップロードするファイルを選択できるビューファイルと、アップロードされたファイルを処理するコントローラーを作成するだけです。
ビューファイルでは、次のコード行を追加してファイル入力を生成する必要があります。
Form::file('file_name');
- Form
- open()で、以下に示すように ‘files’ ⇒ ’true’ を追加する必要があります。 これにより、フォームを複数の部分にアップロードしやすくなります。
Form::open(array('url' => '/uploadfile','files'=>'true'));
例
ステップ1 *- *resources/views/uploadfile.php というビューファイルを作成し、そのファイルに次のコードをコピーします。
*resources/views/uploadfile.php*
<html>
<body>
<?php
echo Form::open(array('url' => '/uploadfile','files'=>'true'));
echo 'Select the file to upload.';
echo Form::file('image');
echo Form::submit('Upload File');
echo Form::close();
?>
</body>
</html>
ステップ2 *-次のコマンドを実行して、 *UploadFileController というコントローラーを作成します。
php artisan make:controller UploadFileController --plain
- ステップ3 *-実行が成功すると、次の出力が表示されます-
- ステップ4 *-次のコードをコピーします
*app/Http/Controllers/UploadFileController.php* ファイル。
*app/Http/Controllers/UploadFileController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UploadFileController extends Controller {
public function index() {
return view('uploadfile');
}
public function showUploadFile(Request $request) {
$file = $request->file('image');
//Display File Name
echo 'File Name: '.$file->getClientOriginalName();
echo '<br>';
//Display File Extension
echo 'File Extension: '.$file->getClientOriginalExtension();
echo '<br>';
//Display File Real Path
echo 'File Real Path: '.$file->getRealPath();
echo '<br>';
//Display File Size
echo 'File Size: '.$file->getSize();
echo '<br>';
//Display File Mime Type
echo 'File Mime Type: '.$file->getMimeType();
//Move Uploaded File
$destinationPath = 'uploads';
$file->move($destinationPath,$file->getClientOriginalName());
}
}
ステップ5 *- *app/Http/routes.php に次の行を追加します。
*app/Http/routes.php*
Route::get('/uploadfile','UploadFileController@index');
Route::post('/uploadfile','UploadFileController@showUploadFile');
- ステップ6 *-次のURLにアクセスして、ファイルのアップロード機能をテストします。
http://localhost:8000/uploadfile
- ステップ7 *-次の画像に示すようなプロンプトが表示されます。
Laravel-メールの送信
Laravelは無料の機能豊富なライブラリ SwiftMailer を使用してメールを送信します。 ライブラリ関数を使用すると、あまり面倒なことなく簡単にメールを送信できます。 電子メールテンプレートはビューと同じ方法でロードされます。つまり、Blade構文を使用して、テンプレートにデータを挿入できます。
次の表は、*送信*関数の構文と属性を示しています-
Syntax | void send(string |
array $view, array $data, Closure | string $callback) |
Parameters |
|
array)−電子メールメッセージを含むビューの名前 * $ data(array)-ビューに渡すデータの配列 * $ callback-メッセージインスタンスを受信するクロージャーコールバック。メールメッセージの受信者、件名、およびその他の側面をカスタマイズできます。 | Returns |
nothing | Description |
3番目の引数では、$ callbackクロージャーがメッセージインスタンスを受信し、そのインスタンスを使用して、次の関数を呼び出して、以下に示すようにメッセージを変更することもできます。
- $ message→subject( 'チュートリアルポイントへようこそ');
- $ message→from('[email protected] '、'ミスター 例 ');
- $ message→to('[email protected] '、'ミスター 例 ');
あまり一般的ではない方法のいくつかが含まれます-
- $ message→sender('[email protected] '、' Mr. 例 ');
- $ message→returnPath('[email protected] ');
- $ message→cc('[email protected] '、'ミスター 例 ');
- $ message→bcc('[email protected] '、'ミスター 例 ');
- $ message→replyTo('[email protected] '、'ミスター 例 ');
- $ message→priority(2);
ファイルを添付または埋め込むには、次の方法を使用できます-
- $ message→attach( 'path/to/attachment.txt');
- $ message→embed( 'path/to/attachment.jpg');
メールはHTMLまたはテキストとして送信できます。 以下に示すように配列を渡すことにより、最初の引数で送信するメールのタイプを指定できます。 デフォルトのタイプはHTMLです。 プレーンテキストメールを送信する場合は、次の構文を使用します。
構文
Mail::send([‘text’=>’text.view’], $data, $callback);
この構文では、最初の引数は配列を取ります。 キーの値としてビューのキー名として text を使用します。
例
ステップ1 *-Gmailアカウントからメールを送信します。そのためには、Laravel環境ファイル-.env *ファイルでGmailアカウントを設定する必要があります。 Gmailアカウントで2段階認証を有効にし、アプリケーション固有のパスワードを作成してから、以下に示すように.envパラメーターを変更します。
.env
MAIL_DRIVER = smtp
MAIL_HOST = smtp.gmail.com
MAIL_PORT = 587
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-application-specific-password
MAIL_ENCRYPTION = tls
ステップ2 *- *.env ファイルを変更した後、以下の2つのコマンドを実行してキャッシュをクリアし、Laravelサーバーを再起動します。
php artisan config:cache
ステップ3 *-次のコマンドを実行して、 *MailController というコントローラーを作成します。
php artisan make:controller MailController --plain
- ステップ4 *-実行が成功すると、次の出力が表示されます-
- ステップ5 *-次のコードをコピーします
*app/Http/Controllers/MailController.php* ファイル。
*app/Http/Controllers/MailController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MailController extends Controller {
public function basic_email() {
$data = array('name'=>"Virat Gandhi");
Mail::send(['text'=>'mail'], $data, function($message) {
$message->to('[email protected]', 'Tutorials Point')->subject
('Laravel Basic Testing Mail');
$message->from('[email protected]','Virat Gandhi');
});
echo "Basic Email Sent. Check your inbox.";
}
public function html_email() {
$data = array('name'=>"Virat Gandhi");
Mail::send('mail', $data, function($message) {
$message->to('[email protected]', 'Tutorials Point')->subject
('Laravel HTML Testing Mail');
$message->from('[email protected]','Virat Gandhi');
});
echo "HTML Email Sent. Check your inbox.";
}
public function attachment_email() {
$data = array('name'=>"Virat Gandhi");
Mail::send('mail', $data, function($message) {
$message->to('[email protected]', 'Tutorials Point')->subject
('Laravel Testing Mail with Attachment');
$message->attach('C:\laravel-master\laravel\public\uploads\image.png');
$message->attach('C:\laravel-master\laravel\public\uploads\test.txt');
$message->from('[email protected]','Virat Gandhi');
});
echo "Email Sent with attachment. Check your inbox.";
}
}
ステップ6 *- *resources/views/mail.blade.php ファイルに次のコードをコピーします。
*resources/views/mail.blade.php*
<h1>Hi, {{ $name }}</h1>
l<p>Sending Mail from Laravel.</p>
ステップ7 *- app/Http/routes.php。*に次の行を追加します
*app/Http/routes.php*
Route::get('sendbasicemail','MailController@basic_email');
Route::get('sendhtmlemail','MailController@html_email');
Route::get('sendattachmentemail','MailController@attachment_email');
- ステップ8 *-次のURLにアクセスして、基本的なメールをテストします。
http://localhost:8000/sendbasicemail
- ステップ9 *-出力画面は次のようになります。 受信トレイをチェックして、基本的な電子メール出力を確認します。
- ステップ10 *-次のURLにアクセスして、HTMLメールをテストします。
http://localhost:8000/sendhtmlemail
- ステップ11 *-出力画面は次のようになります。 受信トレイをチェックして、HTMLメールの出力を確認します。
- ステップ12 *-次のURLにアクセスして、添付ファイル付きのHTMLメールをテストします。
http://localhost:8000/sendattachmentemail
- ステップ13 *-次の出力を確認できます
注- MailController.php ファイルでは、fromメソッドの電子メールアドレスは、電子メールアドレスを送信できる電子メールアドレスである必要があります。 通常、サーバーで設定されたメールアドレスである必要があります。
ララヴェル-アヤックス
- Ajax(非同期JavaScriptおよびXML)*は、非同期Webアプリケーションを作成するためにクライアント側で使用される多くのWebテクノロジーを利用するWeb開発手法のセットです。 ビューファイルにjqueryライブラリをインポートして、サーバーからajaxを使用してデータを送受信するために使用されるjqueryのajax関数を使用します。 サーバー側では、response()関数を使用してクライアントに応答を送信し、JSON形式で応答を送信することができます。応答関数をjson()関数でチェーンできます。
json()関数の構文
json(string|array $data = array(), int $status = 200, array $headers = array(), int $options)
例
ステップ1 *- *resources/views/message.php というビューファイルを作成し、そのファイルに次のコードをコピーします。
<html>
<head>
<title>Ajax Example</title>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script>
<script>
function getMessage() {
$.ajax({
type:'POST',
url:'/getmsg',
data:'_token = <?php echo csrf_token() ?>',
success:function(data) {
$("#msg")l(data.msg);
}
});
}
</script>
</head>
<body>
<div id = 'msg'>This message will be replaced using Ajax.
Click the button to replace the message.</div>
<?php
echo Form::button('Replace Message',['onClick'=>'getMessage()']);
?>
</body>
</html>
ステップ2 *-次のコマンドを実行して、 *AjaxController というコントローラーを作成します。
php artisan make:controller AjaxController --plain
- ステップ3 *-実行が成功すると、次の出力が表示されます-
- ステップ4 *-次のコードをコピーします
*app/Http/Controllers/AjaxController.php* ファイル。
*app/Http/Controllers/AjaxController.php*
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class AjaxController extends Controller {
public function index() {
$msg = "This is a simple message.";
return response()->json(array('msg'=> $msg), 200);
}
}
ステップ5 *- *app/Http/routes.php に次の行を追加します。
*app/Http/routes.php*
Route::get('ajax',function() {
return view('message');
});
Route::post('/getmsg','AjaxController@index');
- ステップ6 *-次のURLにアクセスして、Ajax機能をテストします。
http://localhost:8000/ajax
- ステップ7 *-次の画像に示すように、メッセージが表示されるページにリダイレクトされます。
- ステップ8 *-ボタンをクリックすると、次の画像のように出力が表示されます。
Laravel-エラー処理
ほとんどのWebアプリケーションには、エラー処理のための特定のメカニズムがあります。 これらを使用して、エラーと例外を追跡し、ログに記録してパフォーマンスを分析します。 この章では、Laravelアプリケーションでのエラー処理について説明します。
重要なポイント
Laravelでのエラー処理についてさらに詳しく学ぶためにさらに進む前に、次の重要な点に注意してください-
- 新規プロジェクトの場合、Laravelはデフォルトで App \ Exceptions \ Handler クラスにエラーと例外を記録します。 その後、分析のためにユーザーに送信されます。
- Laravelアプリケーションがデバッグモードに設定されている場合、Webアプリケーション内で発生するすべてのエラーについて、スタックトレースを含む詳細なエラーメッセージが表示されます。
- デフォルトでは、デバッグモードは false に設定されており、 true に変更できます。 これにより、ユーザーはスタックトレースですべてのエラーを追跡できます。
- Laravelプロジェクトの構成には、エラーに関する情報をユーザーに表示する量を決定する debug オプションが含まれています。 Webアプリケーションのデフォルトでは、オプションは .env ファイルの環境変数で定義された値に設定されます。
- この値は、ローカル開発環境では true に設定され、実稼働環境では false に設定されます。
- 実稼働環境で値を true に設定すると、エンドユーザーと機密情報を共有するリスクが高くなります。
エラーログ
Webアプリケーションでエラーをログに記録すると、エラーを追跡し、それらを削除するための戦略を計画するのに役立ちます。 ログ情報は、Webアプリケーションの config/app.php ファイルで構成できます。 Laravelのエラーログを扱う際には、次の点に注意してください-
- Laravelはmonolog PHPロギングライブラリを使用します。
- エラートラッキングに使用されるロギングパラメータは、 single、daily、syslog および errorlog です。
- たとえば、エラーメッセージをログファイルに記録する場合は、以下のコマンドに示すように、アプリ構成のログ値を daily に設定する必要があります-
'log' => env('APP_LOG',’daily’),
- daily ログモードがパラメーターとして使用される場合、Laravelはデフォルトで* 5日*の期間エラーログを取得します。 ログファイルの最大数を変更する場合は、構成ファイルの log_max_files のパラメーターを目的の値に設定する必要があります。
‘log_max_files’ => 25;
重大度レベル
Laravelはmonolog PHPロギングライブラリを使用するため、重大度レベルの分析に使用されるさまざまなパラメーターがあります。 使用可能なさまざまな重大度レベルは、エラー、クリティカル、アラート、*緊急メッセージ*です。 次のコマンドに示すように、重大度レベルを設定できます-
'log_level' => env('APP_LOG_LEVEL', 'error')
Laravel-ファサード
ファサードは、アプリケーションのサービスコンテナで利用可能なクラスへの static インターフェイスを提供します。 Laravel facades は、サービスコンテナの基底クラスに対する*静的プロキシ*として機能し、簡潔で表現力豊かな構文の利点を提供すると同時に、従来の静的メソッドよりもテスト容易性と柔軟性を維持します。
ファサードの作り方
以下は、Laravelでファサードを作成する手順です-
- *ステップ1 *-PHPクラスファイルを作成します。
- *ステップ2 *-そのクラスをサービスプロバイダーにバインドします。
- *ステップ3 *-そのServiceProviderを登録する +プロバイダーとしてのConfig \ app.php。
- *ステップ4 *-このクラスであるクラスを作成します + lluminate \ Support \ Facades \ Facade。
- *ステップ5 *-ポイント4をエイリアスとしてConfig \ app.phpに登録します。
ファサードクラスのリファレンス
Laravelには多くのファサードが付属しています。 次の表は、組み込みのFacadeクラスの参照を示しています-
Facade | Class | Service Container Binding |
---|---|---|
App | Illuminate\Foundation\Application | app |
Artisan | Illuminate\Contracts\Console\Kernel | artisan |
Auth | Illuminate\Auth\AuthManager | auth |
Auth (Instance) | Illuminate\Auth\Guard | |
Blade | Illuminate\View\Compilers\BladeCompiler | blade.compiler |
Bus | Illuminate\Contracts\Bus\Dispatcher | |
Cache | Illuminate\Cache\Repository | cache |
Config | Illuminate\Config\Repository | config |
Cookie | Illuminate\Cookie\CookieJar | cookie |
Crypt | Illuminate\Encryption\Encrypter | encrypter |
DB | Illuminate\Database\DatabaseManager | db |
DB (Instance) | Illuminate\Database\Connection | |
Event | Illuminate\Events\Dispatcher | events |
File | Illuminate\Filesystem\Filesystem | files |
Gate | Illuminate\Contracts\Auth\Access\Gate | |
Hash | Illuminate\Contracts\Hashing\Hasher | hash |
Input | Illuminate\Http\Request | request |
Lang | Illuminate\Translation\Translator | translator |
Log | Illuminate\Log\Writer | log |
Illuminate\Mail\Mailer | mailer | |
Password | Illuminate\Auth\Passwords\PasswordBroker | auth.password |
Queue | Illuminate\Queue\QueueManager | queue |
Queue (Instance) | Illuminate\Queue\QueueInterface | |
Queue (Base Class) | Illuminate\Queue\Queue | |
Redirect | Illuminate\Routing\Redirector | redirect |
Redis | Illuminate\Redis\Database | redis |
Request | Illuminate\Http\Request | request |
Response | Illuminate\Contracts\Routing\ResponseFactory | |
Route | Illuminate\Routing\Router | router |
Schema | Illuminate\Database\Schema\Blueprint | |
Session | Illuminate\Session\SessionManager | session |
Session (Instance) | Illuminate\Session\Store | |
Storage | Illuminate\Contracts\Filesystem\Factory | filesystem |
URL | Illuminate\Routing\UrlGenerator | url |
Validator | Illuminate\Validation\Factory | validator |
Validator (Instance) | Illuminate\Validation\Validator | |
View | Illuminate\View\Factory | view |
View (Instance) | Illuminate\View\View |
例
ステップ1 *-次のコマンドを実行して、 *TestFacadesServiceProvider というサービスプロバイダーを作成します。
php artisan make:provider TestFacadesServiceProvider
- ステップ2 *-実行が成功すると、次の出力が表示されます-
ステップ3 *- *App/Test で TestFacades.php というクラスを作成します。
*App/Test/TestFacades.php*
<?php
namespace App\Test;
class TestFacades{
public function testingFacades() {
echo "Testing the Facades in Laravel.";
}
}
?>
ステップ4 *-“ App/Test/Facades” で“ TestFacades.php” *というFacadeクラスを作成します。
*App/Test/Facades/TestFacades.php*
<?php
namespace app\Test\Facades;
use Illuminate\Support\Facades\Facade;
class TestFacades extends Facade {
protected static function getFacadeAccessor() { return 'test'; }
}
ステップ5 *- App/Test/Facades。で *TestFacadesServiceProviders.php というFacadeクラスを作成します。
*App/Providers/TestFacadesServiceProviders.php*
<?php
namespace App\Providers;
use App;
use Illuminate\Support\ServiceProvider;
class TestFacadesServiceProvider extends ServiceProvider {
public function boot() {
//
}
public function register() {
App::bind('test',function() {
return new \App\Test\TestFacades;
});
}
}
ステップ6 *-次の図に示すように、ファイル *config/app.php にサービスプロバイダーを追加します。
*config/app.php*
ステップ7 *-次の図に示すように、ファイル *config/app.php にエイリアスを追加します。
*config/app.php*
ステップ8 *- app/Http/routes.php。*に次の行を追加します
*app/Http/routes.php*
Route::get('/facadeex', function() {
return TestFacades::testingFacades();
});
- ステップ9 *-次のURLにアクセスして、ファサードをテストします。
http://localhost:8000/facadeex
- ステップ10 *-URLにアクセスすると、次の出力が表示されます-
Laravel-契約
Laravelコントラクトは、フレームワークによって提供されるさまざまな機能とコアサービスを備えた一連のインターフェイスです。
たとえば、 Illuminate \ Contracts \ Queue \ Queue コントラクトはジョブのキューイングに必要なメソッドを使用し、 Illuminate \ Contracts \ Mail \ Mailer はメールの送信にメソッドを使用します。
定義されたすべてのコントラクトには、フレームワークの対応する実装が含まれます。 すべてのLaravel契約は、以下に記載されているようにGitHubリポジトリで利用可能です-
https://github.com/illuminate/contracts
このリポジトリは、Laravelフレームワークで利用可能なさまざまなコントラクトを提供し、それに応じてダウンロードして使用できます。
重要なポイント
Laravel契約で作業している間、次の重要な点に注意してください-
- クラスのコンストラクターでファサードを定義することは必須です。
- コントラクトはクラスで明示的に定義され、コンストラクターでコントラクトを定義する必要はありません。
例
以下に記載されているLaravelの認可に使用される契約を検討してください-
<?php
namespace Illuminate\Contracts\Auth\Access;
interface Authorizable{
/**
*Determine if the entity has a given ability.
*
*@param string $ability
* @param array|mixed $arguments
*@return bool
*/
public function can($ability, $arguments = []);
}
コントラクトは、 ability という名前の parameter と array の形式のユーザーIDを使用する arguments を含む関数canを使用します。
あなたは以下の構文に示すように契約を定義する必要があります-
interface <contract-name>
契約は、堅牢で十分にテストされたLaravelアプリケーションを作成するためのファサードのように使用されます。 コントラクトとファサードの使用には、さまざまな*実際的な違い*があります。
次のコードは、リポジトリをキャッシュするためのコントラクトの使用を示しています-
<?php
namespace App\Orders;
use Illuminate\Contracts\Cache\Repository as Cache;
class Repository{
/**
*The cache instance.
*/
protected $cache;
/**
*Create a new repository instance.
*
*@param Cache $cache
* @return void
*/
public function __construct(Cache $cache) {
$this->cache = $cache;
}
}
契約には実装も新しい依存関係も含まれません。指定されたコントラクトの代替実装を簡単に記述できるため、ユーザーはコードベースを変更せずにキャッシュ実装を置き換えることができます。 Laravel-csrf-protection
Laravel-認証
認証は、ユーザー資格情報を識別するプロセスです。 Webアプリケーションでは、認証は、ユーザー識別のために電子メールまたはユーザー名とパスワードなどの入力パラメーターを取るセッションによって管理されます。 これらのパラメータが一致する場合、ユーザーは認証されたと言われます。
コマンド
Laravelは、次のコマンドを使用して、認証を実行するフォームと関連するコントローラーを作成します-
php artisan make:auth
このコマンドは、次のスクリーンショットに示すように、認証の足場を正常に作成するのに役立ちます-
コントローラ
認証プロセスに使用されるコントローラーは HomeController です。
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
class HomeController extends Controller{
/**
*Create a new controller instance.
*
*@return void
*/
public function __construct() {
$this->middleware('auth');
}
/**
*Show the application dashboard.
*
*@return \Illuminate\Http\Response
*/
public function index() {
return view('home');
}
}
その結果、生成されたscaffoldアプリケーションは、認証を実行するためのログインページと登録ページを作成します。 それらは以下に示すとおりです-
ログイン
登録
ユーザーの手動認証
Laravelは、ユーザーを手動で認証するのに役立つ Auth ファサードを使用します。 メールとパスワードを確認する attempt メソッドが含まれています。
認証用のすべての機能を含む LoginController の次のコード行を考慮してください-
<?php
//Authentication mechanism
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller{
/**
*Handling authentication request
*
*@return Response
*/
public function authenticate() {
if (Auth::attempt(['email' => $email, 'password' => $password])) {
//Authentication passed...
return redirect()->intended('dashboard');
}
}
}
Laravel-認証
前の章では、Laravelでの認証プロセスについて検討しました。 この章では、Laravelでの認証プロセスについて説明します。
認証と承認の違い
Laravelでの承認プロセスについてさらに学習する前に、認証と承認の違いを理解しましょう。
- 認証*では、システムまたはWebアプリケーションは、ユーザーが提供する資格情報を通じてユーザーを識別します。 資格情報が有効であることが判明した場合、それらは認証されます。
*authorization* では、システムまたはWebアプリケーションは、認証されたユーザーがアクセスしようとしているリソースにアクセスできるか、または要求を行うことができるかどうかを確認します。 つまり、要求されたリソースに対する権限と許可をチェックします。 リソースにアクセスできることがわかった場合は、許可されていることを意味します。
したがって、 authentication にはユーザー資格情報の有効性のチェックが含まれ、 authorization には認証済みユーザーが持っているリソースに対する権限と許可のチェックが含まれます。
Laravelの承認メカニズム
Laravelは、2つの主要な方法、つまり Gates と Policies を含む簡単な認証メカニズムを提供します。
ゲートとポリシーの作成
ゲートは、指定されたアクションの実行がユーザーに許可されているかどうかを判断するために使用されます。 それらは通常、Gateファサードを使用して App/Providers/AuthServiceProvider.php で定義されます。 ゲートは、承認メカニズムを実行するために宣言される関数でもあります。
ポリシーは配列内で宣言され、承認メカニズムを使用するクラスおよびメソッド内で使用されます。
次のコード行は、Laravel Webアプリケーションでユーザーを承認するためにGatesとポリシーを使用する方法を説明しています。 この例では、ユーザーを認証するために boot 関数が使用されていることに注意してください。
<?php
namespace App\Providers;
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider{
/**
*The policy mappings for the application.
*
*@var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
*Register any application authentication/authorization services.
*
*@param \Illuminate\Contracts\Auth\Access\Gate $gate
* @return void
*/
public function boot(GateContract $gate) {
$this->registerPolicies($gate);
//
}
}
Laravel-職人コンソール
Laravelフレームワークは、コマンドラインを介した相互作用のための3つの主要なツール、すなわち Artisan、Ticker および REPL を提供します。 この章では、Artisanについて詳しく説明します。
職人の紹介
Artisanは、Laravelで頻繁に使用されるコマンドラインインターフェイスであり、Webアプリケーションの開発に役立つ一連のコマンドが含まれています。
例
以下は、Artisanのいくつかのコマンドとそれぞれの機能のリストです-
- Laravelプロジェクトを開始するには*
php artisan serve
キャッシングメカニズムを有効にするには
php artisan route:cache
- Artisanでサポートされている使用可能なコマンドのリストを表示するには*
php artisan list
コマンドに関するヘルプを表示し、利用可能なオプションと引数を表示するには
php artisan help serve
次のスクリーンショットは、上記のコマンドの出力を示しています-
コマンドを書く
Artisanにリストされているコマンドに加えて、ユーザーはWebアプリケーションで使用できるカスタムコマンドを作成することもできます。 コマンドは* app/console/commandsディレクトリ*に保存されることに注意してください。
ユーザー定義のコマンドを作成するためのデフォルトのコマンドは以下に示されています-
php artisan make:console <name-of-command>
上記のコマンドを入力すると、以下のスクリーンショットに示すように出力を確認できます-
*DefaultCommand* 用に作成されたファイルは *DefaultCommand.php* と名付けられ、以下に示されています-
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class DefaultCommand extends Command{
/**
*The name and signature of the console command.
*
*@var string
*/
protected $signature = 'command:name';
/**
*The console command description.
*
*@var string
*/
protected $description = 'Command description';
/**
*Create a new command instance.
*
*@return void
*/
public function __construct() {
parent::__construct();
}
/**
*Execute the console command.
*
*@return mixed
*/
public function handle() {
//
}
}
このファイルには、ユーザーが定義したコマンドの署名と説明が含まれています。 handle という名前のパブリック関数は、コマンドの実行時に機能を実行します。 これらのコマンドは、同じディレクトリの Kernel.php ファイルに登録されます。
また、次のコードに示すように、ユーザー定義コマンドのタスクのスケジュールを作成することができます-
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel {
/**
*The Artisan commands provided by your application.
*
*@var array
*/
protected $commands = [
//Commands\Inspire::class,
Commands\DefaultCommand::class
];
/**
*Define the application's command schedule.
*
*@param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule) {
//$schedule->command('inspire')
//->hourly();
}
}
特定のコマンドのタスクのスケジュールは、 schedule という名前の関数で定義されていることに注意してください。この関数には、 hourly パラメーターを取るタスクをスケジュールするパラメーターが含まれています。
コマンドはコマンドの配列に登録され、コマンドのパスと名前が含まれます。
コマンドが登録されると、Artisanコマンドにリストされます。 指定したコマンドのヘルプ属性を呼び出すと、署名および説明セクションに含まれる値が表示されます。
コマンド DefaultCommand の属性を表示する方法を見てみましょう。 次のようにコマンドを使用する必要があります-
php artisan help DefaultCommand
Laravel-暗号化
暗号化は、3番目のユーザーが情報を読み取れないように、いくつかのアルゴリズムを使用してプレーンテキストをメッセージに変換するプロセスです。 これは、侵入者が転送された情報を標的にする可能性が低いため、機密情報の送信に役立ちます。
暗号化は Cryptography と呼ばれるプロセスを使用して実行されます。 暗号化されるテキストは*プレーンテキスト*と呼ばれ、暗号化後に取得されるテキストまたはメッセージは*暗号テキスト*と呼ばれます。 暗号化テキストをプレーンテキストに変換するプロセスは、*復号化*と呼ばれます。
Laravelは、暗号化にOpen SSLを使用する AES-256 および AES-128 暗号化を使用します。 Laravelに含まれるすべての値は、プロトコル Message Authentication Code を使用して署名されているため、暗号化されると基になる値を改ざんすることはできません。
設定
Laravelで*キー*を生成するために使用されるコマンドは以下に示されています-
php artisan key:generate
このコマンドはPHPセキュアランダムバイトジェネレーターを使用し、以下のスクリーンショットに示すように出力を確認できることに注意してください-
上記のコマンドは、Webアプリケーションで使用できるキーの生成に役立ちます。 以下に示すスクリーンショットを観察します-
Note
暗号化の値は、 config/app.php ファイルで適切に調整されます。このファイルには、暗号化の2つのパラメーター、つまり key と cipher が含まれています。 このキーを使用する値が適切に調整されていない場合、Laravelで暗号化されたすべての値は安全ではなくなります。
暗号化プロセス
値の暗号化は、Laravelクラスのコントローラーで encrypt helper を使用して実行できます。 これらの値は、OpenSSLおよびAES-256暗号を使用して暗号化されます。 暗号化された値はすべて、メッセージ認証コード(MAC)で署名され、暗号化された文字列の変更をチェックします。
以下に示すコードはコントローラーで言及されており、秘密または機密メッセージを保存するために使用されます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class DemoController extends Controller{
**
*Store a secret message for the user.
*
*@param Request $request
* @param int $id
*@return Response
*/
public function storeSecret(Request $request, $id) {
$user = User::findOrFail($id);
$user->fill([
'secret' => encrypt($request->secret)
])->save();
}
}
復号化プロセス
値の復号化は decrypt helper を使用して行われます。 次のコード行を確認してください-
use Illuminate\Contracts\Encryption\DecryptException;
//Exception for decryption thrown in facade
try {
$decrypted = decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
無効なMACが使用されているために復号化プロセスが成功しない場合、適切な例外がスローされることに注意してください。
Laravel-ハッシュ
ハッシュとは、文字列を短い固定値または元の文字列を表すキーに変換するプロセスです。 Laravelは Hash ファサードを使用して、パスワードをハッシュ形式で安全に保存します。
基本的な使い方
次のスクリーンショットは、パスワードの保存と更新に使用される passwordController という名前のコントローラーを作成する方法を示しています-
次のコード行は、 passwordController の機能と使用法を説明しています-
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller
class passwordController extends Controller{
/**
*Updating the password for the user.
*
*@param Request $request
* @return Response
*/
public function update(Request $request) {
//Validate the new password length...
$request->user()->fill([
'password' => Hash::make($request->newPassword)//Hashing passwords
])->save();
}
}
ハッシュ化されたパスワードは、 make メソッドを使用して保存されます。 この方法により、Laravelで一般的に使用されている bcrypt ハッシュアルゴリズムの作業要素を管理できます。
ハッシュに対するパスワードの検証
ハッシュに対してパスワードを検証して、変換に使用された文字列を確認する必要があります。 これには、 check メソッドを使用できます。 これは以下のコードに示されています-
if (Hash::check('plain-text', $hashedPassword)) {
//The passwords match...
}
*check* メソッドはプレーンテキストを *hashedPassword* 変数と比較し、結果がtrueの場合、true値を返すことに注意してください。
Laravel-リリースプロセスを理解する
すべてのWebアプリケーションフレームワークには独自のバージョン履歴があり、常に更新および保守されています。 すべての最新バージョンには、変更または廃止される新しい機能と機能が搭載されているため、プロジェクトに適したバージョンを把握しておくことが重要です。
Laravelに関しては、以下の2つのアクティブバージョンがあります-
- Laravel 4- 2013年5月にリリース
- Laravel 5.1- 2015年2月にリリース
Laravel 5.1には、Web開発用のすべての堅牢な機能を含む最新バージョンのLaravel 5.1.5のさまざまなリリースも含まれています。 Laravelまたはバージョンリリースのロードマップは、以下の画像に示されています-
次の点は、Laravelのリリースプロセスを理解するという文脈で注目に値します-
- app/models の古いディレクトリは、Laravel 5.1で削除されました。
- すべてのコントローラー、ミドルウェア、および要求は、app/Httpフォルダーの下のディレクトリ内にグループ化されます。
- 新しいフォルダ、つまり Providers ディレクトリは、Laravel 4.xの以前のバージョンの app/start ファイルに置き換えられました。
- すべての言語ファイルとビューが resources ディレクトリに移動されます。
- 新しいルートコマンド route:cache は、新しいルートの登録に使用され、Laravel 5.1以降のバージョンのリリースに含まれています。
- Laravelは* HTTPミドルウェア*をサポートし、* CSRFトークン*と認証モデルも含みます。
- すべての認証モデルは、1つのディレクトリ、つまり resources/views/auth の下にあります。 ユーザー登録、認証、パスワードコントローラーが含まれます。
Laravelリリース
Version | Release | Bug Fixes Until | Security Fixes Until |
---|---|---|---|
V1 | June 2011 | - | - |
V2 | September 2011 | - | - |
v3 | February 2012 | - | - |
v4 | May 2013 | - | - |
5.0 | Feb 4th, 2015 | Aug 4th, 2015 | Feb 4th, 2016 |
5.1 (LTS) | Jun 9th, 2015 | Jun 9th, 2017 | Jun 9th, 2018 |
5.2 | Dec 21st, 2015 | Jun 21st, 2016 | Dec 21st, 2016 |
5.3 | Aug 23rd, 2016 | Feb 23rd, 2017 | Aug 23rd, 2017 |
5.4 | Jan 24th, 2017 | Jul 24th, 2017 | Jan 24th, 2018 |
5.5 (LTS) | Aug 30th, 2017 | Aug 30th, 2019 | Aug 30th, 2020 |
5.6 | Feb 7th, 2018 | Aug 7th, 2018 | Feb 7th, 2019 |
5.7 | Sep 4, 2018 | Feb 4th, 2019 | Sep 4th, 2019 |
強調表示されたバージョンが最新リリースを示していることに注意してください。
Laravel-ゲストユーザーゲート
Guest User Gates機能は、2018年9月にリリースされた最新の5.7バージョンのアドオンです。 この機能は、特定のユーザーの承認プロセスを開始するために使用されます。
Laravel 5.6には、認証されていないユーザーに対して false を返す手順がありました。 Laravel 5.7では、以下に示すように、指定されたコントローラ内で特定の nullable タイプヒントを使用することにより、ゲストが認証チェックに行くことを許可できます-
<?php
Gate::define('view-post', function (?User $user) {
//Guests
});
コードの説明
*nullable* タイプヒントを使用すると、ゲストユーザーがゲートに渡されたときに$ user変数がnullになります。 その後、アクションの承認に関する決定を下すことができます。 null許容型を許可し、trueを返す場合、ゲストには承認があります。 nullable型のヒントを使用しない場合、ゲストはLaravel 5.7の403応答を自動的に取得します。これは以下に表示されます-
403エラーと404エラーの違いは、ユーザーが不明なリソースまたはURLにアクセスしようとすると404が表示され、許可されていないユーザーがWebサイトにアクセスすると上記のスナップショットで述べた403エラーが表示されることです。
Laravel-アーティザンコマンド
Laravel 5.7には、新しいコマンドを処理およびテストする新しい方法が付属しています。 それは職人のコマンドをテストする新機能が含まれており、デモは以下に記載されています-
class ArtisanCommandTest extends TestCase{
public function testBasicTest() {
$this->artisan('nova:create', [
'name' => 'My New Admin panel'
])
->expectsQuestion('Please enter your API key', 'apiKeySecret')
->expectsOutput('Authenticating...')
->expectsQuestion('Please select a version', 'v1.0')
->expectsOutput('Installing...')
->expectsQuestion('Do you want to compile the assets?', 'yes')
->expectsOutput('Compiling assets...')
->assertExitCode(0);
}
}
コードの説明
ここでは、「ArtisanCommandTest」という名前の新しいクラスがテストケースモジュールの下に作成されます。 アサーションのさまざまな機能を含む基本機能 testBasicTest が含まれています。
アーティザンコマンド expectsQuestion には2つの属性が含まれています。 1つは質問あり、もう1つは apiKeySecret です。 ここで、職人はapiKeySecretを検証し、ユーザーから送信された入力を検証します。
ユーザーが特定のバージョンに言及することが予想される「バージョンを選択してください」という質問にも同じシナリオが適用されます。
Laravel-ページネーションのカスタマイズ
Laravelには、ユーザーまたは開発者がページネーション機能を含めるのに役立つページネーション機能が含まれています。 Laravelページネーターは、クエリビルダーおよびEloquent ORMと統合されています。 paginateメソッドは、必要な制限と定義されたオフセットの設定を自動的に処理します。 つまり、ページ分割するパラメーターを1つだけ受け入れます。 1ページに表示されるアイテムの数。
Laravel 5.7には、ページ付けの両側のページ数をカスタマイズするための新しいページ付け方法が含まれています。 新しいメソッドでは、カスタムページネーションビューは不要になりました。
カスタムページネーションビューコードのデモは以下のとおりです-
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
class UserController extends Controller{
/**
*Show all of the users for the application.
*
*@return Response
*/
public function index() {
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);
}
}
Laravel標準による新しいページネーションのカスタマイズは以下に記載されています-
<?php
User::paginate(10)->onEachSide(5);
*onEachSide* は、10と5のサブディビジョンを持つ各ページネーションレコードのサブディビジョンを指すことに注意してください。
Laravel-ダンプサーバー
Laravelダンプサーバーには、Laravel 5.7のバージョンが付属しています。 以前のバージョンには、ダンプサーバーは含まれていません。 ダンプサーバーは、laravel/laravel composerファイルの開発依存関係になります。
バージョン5.7のリリースでは、ユーザーがブラウザではなくコンソールまたはHTMLファイルにデータをダンプできるようにする、すぐに使用できる概念を含むこのコマンドを取得できます。 コマンドの実行は以下に記載されています-
php artisan dump-server
# Or send the output to an HTML file
php artisan dump-server --format=html > dumpl
説明
このコマンドは、アプリケーションから送信されたデータの収集に役立つサーバーをバックグラウンドで実行し、コンソールを介して出力を送信します。 コマンドがフォアグラウンドで実行されていない場合、dump()関数はデフォルトで機能することが期待されています。
Laravel-アクションURL
Laravel 5.7は、「呼び出し可能なアクションURL」と呼ばれる新しい機能を導入します。 この機能は、アクションメソッドで文字列を受け入れるLaravel 5.6の機能に似ています。 Laravel 5.7で導入された新しい構文の主な目的は、コントローラーに直接アクセスできるようにすることです。
Laravel 5.6バージョンで使用される構文は次のとおりです-
<?php
$url = action('UserController@profile', ['id' => 1]);
Laravel 5.7で呼び出される同様のアクションは以下に記載されています-
<?php
$url = action([PostsController::class, 'index']);
新しい呼び出し可能配列構文形式の利点の1つは、開発者がコードナビゲーションをサポートするテキストエディターまたはIDEを使用する場合、コントローラーに直接移動できる機能です。