在 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。这仍然不起作用
【问题讨论】:
为什么是在您的产品表中创建一个类似这样的文件 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 显示路线的主要内容,如果未能解决你的问题,请参考以下文章