【问题标题】:Passing route parameter to controller Laravel 5将路由参数传递给控制器​​ Laravel 5
【发布时间】:2017-01-12 00:49:13
【问题描述】:

我正在尝试将路由参数传递给控制器​​,但出现此错误:Argument 2 passed to App\Http\Controllers\JurnalController::store() must be an instance of App\Http\Requests\JurnalRequest, none given

下面是代码..

路线:

Route::get('/edisi/{id}', 'JurnalController@store');

控制器:

public function store($id, JurnalRequest $request) {
            $input = $request->all();

            //Input PDF
            if ($request->hasFile('file')) {
                $input['file'] = $this->uploadPDF($request);
            }

            $jurnal = Edisi::findOrFail($id)->jurnal()->create($input);

            return redirect('jurnal');
        }

所以我的问题是如何正确传递路由参数?谢谢

新路线:

Route::get('/', function () {
    return view('pages/home');
});
Route::group(['middleware' => ['web']], function () {
    Route::get('edisi', 'EdisiController@index');
    Route::get('edisi/create', 'EdisiController@create');
    Route::get('edisi/{edisi}', 'EdisiController@show');
    Route::post('edisi', 'EdisiController@store');
    Route::get('edisi/{edisi]', 'EdisiController@edit');
    Route::patch('edisi/{edisi}', 'EdisiController@update');
    Route::delete('edisi/{edisi}', 'EdisiController@destroy');
});

Route::get('/edisi/{id}', 'JurnalController@storejurnal');

Route::group(['middleware' => ['web']], function () {
    Route::get('jurnal', 'JurnalController@index');
    Route::get('jurnal/create', 'JurnalController@create');
    Route::get('jurnal/{jurnal}', 'JurnalController@show');
    Route::post('jurnal', 'JurnalController@storejurnal');
    Route::get('jurnal/{jurnal}/edit', 'JurnalController@edit');
    Route::patch('jurnal/{jurnal}', 'JurnalController@update');
    Route::delete('jurnal/{jurnal}', 'JurnalController@destroy');
});

新的 storejunnal 方法:

public function storejurnal(JurnalRequest $request, $id) {
        $input = $request->all();

        //Input PDF
        if ($request->hasFile('file')) {
            $input['file'] = $this->uploadPDF($request);
        }

        //Insert data jurnal
        $jurnal = Edisi::findOrFail($id)->jurnal()->create($input);

        return redirect('jurnal');
    }

【问题讨论】:

  • 将 $id 作为第二个参数,将 $request 作为第一个参数
  • 试过了,但得到了这个错误:缺少 App\Http\Controllers\JurnalController::store() @Adamnick 的参数 2
  • 你在使用资源控制器吗?
  • 是的,我正在使用资源控制器

标签: laravel laravel-5


【解决方案1】:

当您使用资源控制器时,store 方法不接受除 Request 实例之外的任何其他参数。尝试更改方法名称或删除第二个参数。 store() 方法默认接受 post 请求而不是 get 请求。要么将你的路由放在资源控制器的顶部,要么更改方法名称。

Route::get('/edisi/{id}', 'JurnalController@store');
Route::resource('jurnals', 'JurnalController');

我希望这会有所帮助。

【讨论】:

  • 以前不知道这个,我现在试试,谢谢!但是我使用路由参数只是为了检索edisi id,如果有另一种方法可以不使用参数获取id,请告诉我
  • 尝试将方法名称更改为其他名称,即 storeJurnal 然后一切都会好起来的。
  • 我重新路由了一切,问题上显示的路线
  • 好的,等一下
  • 确切地说,我得到了这个错误:App\Http\Controllers\JurnalController::storejurnal() 缺少参数 2
【解决方案2】:

正确的格式是:

    public function store(JurnalRequest $request, $id) {
        // your code
    }

如果您收到 cmets 中建议的 Missing argument 2 之类的参数,则表示您没有正确生成路由,或者 url 不包含 id 段。

【讨论】:

  • 收到错误。这是我要路由的网址:{{ url('edisi/' . $edisi->id) }} 在浏览器中它看起来像这样:1mark/public/edisi/1 .. 所以我不'不知道我做错了什么:/
  • 这是完整的网址吗?它应该看起来像 domain.com/edisi/1 - 不确定那里的“公共” - 听起来你的整个应用程序没有真正正确配置
  • localhost/1mark/public/edisi/1 这是完整的网址。是的,也许,我仍然是编码的新手:D
  • 或者如果我使用虚拟主机,它看起来像这样:1mark.com/edisi/1
  • 如果你需要 1mark/public 在里面,确保你更新你的配置文件
猜你喜欢
  • 2016-05-16
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多