php 在Laravel路由中,为什么要使用默认值,为什么要这样构造路由

sy5wg1nm  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(122)
Route::get('/atomic/{id}',[ApiController::class,'index'])->defaults('task', 'atomic');

为什么在这里使用默认值,什么是任务&原子,并且API控制器没有索引功能。2请正确解释此路径。
我是laravel的新手,我试着在谷歌上搜索解决方案,但没有结果

sdnqo3pr

sdnqo3pr1#

defaults方法有助于将额外的参数传递给controller,而不作为route params传递
作为一名后端工程师,你经常会被要求在不破坏当前路由结构的情况下生成与网站其他部分不兼容的URL模式。通常你会为你的内容创建一个所谓的"鼻涕虫"。一个简单的连字符分隔的字符串,在系统中是唯一的。一个典型的slug将从标题中生成,如"我的简单文章"成为一个slug my-simple-article。这样就有了'在系统中,每个帖子都有一个唯一的字符串。
如果你已经在你的系统中实现了这样的路径,你可能会有类似/post/{slug}的url,但是你现在知道这还不够好。你公司的营销团队或者SEO奇才希望它是/{slug},这是相当棘手的。你不能创建模式/{post-slug},因为它会混淆系统。什么是你有一个关于我们的页面或联系我们的页面,同样重要的url分别像/about-us和/contact-us.这里的问题是,路由系统可能会拿起/about-us链接,并认为这是一个后模型的鼻涕虫.在这一点上,Laravel将不会找到模型,而是抛出一个HTTP 404错误。
这就是路线上的"默认"方法被用来节省时间的地方。
如果我考虑一下你例子

Route::get('/atomic/{id}',[ApiController::class,'index'])->defaults('task', 'atomic');

在控制器中点击URL http://127.0.0.1:8002/atomic/1时,您将获得两个参数$id$task

public function index($id,$task){

   dump($task);
   dump($id);
}

上述的输出将是atomic1
defaults()方法只有键值对参数

/**
     * Set a default value for the route.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return $this
     */
    public function defaults($key, $value)
    {
        $this->defaults[$key] = $value;

        return $this;
    }

假设您想传递多个数组参数,那么使用setDefaults方法,如下所示

Route::get('/atomic/{id}',[ApiController::class,'index'])->setDefaults([
    'tasks'=> 'atomics',
    'postTitle'=>'post title goes here'
]);

然后在控制器中

public function index($id,$tasks,$postTitle){
        dump($tasks);
        dump($postTitle);
        dump($id);
 }

现在,如果您点击URL http://127.0.0.1:8002/atomic/1,则将打印

atomics
post title goes here
1

参考:The Power of Laravel’s Route ‘defaults’ for making root level SEO pages

相关问题