从Laravel API路由器查找控制器时出错

时间:2018-02-26 16:46:50

标签: laravel laravel-5 laravel-routing

我创建了一个新的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.");

我无法理解为什么会这样。请帮帮我。

1 个答案:

答案 0 :(得分:1)

您正在调用未注册到responseFactory的宏函数。要使用成功方法,请创建自定义的responseServiceProvider并将其写入boot()

Response::macro('success',function($data){
            return Response::json([
                'data'=>$data,
            ]) ;
        });

然后通过将您的类名称添加到称为提供程序的数组中,将ResponseServiceProvider注册到app.php。这是您添加到数组的方式

App\Providers\ResponseMacroServiceProvider::class