Laravel未定义的偏移量:1 -由路由引起


Laravel Undefined Offset: 1 - cause by routing

我得到错误时,试图使后呼叫/api/subject/search

我想这是一个简单的语法错误,我错过了

我的api路由定义在

下面
Route::group(array('prefix' => 'api'), function()
{
    Route::post('resource/search', 'ResourceController');
    Route::resource('resource', 'ResourceController');

    Route::post('subject/search', 'SubjectController');
    Route::resource('subject', 'SubjectController');
    Route::resource('user', 'UserController');
    Route::controller('/session', 'SessionController');
    Route::post('/login', array('as' => 'session', 'uses' => 'SessionController@Store'));
});

我的控制器大部分是空的

class SubjectController extends 'BaseController 
{
    public function search()
    {
        $subjects = [];
        if((int)Input::get('grade_id') < 13 && (int)Input::get('grade_id') > 8)
            $subjects = Subject::where('name', 'like', '%HS%')->get();
        else
            $subjects = Subject::where('name', 'not like', '%HS%')->get();
        return Response::json([
            'success' => true,
            'subjects' => $subjects->toArray()
        ]);
    }
    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
            //
    }
    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
            //
    }
    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */
    public function store()
    {
            //
    }
    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
            //
    }
    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function edit($id)
    {
            //
    }
    /**
     * Update the specified resource in storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function update($id)
    {
            //
    }
    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function destroy($id)
    {
            //
    }
}

您需要指定方法。

Route::post('subject/search', 'SubjectController@search');

参见命名路由示例:Laravel文档

在您的情况下,我认为搜索不是由控制器解决以加载search()方法。您还发送了一个用于搜索功能的POST,我想最好是做一个GET请求,因为POST和PUT是用于存储数据的。

<

约定/strong>
在创建API时,坚持命名约定和模式是一件好事。

  • http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
<

解决方案/strong>
你的路线可以像这样简单:api.yourdomain.com/api/subject?search=term1,term2。使用GET查询执行此操作将使其转到index()方法。在那里你可以检查GET参数,做你的搜索的东西,并返回。

在Laravel中使用最干净和真正RESTful的方式来创建API:

  • 如何在Laravel中创建一个RESTful API以在我的BackboneJS应用程序中使用

我在访问viewblade php文件中空数组索引处的对象时遇到了相同的错误。