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

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

解決済

1回答

3155閲覧

Laravel config/compile.php providersについて

退会済みユーザー

退会済みユーザー

総合スコア0

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グッド

1クリップ

投稿2015/12/03 04:43

編集2015/12/03 11:20

環境

Laravel v5.0.33

前提

artisan optimizeを試してみたいと思い、 config/compile.php に以下のように記述し artisan optimize を実行しました。
この記載は以前のデフォルト設定とほぼ同等の記載です。

php

1return [ 2 'files' => [ 3 realpath(__DIR__.'/../app/Providers/AppServiceProvider.php'), 4 realpath(__DIR__.'/../app/Providers/BusServiceProvider.php'), 5 realpath(__DIR__.'/../app/Providers/ConfigServiceProvider.php'), 6 realpath(__DIR__.'/../app/Providers/EventServiceProvider.php'), 7 realpath(__DIR__.'/../app/Providers/RouteServiceProvider.php'), 8 ], 9 10 'providers' => [ 11 // 12 ], 13];

その後 Providers 配下のファイルが files に記載されているのが気持ち悪かったので、 providers に上記設定を移動しました。

php

1return [ 2 'files' => [ 3 // 4 ], 5 6 'providers' => [ 7 'App\Providers\AppServiceProvider', 8 'App\Providers\BusServiceProvider', 9 'App\Providers\ConfigServiceProvider', 10 'App\Providers\EventServiceProvider', 11 'App\Providers\RouteServiceProvider', 12 ], 13];

そして、以前に生成されたファイルを削除し、再度 artisan optimize を実行しました。

このとき生成された services.jsoncompiled.php それぞれdiffを取ってみたところ、services.json に差異はありませんでした。
一方の compiled.php を比較したところ、files に記載していた際に生成された以下の箇所が、 providers に記載して生成した compiled.php には存在しませんでした。

php

1 2namespace App\Providers { 3use Illuminate\Support\ServiceProvider; 4class AppServiceProvider extends ServiceProvider 5{ 6 public function boot() 7 { 8 } 9 public function register() 10 { 11 $this->app->bind('Illuminate\\Contracts\\Auth\\Registrar', 'App\\Services\\Registrar'); 12 } 13} 14} 15 16namespace App\Providers { 17use Illuminate\Bus\Dispatcher; 18use Illuminate\Support\ServiceProvider; 19class BusServiceProvider extends ServiceProvider 20{ 21 public function boot(Dispatcher $dispatcher) 22 { 23 $dispatcher->mapUsing(function ($command) { 24 return Dispatcher::simpleMapping($command, 'App\\Commands', 'App\\Handlers\\Commands'); 25 }); 26 } 27 public function register() 28 { 29 } 30} 31} 32 33namespace App\Providers { 34use Illuminate\Support\ServiceProvider; 35class ConfigServiceProvider extends ServiceProvider 36{ 37 public function register() 38 { 39 config(array()); 40 } 41} 42} 43 44namespace App\Providers { 45use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; 46use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; 47class EventServiceProvider extends ServiceProvider 48{ 49 protected $listen = array('event.name' => array('EventListener')); 50 public function boot(DispatcherContract $events) 51 { 52 parent::boot($events); 53 } 54} 55} 56 57namespace App\Providers { 58use Illuminate\Routing\Router; 59use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; 60class RouteServiceProvider extends ServiceProvider 61{ 62 protected $namespace = 'App\\Http\\Controllers'; 63 public function boot(Router $router) 64 { 65 parent::boot($router); 66 } 67 public function map(Router $router) 68 { 69 $router->group(array('namespace' => $this->namespace), function ($router) { 70 require app_path('Http/routes.php'); 71 }); 72 } 73} 74}

質問

ここで疑問が生じたのですが、providers に記載したのに生成されていないということは、 config/compile.phpfiles providers にはそれぞれ何をどのように記載をするのが正しいのでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

config/compile.phpのfilesは文字通り、
optimize実行時のコンパイルファイルに含ませたいソースコードのファイルを指定します。

providersは、サービスプロバイダのクラス名が記述できますが、
最適化ファイルに含めるために、サービスプロバイダでcompilesという静的メソッドを記述しなければいけません。

このcompilesメソッドへの記述は以下のようになります

php

1 /** 2 * {@inheritdoc} 3 */ 4 public static function compiles() 5 { 6 return [ 7 base_path() . '/vendor/fluent/logger/src/Entity.php', 8 base_path() . '/vendor/fluent/logger/src/Exception.php', 9 base_path() . '/vendor/fluent/logger/src/FluentLogger.php', 10 base_path() . '/vendor/fluent/logger/src/JsonPacker.php', 11 base_path() . '/vendor/fluent/logger/src/LoggerInterface.php', 12 base_path() . '/vendor/fluent/logger/src/PackerInterface.php', 13 ]; 14 }

上記のように記述することでoptimize実行時に
Illuminate\Foundation\Console\OptimizeCommand内の下記コードが実行されます

php

1foreach ($app['config']->get('compile.providers', []) as $provider) { 2 $files = array_merge($files, forward_static_call([$provider, 'compiles'])); 3}

この機能は主にパッケージ開発などで利用できます。
(ほとんどの方がこの機能を使っていないので、仕組みを知らないと思います)

用途としては、フレームワーク内にありますOptimize/config.phpと同じですので、
ファイルの読み込みを減らして多少の高速化を図ることができます。

投稿2015/12/06 15:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2015/12/06 19:37

回答ありがとうございます。 パッケージのソースコードが含まれるのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問