2017-01-13 9 views
0

APIをビルドしていますが、APIレスポンスからVue.jsにテーブルなどを動的に作成しているため、ブレードhtmlをエスケープすることはできません。すべてのhtml文字をエスケープするLaravel 5グローバル・ミューテータ?

public function getNameAttribute($value) { 
    return strtolower($value); // example 
} 

しかし、我々は多くのモデル間で編集することができ、多くのフィールドがあります

は、私は私のモデルでは、私はミューテーターを使用することができます知っています。 htmlspecialchars()ですべての値を自動的に返す方法はありますか?

または、すべてのフィールドでhtmlspecialchars()を実行するAPI応答を変更する唯一のオプションはありますか?

ありがとうございました。

EDIT:Laravel Sparkを使用します。提案された答えは、新しいモデルを作成してそれをモデルに拡張することでしたが、Sparkモデルはすでに拡張クラスの長いリストを持っています。

答えて

0

Modelクラスを拡張して、すべてのモデルをModelの代わりにこのクラスに拡張することができます。クラスオーバーライドgetAttributeValueメソッドでは、

protected function getAttributeValue($key) 
{ 
    $value = $this->getAttributeFromArray($key); 

    if ($this->hasGetMutator($key)) { 
     return $this->mutateAttribute($key, $value); 
    } 

    if ($this->hasCast($key)) { 
     return $this->castAttribute($key, $value); 
    } 

    if (in_array($key, $this->getDates()) && ! is_null($value)) { 
     return $this->asDateTime($value); 
    } 

    return is_string($value) ? htmlspecialchars($value) : $value; 
} 
+0

これは私の最初の考えでした。私は戻って質問を編集しますが、実際にはLaravel Sparkを使用しています。私たちのカスタムモデルはこれで大丈夫ですが、Spark UserモデルはSparkUserを拡張して、Authenticatableなどを拡張しています。 – Lovelock

0

クラスを拡張します。代わりの解決法は形質を使うことです。

必要なモデルで

namespace App\Traits; 

trait ExtendedModel { 

    public function getNameAttribute($value) 
    { 
     return strtolower($value); // example 
    } 
} 

使用特性新しい形質を作成します。これは私がこれを行うだろうかある

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use App\Traits\ExtendedModel; 

class MyTable extends Model 
{ 
    use ExtendedModel; 
} 
0

私は形質を作って、それを望むすべてのモデルにこの形質を付けます。

この特性は、独自のロジックでgetAttributeValue($key)メソッドをオーバーライドします。このように:

trait CastAttributes { 

    public function getAttributeValue($value) 
    { 
     $value = $this->getAttributeValue($value); 
     return is_string($value) ? strtolower($this->getAttributeValue($value)) : $val; 
    } 
} 

あなたはほとんどすべてを絶対にキャストしたくないと言いました。

trait CastAttributes { 

    protected $toLower = []; 

    public function getAttributeValue($key) 
    { 
     $value = $this->getAttributeValue($key); 
     return in_array($key, $this->toLower) ? strtolower($value) : $value; 
    } 
} 

をそしてあなたが実際に小文字にキャストしたいすべての属性で$toLower配列をオーバーライドします。その場合、私はこれを行うだろう。

関連する問題