2013-09-05 4 views
0

Je suis un débutant à Laravel. J'ai créé un blog simple. Dans la page qui répertorie les messages pour l'administrateur, j'ai mis un lien delete avec l'id de poste ci-joint en tant que paramètre.Action inconnue [PostController @ deletePost] en utilisant URL :: action() dans Laravel4

Ce lien est à une action appelée deletePost, vient d'écrire sa déclaration rien de plus.

Chaque fois que je avoir accès à la route public/admin/post, je reçois ce message:

Action inconnue [PostController @ deletePost].

Voilà ma classe de contrôleur:

class PostController extends BaseController { 

    public function listPosts(){ 
     $posts = Post::all(); 
     return View::make('admin.post.list')->with('posts' , $posts); 
    } 

    public function addPost(){ 
     $data = Input::all(); 
     $rules = array(
      'title' => 'required|min:3', 
      'body' => 'required|min:10', 
     ); 
     $validator = Validator::make($data, $rules); 

     if($validator->passes()){ 
      $post = new Post(); 
      $post->title = htmlentities(trim($data['title'])); 
      $post->body = strip_tags($data['body'], '<strong><pre>'); 
      $post->save(); 
      return View::make('admin.post.add')->with('message' , 'Post successfuly added.'); 
     } else { 
      return Redirect::to('admin/post/add')->withErrors($validator); 
     } 
    } 

    public function deletePost($id){ 
     return $id; 
    } 

} 

Et mes routes:

Route::group(array('prefix' => 'admin'), function(){ 
    Route::get('/' , function(){ 
     return View::make('admin.main')->with('title', 'Main'); 
    }); 

    Route::group(array('prefix' => 'post'), function(){ 
     Route::get('/', "[email protected]"); 
     Route::get('add', function(){ return View::make('admin.post.add'); }); 
     Route::post('add', "[email protected]"); 
    }); 
}); 

Et enfin la vue qui produit cette erreur:

@extends('layout.layout') 

@section('header') 

@stop 

@section('content') 
<h2>Main - Admin - Post Main menu</h2> 
<ul> 
    <li><a href="{{ url('admin/post/add') }}">Add</a></li>   
</ul> 

@if(isset($posts)) 
    @foreach($posts as $post) 
     <p>{{ $post->body }}</p> 
     <a href="{{ action('[email protected]', array('id' => $post->id)) }}">Delete</a> 
    @endforeach 
@endif 

<a href="{{ url('admin/') }}">Back</a> 
@stop 
+0

Vous n'avez pas créé un itinéraire pour une action deletePost –

Répondre

1

On dirait que vous devez Définir un itinéraire pour l'action deletePost. En supposant que votre URL est admin/post/delete/$id, essayez d'ajouter cela comme une nouvelle ligne pour votre groupe de poste routes.php:

Route::get('delete/{any}', "[email protected]"); 

Au lieu d'utiliser {{ action('[email protected]', array('id' => $post->id)) }} pour construire votre URL, vous pouvez utiliser link_to_action() aide dans votre vue de construire l'ensemble d'ancrage comprenant des balises HTML/attributs/etc:

{{ link_to_action('[email protected]', 'Delete', $parameters = array($post->id), $attributes = array()) }}

+0

très agréable, et merci pour la pointe 'de link_to_action', assez pratique. –

Questions connexes