zeo*_*ega 9 php controller laravel laravel-5
我想知道是否有一种神奇的方法来使用这种情况:
如果我通过AJAX请求调用页面,控制器将返回一个JSON对象,否则它将返回一个视图,我试图在我的所有控制器上执行此操作而不更改每个方法.
例如,我知道我可以这样做:
if (Request::ajax()) return compact($object1, $object2);
else return view('template', compact($object, $object2));
Run Code Online (Sandbox Code Playgroud)
但我有很多控制器/方法,我更喜欢改变基本行为,而不是花时间改变所有这些.任何的想法 ?
最简单的方法是创建一个在所有控制器之间共享的方法.
这是所有其他控制器扩展的控制器类:
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是扩展它的控制器之一:
<?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));
}
}
Run Code Online (Sandbox Code Playgroud)
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
<?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));
}
}
Run Code Online (Sandbox Code Playgroud)