2015-09-14 53 views
2

我想顯示不同的輸出 - JSON或HTML。laravel 5根據路線返回HTML或JSON

我不能使用\Request::ajax()功能,因爲我只是得到正常的請求(JSON響應不是基於XHR請求)。

是否有可能通過不同的路線區分輸出?例如。檢查控制器是否由前綴爲「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); 
    } 

} 

//... 

我打開務實,簡單的解決方案。一定不能是路線解決方案,而是一種我不需要更改代碼的方法。

+0

你可以使用公認的答案:在[提問](HTTP:// stackoverflow.com/questions/32383038/sending-html-or-json-response-depending-on-the-client/323​​85528#32385528)。只需編輯中間件,以便它不檢查輸入中的「contentType」。 – BrokenBinary

回答

0

您可以使用接受通配符/佔位符的Request :: is()方法。 所以,你可以這樣做:

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

如果你有這樣每次你做一個迴應比你可以編寫處理,如果自定義響應宏,只是把數據作爲一個數組並返回該JSON或把這個給你的刀片視圖。

+0

這看起來很有趣,必須嘗試一下。自定義響應是我在切換後的下一個意圖。 – jerik

+0

我收到一個錯誤'未定義的變量:請求'。我如何正確訪問它? – jerik

+0

'如果(\ Request :: is('mob/*')){}'做了訣竅。我需要指定一些特殊的東西來使用'$ request-> is()'? – jerik