我为Api端点提供了一个名为smsmo的表,模型类是Smsmo,其中包含以下字段:
Smsmo:
customer code varchar(30),
customer phone varchar(30),
customer name varchar(30),
customer address varchar(30),
customer hash varchar(300)在尝试保存或更新时,这些字段(电话、代码、名称)将被散列到散列字段中。
hash = name + code + phone我已经有了这些阿皮:
ApiController:
public function indexSmsmo()
{
$smsmos = Smsmo::all();
return response()->json(['success' => true,'data'=>$smsmos], $this->successStatus);
}
public function showSmsmo($id)
{
$smsmo = Smsmo::find($id);
if (is_null($smsmo)) {
return $this->sendError('SMS Outgoing not found.');
}
return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}
public function storeSmsmo(Request $request)
{
$smsmo = Smsmo::create($request->all());
return response()->json(['success' => $smsmo], $this-> successStatus);
}
public function editSmsmo($id)
{
$smsmo = Smsmo::find($id);
return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}
public function updateSmsmo(Request $request, $id)
{
$smsmo = Smsmo::find($id);
$smsmo = $smsmo->update($request->all());
return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}
public function deleteSmsmo($id)
{
$smsmo = Smsmo::find($id)->delete();
}那么,在发送端点之前,如何使用SHA512和上面的函数进行散列。
发布于 2019-06-11 14:11:56
PHP有一个内建 hash()函数,它涵盖了包括SHA-512在内的许多算法,因此类似的内容应该可以工作:
public function storeSmsmo(Request $request)
{
$smsmo = new Smsmo;
$smsmo->fill($request->all());
$smsmo->hash = hash('sha512', $smsmo->name.$smsmo->code.$smsmo->phone);
$smsmo->save();
return response()->json(['success' => $smsmo], $this-> successStatus);
}
public function updateSmsmo(Request $request, $id)
{
$smsmo = Smsmo::find($id);
$smsmo->fill($request->all());
$smsmo->hash = hash('sha512', $smsmo->name.$smsmo->code.$smsmo->phone);
$smsmo->save();
return response()->json(['success' => true,'data'=>$smsmo], $this->successStatus);
}或者,您可以通过扩展模型生命周期来提高代码的可重用性:
class Smsmo extends Model
{
...
public static function boot()
{
parent::boot();
static::saving(function ($model){
$model->hash = hash('sha512', $model->name.$model->code.$model->phone);
});
}
...
}简而言之,在保存static::saving()模型之前,您在Smsmo中定义的任何内容都将被执行。通过这种方法,您不必对控制器进行任何更改。
发布于 2019-06-11 14:29:33
您可以使用Laravel 进行此操作。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Smsmo extends Model
{
/**
* Set the hash attribute.
*
* @param string $value
* @return void
*/
public function setHashAttribute($value)
{
$hash = $this->phone.$this->code.$this->name;
$this->attributes['hash'] = hash('sha512', $hash, false);
}
}不需要改变控制器的功能。
这是有关更多细节的文档。https://laravel.com/docs/5.8/eloquent-mutators
https://stackoverflow.com/questions/56544840
复制相似问题