2

L4 Web サイトの routes.php でサブドメインを検出し、そのサブドメインの値をどこかに保存して、各コントローラーでその値にアクセスできるようにしたいと考えています。

どうやってやるの ?助けてください

4

4 に答える 4

8

このタイプのメソッドをルートに入れることができます。ただし、「app/filters.php」ファイルのフィルターには適していると思います。これを試して:

Route::filter('getSubdomain', function($route, $request) 
{
    $host = $request->getHost();
    $parts = explode('.', $host);
    $subdomain = $parts[0];

    // Store subdomain in session
    Session::put('subdomain', $subdomain);

});

次に、次のようにフィルターをルート (おそらくグループ ルート) に追加します。

Route::group(array('before' => 'getSubdomain'), function()
{
 ... add route stuff here ..
});

Laravel フィルターの使用方法の詳細については、こちらをご覧ください。

http://laravel.com/docs/routing#route-filters

于 2013-10-24T05:20:35.070 に答える
4

Request を使用して、どこでもドメインを取得できます。

そのため、BaseController を作成し、すべての拡張コントローラーで現在のドメインを取得するメソッドを追加します。

class BaseController extends Controller {

    public function getDomain()
    {
        return Request::getHost();
    }

}

そしてそれを使用します:

class PostsController extends BaseController {

    public function store()
    {
        $post = new Post;

        $post->domain_id = Domain::where('name', $this->getDomain())->first()->id;

        $post->save();
    }

}

もちろん、このコントローラーの例では、Domain モデルがあることを前提としています。

class Domain extends Eloquent {

    private $table = 'domains';

}

編集:

非常に正当な理由がない限り、ルートを使用したり、サブドメインをセッションに保存したりする必要はありません。これに本当に正当な理由がない限り、それは臭いです。Laravel のコードを見てください。Laravel のセッションだけが保存されています。

ヘルパー関数を作成できます。

app/helpers/functions.php ファイル (これは単なる例です) を作成し、このヘルパー関数をそこに追加します。

function getCurrentSubdomain()
{
    $domain = Config::get('app.domain');

    preg_match("/^(.*)(\.$domain)$/", Request::getHost(), $parts);

    return $parts[1];
}

app/config/app.php を開き、ドメイン構成を追加します。

return array(

    'domain' => 'myapp.com',

        ...
);

ファイルを composer.json の autoload セクションに追加します。

"autoload": {
    "classmap": [
        ...
    ],
    "files": [
         "app/helpers/functions.php"
    ]

}, 

その後、コントローラー、クラス、ルーターなど、どこでも使用できます。これを使用した前と同じ例を次に示します。

class PostsController extends BaseController {

    public function store()
    {
        $post = new Post;

        $post->domain_id = Domain::where('name', getCurrentSubdomain())->first()->id;

        $post->save();
    }

}

クラスとその Facade を作成することもできるので、Laravel のようにどこからでもこのクラスを呼び出すことができます。

Helper::getCurrentSubdomain();

または、クラスを作成して静的関数を作成するだけで同じことができます (テストしにくい)。

于 2013-10-23T12:56:57.797 に答える