laravel 5 return HTML 或 JSON 取决于路线

laravel 5 return HTML or JSON depending on route

我想显示不同的输出 - JSON 或 HTML。

我无法使用 \Request::ajax() 功能,因为我只是收到正常请求(JSON 响应不是基于 XHR-Requests)。

是否可以区分不同路由的输出?例如。检查控制器是否被前缀为 "mob" 的路由调用,然后基于此为输出创建一个开关?

app/Http/routes.php:

Route::group( ['prefix' => 'api'], function(  ) {

  Route::resource( 'activation', 'ActivationController' ); 
  //...
} 

Route::group( ['prefix' => 'mob'], function(  ) {

  Route::resource( 'activation', 'ActivationController' ); 
  //...
} 

app/Http/Controllers/ActivationController:

<?php namespace App\Http\Controllers;

use App\Activation;
use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;
class ActivationController extends Controller {

public function index()
{
    $activation = Activation::all(  );

    // switch to decide which output to show, based on the routes...
    if ($prefix == "mob") {
      return response()->view('template', compact($activation)); // not sure if it works this way
    } else {          
      return response()->json($activation);
    }

}

//...

我愿意接受实用且简单的解决方案。不能是路由解决方案,而是一种我不必更改太多代码的方法。

您可以使用接受 wildcards/placeholders 的 Request::is() 方法。 所以你可以这样做:

if($request->is('mob/*')) {
    // do your mob response
} else {
    // do the other response
}

如果你每次做响应时都有这个,那么你可以编写一个自定义响应宏来处理 if 并将数据作为数组 return 这个作为 json 或者给这个到您的 blade 视图。

您可以将前缀作为参数传递,然后根据给定的前缀在action中处理您的业务

REF:http://laravel.com/docs/5.1/routing#route-group-prefixes