加密的路由为什么没有走 resolveRouteBinding ($value){} 方法呢

laravel 5.5 根据教程操作,访问 http://localhost/users/n8vgO967DB 不会自动调用 model 中的方法,难道要自己写个中间件实现?

vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php

...
public function resolveRouteBinding($value)
{
    return $this->where($this->getRouteKeyName(), $value)->first();
}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

只有控制器中注入相应的模型实例才会调用\Illuminate\Routing\Middleware\SubstituteBindings::class 中间件,可以将控制器代码如下修改:(注意:模型 app/User.php 需要引用性状 use App\Models\Traits\HashIdHelper; )

UserController.php

/**
     * 展示某个详情数据
     *
     * @param User $user
     *
     * @return \Illuminate\Http\Response
     */
    public function show(User $user)
    {
        return $this->out(200, $user);
    }

    public function out($code = 200, $data = [], $reason = 'success')
    {
        return response()->json(compact('code', 'reason', 'data'))->setEncodingOptions(JSON_UNESCAPED_UNICODE);
    }
5年前 评论
讨论数量: 5
liyu001989

那研究一下为什么没有调用啊

5年前 评论

@liyu001989 中间件通过参数查找模型的时候会调用模型的 resolveRouteBinding 方法,想知道你这个路由,还有控制器中如何调用 model 来查询的?
我的代码如下:

  1. routes/api.php 定义的路由:
    Route::resource('users', 'UserController');

  2. 控制器 UserController.php
    public function show($id)
    {
        $data = User::findOrFail($id);
        return $this->out(200, $data);
    }
  3. 模型 User.php 定义方法
    public function resolveRouteBinding($value)
    {
        if (!is_numeric($value)) {
            $value = current(Hashids::decode($value));
            if (!$value) {
                return;
            }
        }
        return parent::resolveRouteBinding($value);
    }
5年前 评论
liyu001989

你可以看看 bindings 中间件时如何运行的

5年前 评论

只有控制器中注入相应的模型实例才会调用\Illuminate\Routing\Middleware\SubstituteBindings::class 中间件,可以将控制器代码如下修改:(注意:模型 app/User.php 需要引用性状 use App\Models\Traits\HashIdHelper; )

UserController.php

/**
     * 展示某个详情数据
     *
     * @param User $user
     *
     * @return \Illuminate\Http\Response
     */
    public function show(User $user)
    {
        return $this->out(200, $user);
    }

    public function out($code = 200, $data = [], $reason = 'success')
    {
        return response()->json(compact('code', 'reason', 'data'))->setEncodingOptions(JSON_UNESCAPED_UNICODE);
    }
5年前 评论

@lisgroup 今天遇到了和楼主一样的问题,按楼主的思路和larbbs的源码最终解决了。另外补充一点:
如果不使用资源路由,需要对路由进行模型绑定,具体请参考手册 路由 => 路由模型绑定 部分。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!