2017-11-24 24 views
0

異なるモデルを使用して複数の異なるテーブルに挿入するために、コントローラで1つの関数を使用しています。コントローラモデルでは可変であることを意味します。コントローラで変数を使用したLaravel呼び出しモデル

このコードは完璧に動作しますが、構文が気に入らないので、モデル名の前に\App\というモデルを呼び出すために、str_replace以外の方法が必要であることは確かです。

\App\のないモデル名でのみ呼び出すと、ラベールエラーClass not foundが発生します。私はコントローラのファイルにuse \App\ModelNameと書いたが、それでも動作しない。

public function storeCommon(Request $request){ 
    $model = '"\App\"'. $request->model; 
    $model = str_replace ("\"", "", $model) ; 

    ........ 
    ........  

    $row['text'] = $request->text; 
    ........ 
    ........ 
    $common = $model::create($row); 
} 

答えて

1

私はむしろ、可能なモデルの配列を定義し、コード内で使用したいと思います。この方法は、あなたは不要なモデルのコールに対するあなたのコードを保護し、コースを外れ、あなたのコードが読めるくらいになります:

protected $possibleModels = [ 
    'Model1' => \App\Model1::class, 
    'Model2' => \App\Model2::class, 
    ... 
    ]; 

public function storeCommon(Request $request){ 
    if (!isset($this->possibleModels[$request->model])) { 
     abort(404); 
    } 
    $model = $this->possibleModels[$request->model]; 
    $row['text'] = $request->text; 
    ... 
    $common = $model::create($row); 
} 
+0

こんにちは、私よりも、それが原因で、この構文問題の配列から変数によってモデルを得ることについて考えていました不正な構文を削除するコードが多すぎると考えました。今私はそれもより保護的であることに気づいた、いいアイデアメイトはそれのために感謝:) –

関連する問題