Laravel Undefined Offset:1 - 由路由引起

时间:2014-05-09 06:16:11

标签: php laravel laravel-4

尝试对/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)
    {
            //
    }

}

3 个答案:

答案 0 :(得分:8)

您需要指定方法。

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

请参阅命名路由示例: Laravel Docs

答案 1 :(得分:0)

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

<强>会展
在创建API时,坚持使用命名约定和模式是件好事。

<强>解决方案
您的路线可能更简单:api.yourdomain.com/api/subject?search=term1,term2。使用GET查询执行此操作会使其转到index()方法。在那里,您可以查看GET参数并进行搜索并返回。

检查这是否是在Laravel中制作API的最简洁,最真实的REST方式:

答案 2 :(得分:0)

在视图刀片php文件中访问空数组的索引处的对象时,我遇到了同样的错误。