laravel 5根据路由返回HTML或JSON

时间:2015-09-14 20:34:47

标签: php laravel view routes laravel-5

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

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

是否有可能通过不同的路线区分输出?例如。检查控制器是否被前缀为“mob”的路由调用,然后根据该路径为输出创建一个开关?

应用/ HTTP / routes.php文件:

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

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

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

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

应用/ HTTP /控制器/ 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);
    }

}

//...

我愿意接受务实而简单的解决方案。不能是路由解决方案,而是我不需要改变太多代码的方式。

2 个答案:

答案 0 :(得分:0)

您可以使用接受通配符/占位符的Request :: is()方法。 所以你可以这样做:

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

如果每次做出响应时都有这样的响应,那么你可以编写一个自定义响应宏来处理if,只需将数据作为数组取出并将其作为json返回或将其提供给刀片视图。

答案 1 :(得分:0)

您可以将前缀作为参数传递,然后根据给定的前缀

在操作中处理您的业务

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