如何在laravel中标识资源默认url?

如何在laravel中标识资源默认url?,laravel,url,cmd,routes,pretty-urls,Laravel,Url,Cmd,Routes,Pretty Urls,我正在为模型、迁移和资源控制器运行此命令 `php artisan make:model QuestionAnswer -mc -r` .. Laravel在资源控制器中告诉我 public function show(QuestionAnswer $questionAnswer) { // return $questionAnswer; } public function edit(QuestionAnswer $questionAnswer) { // retur

我正在为模型、迁移和资源控制器运行此命令

`php artisan make:model QuestionAnswer -mc -r` ..
Laravel在资源控制器中告诉我

public function show(QuestionAnswer $questionAnswer) {
        // return $questionAnswer;
 }
public function edit(QuestionAnswer $questionAnswer) {
    // return $questionAnswer;
}
public function update(Request $request, QuestionAnswer $questionAnswer){
  // return $questionAnswer;
}
如果我用
web.php

Route::resource('question-answer','QuestionAnswerController')
Route::resource('questionAnswer','QuestionAnswerController')
Route::resource('question_-answer','QuestionAnswerController')laravel解析路由模型绑定。。。
这意味着

示例作为一个

public function edit(QuestionAnswer $questionAnswer)
    {
        return $questionAnswer;  
    }
$questionAnswer
返回此url的对象
{{route('admin.questionAnswer.edit',$questionAnswer->id')}

但是如果我写在
web.php
Route::resource('faq','QuestionAnswerController')
laravel无法解析路由模型绑定

那意味着
$questionAnswer
为此url返回null
{{route('admin.faq.edit',$questionAnswer->id')}

同样在
显示
更新
功能
$questionAnswer返回空

用作
faq
url。。我需要更改
编辑功能
变量(
$faq
)。或者
Route::resource('faq','QuestionAnswerController')->参数(['faq'=>'questionAnswer'])I

但是这三个url
问答
问答
问答
默认工作

我在“laravel/framework”:“^6.0”(LTS)

问题

有没有可能找到我要写的确切url。。像
问题答案
。。或者有任何命令行


运行auth命令后<代码>php artisan路由:list
命令为我们提供所有路由列表。。当我创建model
Category
laravel创建表名
categories
并遵循语法规则时

我认为这是因为在您的方法中使用了依赖注入

试试这个

public function edit($id)
    {
        // return $questionAnswer;
        return view('backend.faq.edit',get_defined_vars());
    }
我怎么知道我需要写问题回答这个?默认情况下,它可以工作。。。当我写faq时,我需要修改编辑函数变量($faq)

我如何知道默认url(问题答案)是否有效..当php artisan route:list命令为我们提供所有路线列表。。当我 模型类别laravel创建表名类别并遵循语法 规则

想想看,我将创建20个模型,迁移和控制器的cmd。。。我不会更改编辑、显示和更新函数变量…如何知道20型号和控制器的默认url? Laravel是一个固执己见的框架。它遵循某些惯例

让我们了解一个路线部分

Route::match(
['PUT','PATCH'],
“/question-answer/{question-answer}”,
[QuestionAnswerController::类,“更新”]
)->名称('question-answers.update')
在上述路线中:

第一个参数:
['PUT','PATCH']
是路由将尝试为传入请求匹配的方法

第二个参数:'/question-answer/{questionAnswer}'是url,其中

/question-answer
是说资源名

{questionAnswer}
路由参数名称

第三个参数:
[QuestionAnswerController::class,'update']
是负责处理请求并提供响应的控制器和操作/方法

使用通过终端创建模型时

php artisan make:model QuestionAnswer-mc-r

它将为7个restful操作创建一个资源控制器,并将显示、编辑、更新和删除路由的方法参数名称作为模型名称的大小写,即
$questionAnswer

class QuestionAnswerController扩展控制器
{
公共功能展示(问答$问答){}
公共函数编辑(QuestionAnswer$QuestionAnswer){}
公共函数更新(Request$Request,questionresponse$questionresponse){}
公共函数删除(QuestionAnswer$QuestionAnswer){}
}
这意味着,如果您不打算更改控制器方法中的参数名称,那么您可以按如下方式定义路由,以获得隐式路由模型绑定的好处

//将生成资源名为questionAnswer的路由
//这不是一个好的做法
路由::资源('questionAnswer',QuestionAnswerController::类);
//或
Route::resource('question-answer',QuestionAnswerController::class)->参数([
“问题答案”=>“问题答案”
]);
//或
Route::resource('foo-bar',QuestionAnswerController::class)->参数([
“foo bar”=>“问题答案”
]);
RFC 3986将URL定义为URL的不同部分区分大小写。因为URL是区分大小写的,所以保持低调(小写)总是安全的,并且被认为是一个好的标准

如你所见,您可以将url资源命名为
foo bar
question-answer
而不是
questionAnswer
,但在通过
php artisan make:model questionAnswer-mc-r
生成控制器时,将路由参数名称保留为
questionAnswer
,以匹配Laravel约定,而无需更改控制器方法中的参数名称

Laravel是一个固执己见的框架,遵循某些惯例:

  • 路由参数名称('questionAnswer')必须与控制器方法($questionAnswer)中的参数名称匹配,隐式路由模型绑定才能工作

  • 通过artisan命令生成的控制器,其参数名称与模型名称相同

  • 通过
    Route::resource('posts',PostController::class)
    生成的路由创建的路由的资源名称等于方法的第一个参数,路由参数名称为第一个参数的单数

  • Route::resource()提供了
    class Example extends Model{
    
     public function getFooBarAttribute(){
        return "hello";
    }
    }
    
     $example = new Example();
     $example->foo_bar();
     $example->fooBar();
     // $example->foo-bar() is not working because - could be result of lexical minus