【问题标题】:Laravel Undefined Offset: 1 - cause by routingLaravel 未定义偏移量:1 - 由路由引起
【发布时间】:2014-06-26 18:59:38
【问题描述】:

我在尝试向 /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)
    {
            //
    }

}

【问题讨论】:

  • 请向我们展示完整错误信息。
  • 您的search() 方法是否被调用。

标签: php laravel laravel-4


【解决方案1】:

你需要指定方法。

试试

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

查看命名路由示例: Laravel Docs

【讨论】:

  • 所以,Laravel 爆炸了'SubjectController@search',并尝试使用类似$arr[1] 的方式获取search,因此1 的未定义偏移量?你应该更彻底地解释你的答案;如果不知道解决问题的原因,该解决方案并不是很有帮助。
【解决方案2】:

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

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

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

检查这个以在 Laravel 中创建 API 的最干净和真正的 RESTful 方式:

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 2016-10-30
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 2018-12-16
      相关资源
      最近更新 更多