1

私は Laravel が好きですが、ORM は好きではなく、もっと速度が必要なので、Lumen を使用しています。しかし、自分のコードを Lumen に移植したところ、ミドルウェアでできることがいくつか変わったことがわかりました...

ミドルウェアを使用して、リクエストに基づいて呼び出されるコントローラーメソッドを変更することにより、ajax リクエストをより「落ち着いた」ものにするのが好きです。Laravel 5で行ったことは次のとおりです。

public function handle($request, Closure $next)
{
    if($request->ajax() && $request->input("ajax")){

       // Controller methods like: ajaxEdit, ajaxUpdate, ajaxDelete...
       $ajaxMethod = "ajax".studly_case($request->input("ajax"));

       // Get the route's action
       $routeAction = $request->route()->getAction();

       // Replace index method call with ajax method
       $routeAction['uses'] = str_replace("@index", "@".$ajaxMethod, $routeAction['uses']);
       $routeAction['controller'] = str_replace("@index", "@".$ajaxMethod, $routeAction['controller']);

       // Update the route's action
       $request->route()->setAction($routeAction);
    }

    // Now controller->ajaxWhatever will be called instead of controller->index
    return $next($request);
}

Lumen で利用できないことgetActionに気付きました。setActionLumen で同様のことを達成するにはどうすればよいですか?

4

1 に答える 1

1

今のところ (この機能は追加されるロードマップにあるようです)、routes ファイルの先頭でこれを処理しました:

ルート.php

// ***** Pre-routing logic

// Convert all ajax calls with a request parameter "ajax" 
// to a corresponding controller's ajax method.
// For example, if request parameter "?ajax=edit" then 
// call method SomeController@ajaxEdit.
$indexAjax = "index";
$request = $app['request'];
if($request->ajax() && $request->input("ajax")){
    $indexAjax = "ajax".studly_case($request->input("ajax"));
}


// ***** Routes

$app->group(['namespace'=>'App\Http\Controllers\AdminPanel', 'prefix'=>'admin'], function($app) use ($indexAjax)
{
    $app->get('login/', ['as' => 'admin-login', 'uses' => 'Login\LoginController@'.$indexAjax]);
});

$app->group(['namespace'=>'App\Http\Controllers\AdminPanel', 'middleware'=>['auth'], 'prefix'=>'admin'], function($app) use ($indexAjax)
{
    $app->get('users/', ['as' => 'admin-users', 'uses' => 'Admin\UsersController@'.$indexAjax]);
    $app->get('logout/', ['as' => 'admin-logout', 'uses' => 'Login\LoginController@logout']);
});
于 2015-05-20T22:48:07.133 に答える