Laravel 路由绑定模型未定义偏移量:9

     2023-02-16     243

关键词:

【中文标题】Laravel 路由绑定模型未定义偏移量:9【英文标题】:Laravel Route Binding Model Undefined offset: 9 【发布时间】:2018-06-12 19:47:07 【问题描述】:

我正在使用 laravel 5.2。我有一个名为 Book 的模型,然后尝试将路由绑定模型从我的控制器移动到 RouteServiceProvider.php

这是我将其移动到 RouteServiceProvider.php 之前的路由绑定模型

$book = Book::findOrFail($id);

之后(在我的 RouteServiceProvider.php 中)

$router->model('book', 'App\Book');

在我将它移动到 RouteServiceProvider 之前它可以正常工作,但现在它每次尝试更新时都会给我一个错误,(创建和存储工作正常)。

它未能更新数据库的输入,但是当我尝试在我的规则顶部使用dd($this->method()); 进行调试时,它显示“PATCH”

错误是Undefined offset: 9 ...framework\src\Illuminate\Validation\Validator.php line 1461: $extra[$segments[$i]] = $segments[$i + 1];

我假设错误来自我的更新控制器 return view('dashboards.book', compact('book')); 或 mybe 来自补丁/更新方法的条件请求

这是完整的代码

控制器@更新

public function update(Book $book, BookRequest $request)

    //$book = Book::findOrFail($id);  move to the RouteServiceProvider

    $input = $request->all();

    $book->update($request->all());

    //return view('dashboards.book');
    return view('dashboards.book', compact('book'));


BookRequest.php

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class BookRequest extends Request

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    
        return true;
    

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    

        //$book = $this->route('book');

        //$this->route()->parameter('books');

        //dd($this->method());



        // Check Create or Update
        if ($this->method() == 'POST') 
            $label_rules = 'required|string|size:6|unique:books,label,';
            $isbn_rules = 'sometimes|string|size:10|unique:books,isbn,';
        

        else 
            $label_rules = 'required|string|size:6|unique:books,label,' .$this->route()->parameter('book'); 
            $isbn_rules = 'sometimes|string|size:10|unique:books,isbn,' .$this->route()->parameter('book');
        




        return [
            'judul'             => 'required|string|max:100',
            'label'             => $label_rules,
            'isbn'              => $isbn_rules,
            'tanggal_terbit'    => 'required|date',
            'status'            => 'required|in:tersedia,dipinjam,hilang,rusak',
            'id_penulis'        => 'required',
            'id_penerbit'       => 'required',
            'id_kategori'       => 'required',
        ];


    

RouteServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Routing\Router;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider

    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function boot(Router $router)
    
        //

        parent::boot($router);

        // route model binding
        $router->model('book', 'App\Book');
    

    /**
     * Define the routes for the application.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function map(Router $router)
    
        $router->group(['namespace' => $this->namespace], function ($router) 
            require app_path('Http/routes.php');
        );
    

错误

in Validator.php line 1461
at HandleExceptions->handleError('8', 'Undefined offset: 9', 'E:\YUDY\WEB PROJECT\CLIENTS\perpus lab\testroutemodelbinding\vendor\laravel\framework\src\Illuminate\Validation\Validator.php', '1461', array('segments' => array('label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"'), 'extra' => array('label:"099187"' => 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"' => 'status:"tersedia"', 'id_penerbit:1' => 'id_kategori:1', 'id_penulis:1' => 'created_at:"2018-01-02 00:01:26"'), 'count' => '9', 'i' => '8')) in Validator.php line 1461
at Validator->getExtraConditions(array('label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"')) in Validator.php line 1379
at Validator->getUniqueExtra(array('books', 'label', '"id":15', 'judul:"Fast And Furious"', 'label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"')) in Validator.php line 1338
at Validator->validateUnique('label', '099187', array('books', 'label', '"id":15', 'judul:"Fast And Furious"', 'label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"'), object(Validator)) in Validator.php line 485
at Validator->validate('label', 'Unique') in Validator.php line 425
at Validator->passes() in ValidatesWhenResolvedTrait.php line 24
at FormRequest->validate() in FoundationServiceProvider.php line 41
at FoundationServiceProvider->Illuminate\Foundation\Providers\closure(object(BookRequest), object(Application)) in Container.php line 1031
at Container->fireCallbackArray(object(BookRequest), array(object(Closure))) in Container.php line 994
at Container->fireResolvingCallbacks('App\Http\Requests\BookRequest', object(BookRequest)) in Container.php line 648
at Container->make('App\Http\Requests\BookRequest', array()) in Application.php line 697
at Application->make('App\Http\Requests\BookRequest') in RouteDependencyResolverTrait.php line 85
at ControllerDispatcher->transformDependency(object(ReflectionParameter), array('book' => object(Book)), array('book' => object(Book))) in RouteDependencyResolverTrait.php line 58
at ControllerDispatcher->resolveMethodDependencies(array('book' => object(Book)), object(ReflectionMethod)) in RouteDependencyResolverTrait.php line 41
at ControllerDispatcher->resolveClassMethodDependencies(array('book' => object(Book)), object(DashboardController), 'update') in ControllerDispatcher.php line 143
at ControllerDispatcher->call(object(DashboardController), object(Route), 'update') in ControllerDispatcher.php line 94
at ControllerDispatcher->Illuminate\Routing\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96
at ControllerDispatcher->callWithinStack(object(DashboardController), object(Route), object(Request), 'update') in ControllerDispatcher.php line 54
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\DashboardController', 'update') in Route.php line 174
at Route->runController(object(Request)) in Route.php line 140
at Route->run(object(Request)) in Router.php line 724
at Router->Illuminate\Routing\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\closure(object(Request)) in VerifyCsrfToken.php line 64
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\closure(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\closure(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\closure(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\closure(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 726
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\closure(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\closure(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53
at require_once('E:\YUDY\WEB PROJECT\CLIENTS\perpus lab\testroutemodelbinding\public\index.php') in server.php line 21

对错误有什么建议吗?

【问题讨论】:

您能否向我们提供问题的完整堆栈跟踪? @sisve 您好,感谢您的回复,请查看我的问题更新 为什么您的 $label_rules 和 $isbn_rules 在帖子中以逗号结尾? $this-&gt;route()-&gt;parameter('book') 可能会返回带有模型绑定的 Book 实例,而不是特定的 id。 我不确定,也许我在将控制器移动到 BookRequest 之前从控制器复制了规则。参考 laravel 文档 Forcing A Unique Rule To Ignore A Given ID: "'email' => 'unique:users,email_address,'.$user->id"。顺便说一句,我试图删除昏迷,但我把我扔到另一个错误SQLSTATE[HY093]: Invalid parameter number.. 【参考方案1】:

您的验证规则之前假定路线段是一个标识符。随着模型绑定现在处于活动状态,它会返回一个模型实例。

$label_rules = 'required|string|size:6|unique:books,label,' . 
                    $this->route()->parameter('book'); 

这可以在您的堆栈跟踪中看到。

in Validator.php line 1461
at HandleExceptions->handleError('8', 'Undefined offset: 9', 'E:\YUDY\WEB PROJECT\CLIENTS\perpuslab\testroutemodelbinding\vendor\laravel\framework\src\Illuminate\Validation\Validator.php', '1461', array('segments' => array('label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"'), 'extra' => array('label:"099187"' => 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"' => 'status:"tersedia"', 'id_penerbit:1' => 'id_kategori:1', 'id_penulis:1' => 'created_at:"2018-01-02 00:01:26"'), 'count' => '9', 'i' => '8')) in Validator.php line 1461
at Validator->getExtraConditions(array('label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"')) in Validator.php line 1379
at Validator->getUniqueExtra(array('books', 'label', '"id":15', 'judul:"Fast And Furious"', 'label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"')) in Validator.php line 1338
at Validator->validateUnique('label', '099187', array('books', 'label', '"id":15', 'judul:"Fast And Furious"', 'label:"099187"', 'isbn:"9918892810"', 'tanggal_terbit:"2018-02-10"', 'status:"tersedia"', 'id_penerbit:1', 'id_kategori:1', 'id_penulis:1', 'created_at:"2018-01-02 00:01:26"', 'updated_at:"2018-01-02 00:01:26"'), object(Validator)) in Validator.php line 485
at Validator->validate('label', 'Unique') in Validator.php line 425

唯一验证规则支持多个参数,而您尝试作为 id 传入的实际上是 "id":15'(第一个逗号之前的数组的初始部分),然后是主键列 'judul:"Fast And Furious"',然后是尝试将其余条目解析为额外条件。它们应该成对出现(column,value,column,value,...),但在您的情况下,数组中只剩下 7 个条目,一个奇数。因此失败。

【讨论】:

你的意思是我必须删除逗号? 不,我是说$this-&gt;route()-&gt;parameter('book') 返回一个 Book 实例,而不是您期望的标识符。如果需要,您必须从 Book 实例中读取 id。

当我尝试使用 Laravel 中的“别名”从数据库中获取值时如何修复“未定义的偏移量:0”

】当我尝试使用Laravel中的“别名”从数据库中获取值时如何修复“未定义的偏移量:0”【英文标题】:Howtofix"Undefinedoffset:0"whenItrying\'togetvaluefromdatabaseusing"aliases"inLaravel【发布时间】:2019-09-0901:02:28【问题描述】... 查看详情

Laravel - 使用 json 字段自定义路由模型绑定中的键

】Laravel-使用json字段自定义路由模型绑定中的键【英文标题】:Laravel-Customizethekeyintheroutemodelbindingwithjsonfield【发布时间】:2022-01-2112:59:08【问题描述】:我想自定义路由模型绑定中的键,我做了这样的事情-useApp\\Models\\Post;Route::... 查看详情

遍历关系时出现“未定义的偏移量 0”

...时间】:2017-09-1506:37:00【问题描述】:我的系统中有两个模型,Patent和PatentApplicant。PatentApplicant迁移定义了外键:$table->integer(\'patent_id\')->unsigned();$ta 查看详情

Laravel 路由模型绑定 - Laravel 5.7

】Laravel路由模型绑定-Laravel5.7【英文标题】:LaravelRouteModelBinding-Laravel5.7【发布时间】:2021-05-2423:34:24【问题描述】:我正在尝试使用Laravel的路由模型绑定。我在RoutesServiceProvider中设置了一个绑定来执行一些自定义解析逻辑。这... 查看详情

Laravel 路由模型绑定与排序的急切加载?

】Laravel路由模型绑定与排序的急切加载?【英文标题】:Laravelroutemodelbindingwithsortedeagerloading?【发布时间】:2020-12-1610:39:48【问题描述】:我的产品也有cmets。这个cmets可以被投票,并且cmets也可以有子cmets。cmets通过在product模型... 查看详情

未定义的偏移量错误,但偏移量不是未定义的

】未定义的偏移量错误,但偏移量不是未定义的【英文标题】:Undefinedoffseterror,butoffsetisnotundefined【发布时间】:2011-03-1316:04:36【问题描述】:我明白了:Notice:Undefinedoffset:0在我的代码中,但是我可以print_r我想要获取的元素及其... 查看详情

Laravel 模型用户自定义绑定“/users/me/xxx”

】Laravel模型用户自定义绑定“/users/me/xxx”【英文标题】:Laravelmodelusercustombinding"/users/me/xxx"【发布时间】:2022-01-2307:25:13【问题描述】:我有类似用户绑定的路由Route::get(\'users/user/posts\',[PostController::class,\'index\']);Route::ge... 查看详情

未定义的偏移量:-1

】未定义的偏移量:-1【英文标题】:Undefinedoffset:-1【发布时间】:2022-01-0204:01:17【问题描述】:当我尝试获取动态输入标记的值并执行jquery函数时,我不仅没有得到输入的数字字符串值,而且一直得到一个Undefinedoffset:-1errorinLar... 查看详情

简单函数()中的php未定义偏移量

】简单函数()中的php未定义偏移量【英文标题】:phpUndefinedOffsetinsimplefunction()【发布时间】:2011-10-0514:08:13【问题描述】:我不确定为什么我会收到关于此问题的未定义偏移通知:<?php$numbers=array(\'1\',\'2\',\'3\');$total=0;for($i=0;... 查看详情

使用 Laravel 模型绑定模拟控制器测试

】使用Laravel模型绑定模拟控制器测试【英文标题】:MockingincontrollertestswithLaravelmodelbinding【发布时间】:2014-06-3018:52:26【问题描述】:我在我的路由中使用模型绑定将模型传递给我的控制器操作,并希望能够编写测试。如果测试... 查看详情

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

】“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP【英文标题】:"Notice:Undefinedvariable","Notice:Undefinedindex",and"Notice:Undefinedoffset"usingPHP【发布时间】:2022-01-1101:40:23【... 查看详情

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

】“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP【英文标题】:"Notice:Undefinedvariable","Notice:Undefinedindex",and"Notice:Undefinedoffset"usingPHP【发布时间】:2017-08-2717:03:14【... 查看详情

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

】“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP【英文标题】:"Notice:Undefinedvariable","Notice:Undefinedindex",and"Notice:Undefinedoffset"usingPHP【发布时间】:2022-01-0101:15:23【... 查看详情

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

】“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP【英文标题】:"Notice:Undefinedvariable","Notice:Undefinedindex",and"Notice:Undefinedoffset"usingPHP【发布时间】:2016-02-0401:09:04【... 查看详情

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

】“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP【英文标题】:"Notice:Undefinedvariable","Notice:Undefinedindex",and"Notice:Undefinedoffset"usingPHP【发布时间】:2017-09-2803:37:12【... 查看详情

“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用 PHP

】“注意:未定义的变量”、“注意:未定义的索引”和“注意:未定义的偏移量”使用PHP【英文标题】:"Notice:Undefinedvariable","Notice:Undefinedindex",and"Notice:Undefinedoffset"usingPHP【发布时间】:2015-12-0821:39:03【... 查看详情

注意:未定义的偏移量:0 in

】注意:未定义的偏移量:0in【英文标题】:Notice:Undefinedoffset:0in【发布时间】:2011-09-2619:59:29【问题描述】:我收到这个PHP错误,这是什么意思?Notice:Undefinedoffset:0inC:\\xampp\\htdocs\\mywebsite\\reddit_vote_tut\\src\\votes.phponline41从此代... 查看详情

数组检查未定义的偏移量php

】数组检查未定义的偏移量php【英文标题】:Arraycheckundefinedoffsetphp【发布时间】:2017-08-1913:22:21【问题描述】:我会试着解释一下。我有一个array:$arrayTime=array(0=>"07",1=>"09",3=>"13",4=>"15",5=>"17",6=>"19");这里可以看到没... 查看详情