【问题标题】:laravel resource url depend on model?laravel 资源 url 取决于模型?
【发布时间】:2020-11-25 16:35:37
【问题描述】:

我正在为模型、迁移、资源控制器运行此命令。 php artisan make:model QuestionAnswer -mc -r ..

资源路径 Route::resource('faq','QuestionAnswerController');

我的编辑功能

public function edit(QuestionAnswer $questionAnswer)
    {
        // return $questionAnswer;
        return view('backend.faq.edit',get_defined_vars());
    }

编辑路线 {{route('admin.faq.edit',$questionAnswer->id)}}

编辑函数return $questionAnswer返回null

下图

当我更改模型名称等资源路径时 Route::resource('question-answer','QuestionAnswerController');

编辑函数return $questionAnswer 返回object 平均预期输出..

图片

问题

laravel 资源 url 取决于模型或其他东西? 如果Route::resource('faq','QuestionAnswerController'); 的某个地方我错了,请发表评论,我将删除我的问题..

【问题讨论】:

  • $questionAnswer 不是您控制器的正确参数,您会发现您的参数名称为 php artisan route:list
  • 给我一些检查
  • 或者,您可以将参数名称指定为Route::resource('faq','QuestionAnswerController')->parameters(['questionAnswer' => 'questionAnswer']);
  • @sta 我放了图片..请查看我的问题..
  • 如果您生成控制器php artisan make:model QuestionAnswer -mcr,那么您的控制器将使用参数正确创建,这里c用于控制器,m用于迁移,r用于资源

标签: laravel routes resources


【解决方案1】:

因为你的路由参数是question_answer,所以把控制器改成:

public function edit(QuestionAnswer $question_answer)
{
   dd($question_answer);
}

或者,你可以明确告诉资源路由参数应该命名为什么:

Route::resource('faq','QuestionAnswerController')
           ->parameters(['faq' => 'questionAnswer']);

现在您可以访问$questionAnswer 作为参数:

public function edit(QuestionAnswer $questionAnswer)
{
   dd($questionAnswer);
}

Naming Resource Route Parameters的官方文档可以找到here

【讨论】:

  • 任何关于此的文档 .. ->parameters(['questionAnswer' => 'questionAnswer']); ?
  • 是的,我把它附在我的答案laravel.com/docs/8.x/…
  • 它会像->parameters(['faq' => 'questionAnswer']); ..更新你的答案...
  • $questionAnswer$question_answer 都为我工作......
【解决方案2】:

Laravel resource 根据 url 示例生成婴儿车

Route::resource('faq','QuestionAnswerController');

// this will generate url like

Route::get('faq','QuestionAnswerController@index')->name('faq,index');
Route::post('faq','QuestionAnswerController@store')->name('faq,store');
Route::get('faq/{faq}','QuestionAnswerController@show')->name('faq,show');
Route::put('faq/{faq}','QuestionAnswerController@update')->name('faq,update');
Route::delete('faq/{faq}','QuestionAnswerController@destroy')->name('faq,destroy');

所以在控制器中你需要像这样接受faq

public function edit(QuestionAnswer $faq) // here $faq should match with route prams
{
        return $faq;
}

或者您可以将路由 url faq 更改为 questionAnswer 然后您的旧代码将起作用

参考链接https://laravel.com/docs/8.x/controllers#actions-handled-by-resource-controller

【讨论】:

  • Laravel 资源根据 url 示例生成婴儿车 你在哪里找到的?任何文件?我正在寻找学习目的...你能提供我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多