2017-10-19 7 views
0

ici est le code de la routedonnées ne stocke pas dans la base de données du contrôleur 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'); 

}

est-il un problème dans le code du contrôleur ? Il n'y a aucun problème pour obtenir les données et je les ai déjà vérifiées en retournant chacune des lignes. Mais chaque fois que j'essaie d'insérer des données, il retourne à la même page de création.

et c'est le code de 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 me aider. Je n'ai aucune idée de quel est le problème. Le même code est en cours d'exécution dans un autre contrôleur. Mais cela ne fonctionne pas. Il n'y a aucun problème avec la connexion à la base de données et les modèles.

+1

La redirection indique généralement un échec de validation, vous devriez vérifier la variable '$ errors' dans votre vue. Par exemple, êtes-vous sûr que 'short_name' est un entier? Si oui, pourquoi ne l'appelez-vous pas 'short_number'? – apokryfos

+0

@apokryfos short_name est une chaîne de caractères. c'est comme une étiquette en fait. il n'y a pas d'erreur de validation .. parce que le même code fonctionne bien dans un autre contrôleur. –

+1

''short_name' => 'required | min: 0 | integer',' vous le validez en entier. Si ce n'est pas un entier, la validation échouera. Si la validation échoue, l'action par défaut est de rediriger vers le formulaire avec la variable '$ errors' remplie d'erreurs de validation et la' session() -> old() 'à remplir avec l'ancienne entrée. Vous ne les vérifiez pas dans le code que vous avez partagé – apokryfos

Répondre

0

Il semble que vous essayiez d'utiliser le modèle en tant que tableau, mais c'est un objet donc la notation en flèche est la bonne façon de procéder. (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'); 
} 

J'ai mis à jour votre extrait pour vous et aussi simplifié un peu. Vous devriez être plus précis avec vos noms de variable, par ex. Les catégories $ (dans votre code) représentent juste une catégorie. Le traitement de l'image ne doit pas nécessairement être fait dans une instruction de condition si elle est présente comme vous l'avez déclaré comme requis dans la validation.

+0

Les modèles éloquents implémentent l'interface 'ArrayAccess' donc' $ categories ["quelque chose"] = $ value' devrait faire exactement la même chose que '$ categories-> something = $ value' car ils sont tous les deux mis en œuvre à alias 'setAttribute (" quelque chose ", $ value)' – apokryfos

+0

essayé. merci @Seb TM –