在laravel中使用不同的ID作为展示路线

时间:2018-07-03 09:25:00

标签: php sql laravel laravel-blade

显示路线适用于/ example / {id}。因此,当我创建id为1的产品时,show/1会向我展示该产品。

但是,我想为id设置一个唯一键,因此只有具有url的人才能查看它。唯一ID = 21J2 @ 29SAHAS198S,因此产品1将显示为/show/21J2@29SAHAS198S.

我尝试在迁移'key'中设置一个参数$random = str_random(40);,然后在表模型中将$ key设置为主键。这仍然行不通

4 个答案:

答案 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'

在您的产品型号中

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