【问题标题】:Create with arguments [Laravel 5.2]使用参数创建 [Laravel 5.2]
【发布时间】:2016-07-24 11:40:26
【问题描述】:

我想在创建操作中使用参数,但是当我尝试访问该操作时:

App\Http\Controllers\AdsDiagController::create() 缺少参数 1

这里是创建操作:

public function create($id){
    $record = TestRecord::findOrFail($id);
    return view("adsdiag.create", ["record" => $record]);
}

这里是操作的链接:

<a href="{!! action('AdsDiagController@create', $record->id ) !!}">Create</a>

还有路线:

Route::resource('adsdiag', 'AdsDiagController');

我是 laravel 的新手,我真的对路线感到困惑。感谢您的帮助。

【问题讨论】:

    标签: php laravel laravel-5 routes laravel-5.2


    【解决方案1】:

    要解决您的问题,您应该使用route.php

    Route::get('adsdiag/{id}/',AdsDiagController@create);
    

    原因

    当您调用Route::resource('adsdiag', 'AdsDiagController') 时,它会生成这些路由

    Route::get('adsdiag','AdsDiagController@index');
    Route::post('adsdiag','AdsDiagController@store');
    Route::get('adsdiag/create','AdsDiagController@create'); // you can see that create method doesn't have any arguments here.
    Route::get('adsdiag/show/{id}','AdsDiagController@show');
    Route::post('adsdiag/update','AdsDiagController@update');
    Route::get('adsdiag/edit/{id}','AdsDiagController@edit');
    Route::delete('adsdiag/destroy/{id}','AdsDiagController@destroy');
    

    由于Route::get('adsdiag/{id}/',AdsDiagController@create); 不是由Resourcce 生成的,因此您需要明确地包含在您的路由中。

    【讨论】:

      【解决方案2】:

      您需要将参数传递给数组中的action() 辅助方法,即使它只是一个参数:

      action('AdsDiagController@create', [$record->id])
      

      【讨论】:

        猜你喜欢
        • 2017-04-01
        • 2016-11-04
        • 1970-01-01
        • 2016-12-08
        • 2017-02-21
        • 2016-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多