Laravel 5.4: 类 'App\Http\Controllers\Response' 未找到错误

12

我正在跟随Laracast的API教程,并尝试创建一个ApiController,所有其他控制器都要继承它。ApiController负责处理响应。

class ApiController extends Controller
{
    protected $statusCode;

    public function getStatusCode()
    {
        return $this->statusCode;
    }

    public function setStatusCode($statusCode)
    {
        $this->statusCode = $statusCode;
    }

    public function respondNotFound($message = 'Not Found!')
    {
        return Reponse::json([

            'error' => [
                'message' => $message,
                'status_code' => $this->getStatusCode()
            ]

        ]);
    }
}

我还有一个ReportController,它扩展了ApiController


class ReportController extends ApiController
{
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $report = Report::find($id);

        if (! $report ) {
            $this->respondNotFound(Report does not exist.');
        }

        return Response::json([
            'data'=> $this->ReportTransformer->transform($report)
        ], 200);
    }
}

当我尝试从ReportController调用respondNotFound方法时,我遇到了“Class 'App\Http\Controllers\Response' not found”错误。即使我在父类或子类中添加use Illuminate\Support\Facades\Response;,我仍然会遇到错误。如何解决?任何帮助将不胜感激。

1
尝试使用use Response;。或者使用response()助手- return response()->json(...); - ceejayoz
似乎您正在使用错误的命名空间导入Response类,请使用正确的命名空间。 - Mojtaba
使用语句是按文件的,即使在父类中已经包含它们,您仍然需要在子类中包含它们。要么在子类中添加外观使用语句,要么使用\Response - jfadich
1个回答

46

既然这是一个幌子,那就加上这个:

use Response;

或者使用完整的命名空间:

return \Response::json(...);

或者使用辅助工具:

return response()->json(...);

使用语句应该放在哪里? - Tartar
在你的文件顶部,在namespace声明之后。 - Parantap Parashar
1
@Tartar 在使用 Response 的文件顶部,即在 <?phpnamespace 行之后。你可能已经看到一个或多个 use 语句。 - ceejayoz
我将它放到父类和子类中。仍然得到相同的错误。 - Tartar
5
那是完全不同的问题,你说“上面这些解决方案都不行,都试过了”,但没有提到这些解决方案实际上解决了你描述的错误信息,这让人感到非常沮丧。 - ceejayoz
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接