gpt4 book ai didi

php - Laravel 5 返回 JSON 或 View 取决于是否使用 ajax

转载 作者:可可西里 更新时间:2023-11-01 12:16:43 26 4
gpt4 key购买 nike

我想知道是否有一种神奇的方法可以使用这种情况:

如果我通过 AJAX 请求调用页面, Controller 返回一个 JSON 对象,否则它返回一个 View ,我试图在我的所有 Controller 上执行此操作,而无需更改每个方法。

例如我知道我可以做到:

if (Request::ajax()) return compact($object1, $object2);
else return view('template', compact($object, $object2));

但我有很多 Controller /方法,我更愿意更改基本行为,而不是花时间更改所有这些。有什么想法吗?

最佳答案

最简单的方法是创建一个在所有 Controller 之间共享的方法。

示例:

这是所有其他 Controller 扩展的 Controller 类:

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;

abstract class Controller extends BaseController
{
protected function makeResponse($template, $objects = [])
{
if (\Request::ajax()) {
return json_encode($objects);
}

return view($template, $objects);
}
}

这是扩展它的 Controller 之一:

<?php namespace App\Http\Controllers;

class MyController extends Controller
{
public function index()
{
$object = new Object1;
$object2 = new Object2;

return $this->makeResponse($template, compact($object, $object2));
}
}

Laravel 5+ 更新

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

protected function makeResponse($request, $template, $data = [])
{
if ($request->ajax()) {
return response()->json($data);
}

return view($template, $data);
}
}
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyController extends Controller
{
public function index(Request $request)
{
$object = new Object1;
$object2 = new Object2;

return $this->makeResponse($request, $template, compact($object, $object2));
}
}

关于php - Laravel 5 返回 JSON 或 View 取决于是否使用 ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29868903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com