2017-10-19 16 views
0

を格納されていないが、ルートコードデータはここでLaravel 5.4にコントローラからデータベースに

Route::resource('/catalog', 'CatalogController'); 

CatalogController.php

public function store(Request $request) 
{ 
    $this->validate($request,[ 
     'cat_name'=>'required', 
     'cat_desc'=>'required', 
     'short_name'=>'required|min:0|integer', 
     'category_image'=>'required' 
    ]); 
    $categories=new Category; 

    $title=$request->get('cat_name'); 
    $desc=$request->get('cat_desc'); 
    $short_name=$request->get('short_name'); 
    $categories['cat_name']=$title; 
    $categories['cat_desc']=$desc; 
    $categories['short_name']=$short_name; 

    if($request->file('image')){ 
     $file=$request->file('image'); 
     $imgname=$file->getClientOriginalName(); 
     $file->move('images',$imgname); 
    } 

    $categories['category_image']=$imgname; 
    $categories->save(); 
    return redirect('/catalog'); 

}

コントローラコード内の任意の問題があります?データを取得する上で問題はなく、それぞれの行を返すことですでにチェックしています。しかし、私がデータを挿入しようとするたびに、それは同じ作成ページに戻ります。

と、これは create.blade.php

<div class="row"> 
    <div class="col-lg-20"> 
    <h2 style="color: lightslategrey; padding-left: 30px;">Create Category</h2> 

    {!!Form::open(['method'=>'POST', 'action'=>'[email protected]','files'=>true ])!!} 
     {{ csrf_field() }} 

       <div class="form-group row" style="padding-left: 60px; padding-top: 30px; width: 1350px;"> 
        <label for="cat_name" class="col-2 col-form-label">Category Title :</label> 
        <input class="form-control" name ="cat_name" type="text" placeholder="Enter Title" required> 
       </div> 

       <div class="form-group row" style="padding-left: 60px; padding-top: 10px; width: 1350px;"> 
        <label for="cat_desc" class="col-2 col-form-label">Category Description :</label> 
        <textarea class="form-control" name ="cat_desc" rows= "3" type="text" placeholder="Enter Description" required></textarea> 
       </div> 

       <div class="form-group row" style="padding-left: 60px; padding-top: 10px; width: 1350px;"> 
        <label for="short_name" class="col-2 col-form-label">Short Name</label> 
        <input class="form-control" name ="short_name" type="text" placeholder="Enter Short Name" required> 
       </div> 

       <div class="form-group row" style="padding-left: 60px; padding-top: 10px; width: 1350px;"> 
        <label for="image" class="col-2 col-form-label">Upload Image:</label> 
        <input class="form-control" name ="image" type="file" placeholder="Choose a Image" required> 
       </div> 
       <br/> 
       <br/> 
       <div class="form-group "> 
        <div class="col-lg-8 col-lg-offset-5"> 
         <button class = 'btn btn-success' type="submit" style="width: 200px;">Add Category</button> 
        </div> 
       </div> 
     {!! Form::close() !!} 
    </div> 
</div> 

のコードでは、plzは私を助けます。私は何が問題なのか分かりません。同じコードが他のコントローラで実行されています。しかし、これは動作していません。データベース接続とモデルに問題はありません。

+1

通常、戻るリダイレクトは検証の失敗を示します。ビュー内の '$ errors'変数を確認する必要があります。たとえば、 'short_name'が整数であることを確認しますか?もしあなたが 'short_number'と呼ぶのはなぜですか? – apokryfos

+0

@apokryfos short_nameは文字列です。それは実際にはタグのようなものです。同じコードが別のコントローラでうまく動作しているため、検証エラーはありません。 –

+1

''short_name' => '必須|分:0 |整数'、 'これを整数として検証しています。整数でない場合、検証は失敗します。検証に失敗した場合のデフォルトのアクションは、検証エラーで '$ errors'変数が設定されたフォームにリダイレクトされ、' session() - > old() 'に古い入力が読み込まれます。あなたはあなたが共有するコードでこれらをチェックしていません – apokryfos

答えて

0

モデルを配列として使用しようとしていますが、オブジェクトを使用しているため、矢印の表記が正しい方法です。 (https://laravel.com/docs/5.5/eloquent#retrieving-models

public function store(Request $request) 
{ 
    $this->validate($request,[ 
     'cat_name'=>'required', 
     'cat_desc'=>'required', 
     'short_name'=>'required|min:0|integer', 
     'category_image'=>'required' 
    ]); 

    $category = new Category; 
    $category->cat_name = $request->get('cat_name'); 
    $category->cat_desc = $request->get('cat_desc'); 
    $category->short_name = $request->get('short_name'); 


    $file = $request->file('image'); 
    $imageName = $file->getClientOriginalName(); 
    $file->move('images', $imgname); 
    $category->category_image = $imageName; 
    $category->save(); 

    return redirect('/catalog'); 
} 

私はあなたのためにスニペットを更新しても、それを少し簡略化してきました。あなたはあなたの変数名でより正確になるはずです。 $ categories(あなたのコード内)は単にカテゴリを表します。検証で必要とされるように宣言したときに、条件文の中で画像を処理する必要はありません。

+0

Eloquentモデルは 'ArrayAccess'インターフェースを実装していますので、$ categories [" something "] = $ value'は' $ categories-> something = $ value'とまったく同じことをする必要がありますどちらも別名setAttribute( "something"、$ value) ' – apokryfos

+0

に実装されました。ありがとう@Seb TM –

関連する問題