質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

3回答

1024閲覧

$this->app['validator']の書き方について

toll_tree

総合スコア199

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/05/16 06:14

laravelを学習している際のことなのですが、以下のコードにつきまして、お聞きしたいことがあります。

php

1public function boot() 2 { 3 //' 4 $validator = $this->app['validator']; 5 $validator->resolver(function($translator,$data,$rules,$messages){ 6 return new HelloValidator($translator,$data,$rules,$messages); 7 }); 8 }

コードのここの部分「 $validator = $this->app['validator'];」の書き方なのですが、$thisのappメソッドを指定していると思うのですが、メソッドの引数を指定する際は、app()と角カッコでなく丸カッコを指定すると認識しているのですが、
角カッコを指定した場合、どのような挙動になるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

$thisのappメソッド

「メソッド」と「プロパティ」の区別はきちんとつけましょう。
クラスの基礎です。

「じゃあappのキーを指定することで何を持って来ているのか」というと
本体コードを追うのが一番いいですね。
Laravelにおける「appって何」は深く知っておく必要があると思いますし
そのあたりは公式マニュアルにもきちんと言及されています。

投稿2019/05/16 06:23

編集2019/05/16 06:30
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikkame

2019/05/16 09:54

やはりどこまでがPHPでどこまでがLaravelかの区別がつかないので、PHPをまずは学習すべき事案
m.ts10806

2019/05/16 10:00

そうですね。特にオブジェクト指向すっぽり抜けてては無理があると思います。 ほとんどLaravelの話になってないので。ここまで指摘されて振り返らないのは変なプライドがあるのでしょうか… 回答しててものれんの腕押しというか、私以外の回答もほとんど吸収されてる感がないですね。 本筋に戻ってこない遠回りをいつまでやるのか…
guest

0

$thisのappメソッドを指定

単にappプロパティを参照しているだけでしょう

sample

laravelをまるっと無視して、こんな参照のされ方なのでしょう

PHP

1class hoge{ 2 public $app=[]; 3 public function __construct(){ 4 $this->app["validator"]=new fuga; 5 } 6 public function boot($x){ 7 $validator = $this->app["validator"]; 8 $validator->resolver($x); 9 } 10} 11class fuga{ 12 public function resolver($x){ 13 print "abc_".$x."_xyz"; 14 } 15} 16$hoge=new hoge(); 17$hoge->boot("123");

投稿2019/05/16 06:17

編集2019/05/16 06:43
yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toll_tree

2019/05/16 06:25

ご回答ありがとうございます。 プロパティはメンバ変数だと思うのですが、そうなると、appは配列であり、キーである['validate']を指しているということでしょうか?
toll_tree

2019/05/16 08:00 編集

追記読ませて頂いたのですが、app['validator']には、インスタンスが入っている可能性があるという訳なんですね
guest

0

以下は、サービスコンテナの連想配列から、validatorの添字で登録されたバリデージョンクラスを取得するという処理です。

$this->app['validator']

"validator"の添字でどのようなインスタンスが取得できるかは、Laravel 5.8.17時点で、以下のコード部で登録されています。
ValidationServiceProvider

app()というのは、サービスコンテナを色々な場所から参照できるようにした、ヘルパー関数です。
app("validator")とすると、中身の処理は最終的には、$this->app['validator']の参照と同等の処理がなされて、サービスコンテナからバリデージョンクラスを取得します。

処理が気になる場合は、以下のコード追いかけてみてください。
app()

考え方としては、DIコンテナという概念のためのものなので、一通りLaravelの使い方を学習した後に、次のステップとして学習してみてください。
サービスコンテナについて

投稿2019/05/16 14:26

編集2019/05/16 14:30
aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toll_tree

2019/05/17 05:00 編集

ご丁寧にありがとうございます。 難しく苦戦していますが、取り敢えず、挫折してしまわないよう頑張って取り敢えずは一通り学習していこうと思います!
aro10

2019/05/17 07:21

ライブラリ製作者でなければ、ヘルパー関数のapp()を常に使っていても問題ないかと思うので、 わかりやすい方でためしてみてください。
toll_tree

2019/05/17 07:31

現在、書籍を元に学習しているのですが、サービスコンテナなど調べても訳が分からない状態でして… とりあえずは、分からない所は後に回しつつ、一通り学習していこうと思います
aro10

2019/05/17 08:30

そうですね ルーティング、コントローラ、Eloquent、バリデーション、Blade辺りを先に学習すると、 ひとまずWebシステムが作れます。 サービスコンテナは、インターフェイス利用でのインスタンス差し替えや、テスト時に威力を発揮するものなので、ひとまず後回しで良いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問