我创建了一个新的Laravel框架。
我创建了一个名为PostsController的控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
use App\Http\Controllers\Controller;
class PostsController extends Controller
{
public function index()
{
$posts = Post::get();
return response()->success(compact('posts'));
}
}
然后我在文件api.php
中创建了一条路线:
Route::get('posts', 'PostsController@index');
我运行了命令
$ php artisan serve`
我测试了网址
localhost:8000/api/posts
发生此错误:
BadMethodCallException
Method Illuminate\Routing\ResponseFactory::success does not exist.
file: vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php
line: 100
throw new BadMethodCallException("Method {$class}::{$method} does not exist.");
我无法理解为什么会这样。请帮帮我。
答案 0 :(得分:1)
您正在调用未注册到responseFactory的宏函数。要使用成功方法,请创建自定义的responseServiceProvider并将其写入boot()
Response::macro('success',function($data){
return Response::json([
'data'=>$data,
]) ;
});
然后通过将您的类名称添加到称为提供程序的数组中,将ResponseServiceProvider注册到app.php。这是您添加到数组的方式
App\Providers\ResponseMacroServiceProvider::class