17853


laravel5.0で現在開発をしておりまして、表側と管理側はサブドメインを切り分けて運用を行おうと思っており、以下の様な記述をしております。  
（www.example.comが表側で、admin.example.comを管理側のURLとします）

[code]

    Route::group(['domain' => 'admin.example.com'], function() {
        // routingのコード
    });
    
[/code]

そこで、開発環境と本番環境のドメインが異なるため、現在上記の記述と

[code]

    Route::group(['domain' => 'admin.example1.net'], function() {
        // routingのコード
    });
    
[/code]

と2つ記述して運用しております。  
無名関数の中は全く同じにしております。

しかし当然ながら運用的には煩雑になってしまうため、無名関数内は共通化できればと思っております。  
そこで試しに、無名関数内の記述を

[code]

    $admin_route = function() {
        // routingのコード
    };
    
[/code]

といった形で切り出し、

[code]

    Route::group(['domain' => 'admin.example.com'], $admin_route);
    Route::group(['domain' => 'admin.example1.net'], $admin_route);
    
[/code]

と記述したところ、エラーとなり上手く動作しませんでした。

エラーメッセージは、

> ErrorException in Router.php line 345:  
>  Argument 2 passed to Illuminate\Routing\Router::group() must be an instance
> of Closure, null given, called in
> /vagrant/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php
> on line 213 and defined

になります。

どのように記述すれば動作するのか、もしくはそもそも共通化させることは無理なのか、ご教示頂けたらと思います。


CC BY-SA 3.0
2015-10-19T10:29:05.990
17817
2015-10-20T10:34:18.077
2015-10-19T11:16:11.783
9025
9025
question
php laravel
laravel5でroutes.php内の無名関数について


自己解決してしまいました。。

[code]

    function admin_route() {
        return function() {
            Route::get('/', 'HomeController@index');
        };
    }
    
    $admin_route = admin_route();
    
    Route::group(['domain' => 'admin.example.com'], $admin_route);
    Route::group(['domain' => 'admin.example1.net'], $admin_route);
    
[/code]

という記述で問題なく動作致しました。


CC BY-SA 3.0
2015-10-20T08:13:55.923
17847
2015-10-20T10:01:24.203
2015-10-20T10:01:24.203
9025
9025
17817
answer


エラーメッセージの内容としては「Router クラスの group() の第二引数は Closure 型でなければならないが、実際に渡されたのは null
だった」というものです。

※`Route` は [Facade](http://www.1x1.jp/blog/2014/03/laravel-facade-class.html)
なので、`Route::group(...)` と書くと Router クラスの group() が呼び出されます。

質問に書かれたコード片を見る限りでは正しく代入できているように思いますし、仮に文法に問題があれば別のエラーが出ていそうです。

新規プロジェクトを作成し、以下のように routes.php を変更してみましたが、問題なく動きました。

[code]

    $route = function () {
        Route::get('/', function () {
            return view('welcome');
        });
    };
    
    Route::group(['domain' => 'localhost'], $route);
    
[/code]


CC BY-SA 3.0
2015-10-20T10:34:18.077
17853
2015-10-20T10:34:18.077
8000
17817
answer