Laravelで一歩一歩Packagesを作成する
まずLaravel公式ドキュメントを見てみましょう.これは最新4.2のドキュメントです.中国語を見たいならここをクリックしてください.基本的には、このgithubのライブラリsetup-laravel 4-packageも、パッケージを作成し、関連リソースを関連付ける方法を一歩一歩紹介しています.
ここでは、accountパッケージの作成を例に挙げます.
1.php artisan workbenchコマンドを初めて使用する場合、app/config/workbenchを構成する必要がある.phpのnameとemailは、パッケージを生成するときにこれらの情報を使用します.
2、プロジェクトルートディレクトリで使用する場合、次のコマンドは最も初期のパッケージディレクトリ構造を生成します.ここで、resourcesは関連するview、config、migrationsなどのリソースディレクトリを生成する役割を果たします.
1
パッケージのルートディレクトリはworkbench/fstos/accountディレクトリにあり、その構造は次のようになります.
1
2
3
4
5
6
7
8
9
10
3、パッケージの'FstosAccountAccountServiceProvider'をapp/config/appに加える.phpのproviders配列では、このパッケージがアプリケーションにロードされます.
4、本パッケージに独立したルーティングファイルを追加するには、AccountServiceProviderのboot関数に次のコードを追加し、パッケージのルートディレクトリにroutesを作成するだけです.phpファイル
1
2
3
4
5
ルーティングファイルは次のようになります.
1
2
3
5、OK、今あなたのブラウザでテストしましょう.「account register router」が現れました.次にcontrollerを使ってみましょう.
1
6、routesの修正は以下の通りです.
1
2
3
4
7、コントローラにRegistrationControllerを新規作成する.phpファイル、コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
ページをリフレッシュしてみると、ああ、レポートが間違っていたのか、「FstosAccountRegistrationController」が見つからなかったのか、Laravelはデフォルトではディレクトリを自動的に検索しないので、開発者が自分でファイルの保存ディレクトリを指定する必要があるが、artisan workbenchを使用するときにsrc/controllersディレクトリを生成したのか、Ok、自動ロードパスを追加すれば
8、パッケージのルートディレクトリのcomposer.jsonのautoloadの下でclassmapフィールドに「src/controllers」を追加し、プロジェクトルートディレクトリでphp artisan dump-autoloadを実行し、OOK、私たちはページをリフレッシュして、ハハが現れました
9、次はviewsファイルを使います!うんうん、私たちの理解ではcontrollerのコードを変更するだけです.滴です.以下のようにします.
1
2
3
4
5
彼がアクセスしたのはapp/views/account/registerであることは明らかだ.blade.phpビューテンプレートでは、このファイルを作成し、次のように書きます.
1
2
3
ページを更新し続けましょう.ハハハ、ラッキーですね.このルールですね.でも、パッケージの中のビューをapp/viewsディレクトリに置くことを望んでいません.滴ですね.パッケージに統合しなければなりません.srcの下にもviewsがあります.いいですね.ファイルをパッケージsrc/views/account/registerに置きます.blade.phpでは、以下の内容が含まれています.
1
2
3
ページをリフレッシュしましょう.私は拭きます.それとも元のページですか.Laravelがapp/viewsの下のテンプレートファイルを優先的にロードしているのではないでしょうか.私たちはapp/views/account/を削除して、再びページをリフレッシュして、失望しました.再びnot foundページが現れました.Laravelでは、パッケージのビューファイルを自動的にインデックスすることはありません.だから、私たちはまだ少し仕事をしなければなりません.
10、ビューをロードするときに、パッケージにビューファイルを探すように指定すればいいです.controllerのコードを変更するには、次のようにします.
1
2
3
4
5
再びページをリフレッシュすると、私たちが期待していたページが現れ、controllerでaccountというコマンド空間が使われているのを見ました(具体的な意味はlaravel公式ドキュメントを見ることができます)、この空間はどこで指定されていますか?
11、AccountServiceProviderを見てみましょう.phpファイルのboot関数の$this->package('fstos/account');この行のコードは、実はこのパッケージのコマンド空間とバインドされたディレクトリを指定しています.神馬、太く見えません.滴です.この関数には2番目の(空間名)パラメータと3番目の(ディレクトリ)パラメータがありますが、この2つのパラメータにはデフォルト値があります.ネーミング空間のデフォルト値はaccountです.ディレクトリのデフォルト値はパッケージルートディレクトリの下のsrcディレクトリです.実は次のような書き方に相当します.
1
Ok、やってみてもいいよ~
エピソードは、7条から2回書きましたが、1回目の保存ではログイン時間が長すぎて保存が失われてしまいました.
これは私が最初に発表した場所です.http://www.fstos.com/index.php/2014-05-26-09-01-36/81-laravel-packages
ここでは、accountパッケージの作成を例に挙げます.
1.php artisan workbenchコマンドを初めて使用する場合、app/config/workbenchを構成する必要がある.phpのnameとemailは、パッケージを生成するときにこれらの情報を使用します.
2、プロジェクトルートディレクトリで使用する場合、次のコマンドは最も初期のパッケージディレクトリ構造を生成します.ここで、resourcesは関連するview、config、migrationsなどのリソースディレクトリを生成する役割を果たします.
1
php artisan workbench fstos/account --resources
パッケージのルートディレクトリはworkbench/fstos/accountディレクトリにあり、その構造は次のようになります.
1
2
3
4
5
6
7
8
9
10
/src
/Fstos
/Account
AccountServiceProvider.php
/config
/lang
/migrations
/views
/tests
/public
3、パッケージの'FstosAccountAccountServiceProvider'をapp/config/appに加える.phpのproviders配列では、このパッケージがアプリケーションにロードされます.
4、本パッケージに独立したルーティングファイルを追加するには、AccountServiceProviderのboot関数に次のコードを追加し、パッケージのルートディレクトリにroutesを作成するだけです.phpファイル
1
2
3
4
5
public function boot()
{
$this->package('fstos/account');
include __DIR__.'/../../routes.php';
}
ルーティングファイルは次のようになります.
1
2
3
Route::get('account/register', function(){
return "account register router";
});
5、OK、今あなたのブラウザでテストしましょう.「account register router」が現れました.次にcontrollerを使ってみましょう.
1
http://localhost/laravel/friends/public/account/register
6、routesの修正は以下の通りです.
1
2
3
4
Route::get('account/register',
array('as' => 'account.register.get',
'uses' => 'Fstos\Account\RegistrationController@getRegister')
);
7、コントローラにRegistrationControllerを新規作成する.phpファイル、コードは以下の通りです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
namespace Fstos\Account;
use Illuminate\Routing\Controller as Controller;
use Illuminate\Support\Facades\View as View;
use Illuminate\Support\Facades\Config as Config;
class RegistrationController extends Controller
{
/**
* Display the registration form.
*
* @return \Illuminate\Http\Response
*/
public function getRegister()
{
return "yes,use controller with route in packages!";
}
/**
*
*/
protected function setupLayout()
{
if (!is_null($this->layout)) {
$this->layout = View::make($this->layout);
}
}
}
ページをリフレッシュしてみると、ああ、レポートが間違っていたのか、「FstosAccountRegistrationController」が見つからなかったのか、Laravelはデフォルトではディレクトリを自動的に検索しないので、開発者が自分でファイルの保存ディレクトリを指定する必要があるが、artisan workbenchを使用するときにsrc/controllersディレクトリを生成したのか、Ok、自動ロードパスを追加すれば
8、パッケージのルートディレクトリのcomposer.jsonのautoloadの下でclassmapフィールドに「src/controllers」を追加し、プロジェクトルートディレクトリでphp artisan dump-autoloadを実行し、OOK、私たちはページをリフレッシュして、ハハが現れました
9、次はviewsファイルを使います!うんうん、私たちの理解ではcontrollerのコードを変更するだけです.滴です.以下のようにします.
1
2
3
4
5
public function getRegister()
{
return View::make('account.register');
// return "yes,use controller with route in packages!";
}
彼がアクセスしたのはapp/views/account/registerであることは明らかだ.blade.phpビューテンプレートでは、このファイルを作成し、次のように書きます.
1
2
3
<div>
we are shown in views!
</div>
ページを更新し続けましょう.ハハハ、ラッキーですね.このルールですね.でも、パッケージの中のビューをapp/viewsディレクトリに置くことを望んでいません.滴ですね.パッケージに統合しなければなりません.srcの下にもviewsがあります.いいですね.ファイルをパッケージsrc/views/account/registerに置きます.blade.phpでは、以下の内容が含まれています.
1
2
3
<div>
we are shown in views under workbench!
</div>
ページをリフレッシュしましょう.私は拭きます.それとも元のページですか.Laravelがapp/viewsの下のテンプレートファイルを優先的にロードしているのではないでしょうか.私たちはapp/views/account/を削除して、再びページをリフレッシュして、失望しました.再びnot foundページが現れました.Laravelでは、パッケージのビューファイルを自動的にインデックスすることはありません.だから、私たちはまだ少し仕事をしなければなりません.
10、ビューをロードするときに、パッケージにビューファイルを探すように指定すればいいです.controllerのコードを変更するには、次のようにします.
1
2
3
4
5
public function getRegister()
{
return View::make('account::account.register');
// return "yes,use controller with route in packages!";
}
再びページをリフレッシュすると、私たちが期待していたページが現れ、controllerでaccountというコマンド空間が使われているのを見ました(具体的な意味はlaravel公式ドキュメントを見ることができます)、この空間はどこで指定されていますか?
11、AccountServiceProviderを見てみましょう.phpファイルのboot関数の$this->package('fstos/account');この行のコードは、実はこのパッケージのコマンド空間とバインドされたディレクトリを指定しています.神馬、太く見えません.滴です.この関数には2番目の(空間名)パラメータと3番目の(ディレクトリ)パラメータがありますが、この2つのパラメータにはデフォルト値があります.ネーミング空間のデフォルト値はaccountです.ディレクトリのデフォルト値はパッケージルートディレクトリの下のsrcディレクトリです.実は次のような書き方に相当します.
1
$this->package('fstos/account',"account",__DIR__.'/../../');
Ok、やってみてもいいよ~
エピソードは、7条から2回書きましたが、1回目の保存ではログイン時間が長すぎて保存が失われてしまいました.
これは私が最初に発表した場所です.http://www.fstos.com/index.php/2014-05-26-09-01-36/81-laravel-packages