在 laravel 中使用不同的 ID 显示路线

Posted

技术标签:

【中文标题】在 laravel 中使用不同的 ID 显示路线【英文标题】:Use different ID for show route in laravel 【发布时间】:2018-12-11 13:20:21 【问题描述】:

显示路线适用于 /example/id。因此,当我创建一个 id = 1 的产品时,show/1 将向我展示该产品。

但是,我想为 id 创建一个唯一键,因此只有知道该 url 的人才能查看它。唯一 id = 21J2@29SAHAS198S 所以产品 1 将显示为 /show/21J2@29SAHAS198S.

我试图在迁移'key'中创建一个参数$random = str_random(40);,然后我将$key设置为表模型中的主ID。这仍然不起作用

【问题讨论】:

为什么是 标签? 【参考方案1】:

在您的产品表中创建一个类似这样的文件 code 并将其定义为唯一的,并在创建产品时在其中插入随机字符串,然后在您的 Product 模型中将此文件指定为这样的路由键。

产品型号

class Product extends Model 

  public function getRouteKeyName()
  
    return 'code';
   

现在在你的路线中定义show/product;

Route::get('show/product', 'ProductController@show');

控制器

class ProductController extends Controller 

  public function show(Request $request, App\Product $product)

     dd($product)
  

详情请查看https://laravel.com/docs/5.6/routing#implicit-binding中的隐式绑定

【讨论】:

谢谢,由于某种原因它不起作用。可以开始聊天吗? 啊我的错误应该是Route::get('show/product', 'ProductController@show');更新了我的答案 也许我使用了错误的创建控制器。也许我应该解释更多。用户创建产品。假设他们单击计算机类别按钮,然后它要求添加产品信息。每个类别一个产品。因此,当我创建产品时,产品/1 也对应于类别(计算机),因此两者是链接的 这里 1 是产品 ID 还是类别 ID?我认为这不一定是问题。你试过我的答案了吗? 如何更改以将代码显示为 id ?现在 href 是 product/$product->id ,它只显示旧代码。我需要它来显示新代码【参考方案2】:

例如,您可以在创建 URL 时使用 base64 编码对 ID 参数进行编码 示例/base64_encoded_id

当您在代码中使用该 ID 参数时,只需使用 base64 解码函数即可获取原始 ID。

【讨论】:

【参考方案3】:

您可以使用如下正则表达式约束:

Route::get('example/id', function ($id) //.. )->where('id', '/[a-z0-9A-Z@]*/');

有关 Laravel Route 的详细信息,请点击以下链接: https://laravel.com/docs/5.6/routing#route-parameters

【讨论】:

【参考方案4】:

如果要将字符串 $key 设置为主键,则必须设置

public $incrementing = false
protected $keyType = 'string'

在您的产品模型中

见https://laravel.com/docs/5.6/eloquent#Primary-Keys

【讨论】:

以上是关于在 laravel 中使用不同的 ID 显示路线的主要内容,如果未能解决你的问题,请参考以下文章

在我的Laravel项目中,我的路线可能会出现问题

在刀片视图中显示路线的结果(Laravel)

Laravel中的图像路线[关闭]

laravel 5.2 中特定路由的 web 中间件

Laravel 模板显示路线中的两个刀片模板

使用数据库在laravel中自动完成文本字段