как сохранить и получить данные в кодировке base64 с использованием модели Laravel - PullRequest
1 голос
/ 25 мая 2020

Я делаю веб-приложение, используя Laravel 7 api. Я получаю данные с запросом json, который я должен сохранить в базе данных с кодировкой base64. Я храню данные таким образом:

public function create_request(Request $request)
    {
        $req_store = new Req;
        $req_store->text = base64_encode($request->input('requestInformations.text'));
        $req_store->save();
    }

Тогда, очевидно, чтобы получить данные столбца text, я должен каждый раз использовать base64_decode (). Мой вопрос: есть ли способ сказать Laravel, что каждый раз, когда я сохраняю новый запрос, столбец text должен автоматически кодироваться в base64, и каждый раз, когда я извлекаю эти данные из базы данных, поле text должно будет автоматически декодироваться base64? Полагаю, надо что-то написать в модели Req.php ...

Может помочь?

Ответы [ 2 ]

4 голосов
/ 25 мая 2020

Для этого вы должны использовать Аксессоры и Мутаторы. Перейдите по ссылке https://laravel.com/docs/7.x/eloquent-mutators#accessors -и-мутаторы

public function getTextAttribute($value)
{
    return base64_decode($value);
}

public function setTextAttribute($value)
{
    $this->attributes['text'] = base64_encode($value);
}
2 голосов
/ 25 мая 2020

Вы можете использовать кастомный литейщик

https://laravel.com/docs/7.x/eloquent-mutators#custom -касты

<?php

namespace App\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class Base64 implements CastsAttributes
{
    /**
     * Cast the given value.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  mixed  $value
     * @param  array  $attributes
     * @return mixed
     */
    public function get($model, $key, $value, $attributes)
    {
        return base64_decode($value);
    }

    /**
     * Prepare the given value for storage.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  array  $value
     * @param  array  $attributes
     * @return string
     */
    public function set($model, $key, $value, $attributes)
    {
        return base64_encode($value);
    }
}

И в вашей модели

use App\Casts\Base64;
/**
     * The attributes that should be cast.
     *
     * @var array
     */
    protected $casts = [
        'text' => Base64::class,
    ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...