2013-08-08 22 views
9

私は最初のプロジェクトをコーディングする前に、Laravel 4で作業を始めています。これは素晴らしい選択肢です。私の通常のアプローチがlaravelで可能かどうかを理解したいと思います。Laravel 4 - パッケージまたは "モジュール"?

は通常、私はこのような、/モジュールフォルダの下に分離バックエンドとフロントエンドのためにトライアドを保つ:laravelで

/modules 
     /backend 
       /config 
       /controllers 
       /models 
       /migrations 
       /ecc.. 
     /frontend (and so on...) 

私はこれを管理する方法が本当にわかりません。私はパッケージを試していますが、php artisan workbench me/mypackage --resourcesはフォルダ構造全体を構築しません...コントローラとモデルを置く場所とルートを設定する方法は?

私はこれがモジュールのようなシステムを可能にするためにlinkを見つけました。だから、ララベルの方法で物事を守るために私が従うべきアプローチは何ですか?まあ

答えて

13

、の始めましょう...

まず、私は職人を使ってAndreyco\Cartパッケージを作成しました。答えは
パッケージおよびそれの構造

|workbench 
|-andreyco 
|---cart 
|-----public 
|-----src 
|-------Andreyco 
|---------Cart 
|-------config 
|-------lang 
|-------migrations 
|-------views 
|-----tests 
|-----vendor 

、私は例として、この正確なパッケージを使用します。

そのフォルダworkbench/andreyco/cart/srcがアプリケーションフォルダであるとします。あなたがそうするなら、あなたは答えの大部分を知るべきです。どのようにセットアップルートに
A:: - >workbench/andreyco/cart/src/routes.phpファイルを作成します

Q(実際のアプリケーションでは、同様のパッケージです)。これは完了です。

Q:ちょうどそこcontrollersmodelsフォルダを作成:コントローラとモデル
Aを入れて
したがってTestControllerworkbench/andreyco/cart/src/controllers/TestController.phpファイルにあります。モデルと非常に同じです。
ディレクトリツリーは、私がTestController.phproutes.phpを作成し、あなたが見ることができるようにTestModel.php

// workbench/andreyco/cart/src/routes.php 
<?php 

Route::get('test', 'Andreyco\\Cart\\Controllers\\[email protected]'); 



// workbench/andreyco/cart/src/controllers/TestController.php 
<?php namespace Andreyco\Cart\Controllers; 

use Andreyco\Cart\Models\TestModel; 

class TestController extends \BaseController 
{ 
    public function index() 
    { 
     return TestModel::printCurrentLocation(__DIR__); 
    } 
} 



// workbench/andreyco/cart/src/models/TestModel.php 
<?php namespace Andreyco\Cart\Models; 

class TestModel extends \Eloquent 
{ 
    public static function printCurrentLocation($location) 
    { 
     return "Testing package controller, script is located at: {$location}"; 
    } 
} 

が、私は名前空間を使用するので、あなたがすべきこの

|workbench 
|-andreyco 
|---cart 
|-----public 
|-----src 
|-------Andreyco 
|---------Cart 
|-------config 
|-------controlers 
|-------lang 
|-------migrations 
|-------models 
|-------views 
|-----tests 
|-----vendor 

ようになります。
名前空間はあなたの人生を楽にします。

重要:クラスはこの後

// composer.json 
"autoload": { 
    "classmap": [ 
     ... 
     "workbench/andreyco/cart/src/controllers", 
     "workbench/andreyco/cart/src/models" 
    ] 
}, 

を自動的にロードすることができるように、それらのファイルを作成した後、あなたはcomposer dump-autoload -oコマンドを使用して変更をダンプし、composer.jsonファイルを更新する必要があります。

Q:だから、私はラーベルの方法で物事を維持するために従うべきアプローチは何ですか?
A:私の意見では、パッケージに固執する必要があります。少なくとも、私はそうだろう。それがLaravelが動作するように設計された方法です。

私はこれがあなたに役立つことを願っています。


ビューはここでは問題ありません。彼らはメインアプリパッケージのように動作します。パッケージのコントローラからビューを返す

// workbench/cart/src/view/foldername/viewname.blade.php 

<h1>Testing view file.</h1> 
{{ "Blade" }} syntax is parsed as well, no problem here. 

public function index() 
    { 
     return \View::make('cart::foldername.viewname'); 
    } 
+1

おかげさまアンドレイ非常に単純です。それは本当に役に立ちました!ルートは名前空間にする必要がありますが、二重スラッシュはなぜですか? – Luciano

+1

二重バックスラッシュは '\'文字をエスケープするために使用されます。私が間違っていれば、誰かが私を修正します。 Laravelはこれを正しく名前空間に変換します – Andreyco

+0

前のコメントで '\'文字をエスケープするのを忘れたようです。 – Andreyco

関連する問題