显示路线适用于/ example / {id}。因此,当我创建id为1的产品时,show/1
会向我展示该产品。
但是,我想为id设置一个唯一键,因此只有具有url的人才能查看它。唯一ID = 21J2 @ 29SAHAS198S,因此产品1将显示为/show/21J2@29SAHAS198S.
我尝试在迁移'key'中设置一个参数$random = str_random(40);
,然后在表模型中将$ key设置为主键。这仍然行不通
答案 0 :(得分:1)
例如,在创建URL时,可以使用base64编码对ID参数进行编码 示例/ {base64_encoded_id} 。
当您在代码中使用该ID参数时,只需使用base64解码功能即可获取原始ID。
答案 1 :(得分:0)
在您的产品表中创建一个类似这样的文件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
中的隐式绑定答案 2 :(得分:0)
您可以使用正则表达式约束,如下所示:
Route::get('example/{id}', function ($id) {
//..
})->where('id', '/[a-z0-9A-Z@]*/');
有关带有正则表达式的Laravel Route的详细信息,请点击以下链接: https://laravel.com/docs/5.6/routing#route-parameters
答案 3 :(得分:0)
如果要将字符串$ key设置为主键,则必须设置
public $incrementing = false
protected $keyType = 'string'
在您的产品型号中