将变量从刀片(视图)传递到路由或控制器

时间:2014-07-02 10:19:58

标签: php view laravel-4 controller blade

我想将所选项目的$ id传递给我的控制器进行更改。

它是我的index.blade.php(查看)代码

<table>
 @foreach($posts as $p)
<tr>
 <td>{{$p->title}}</td>
 <td>{{substr($p->body,0,120).'[...]'}}</td>

  <td>{{HTML::link('posts_show',' Preview',array($p->id))}}</td>
 <td>{{HTML::link('posts_edit','Edit',array($p->id))}}</td>
 <td>
{{Form::open(array('method'=>'DELETE','url'=>array('posts.delete',$p->id)))}}
 {{Form::submit('Delete')}}
 {{Form::close()}}
</td>
</tr>
@endforeach
</table>

但它没有将$ id传递给我的控制器方法。

谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

您需要做的是设置路线参数。你的路线应该是这样的。

 Route::get('post','postController@index');
 Route::get('posts_create',  function (){  return View::make('admin.newPost'); });
 Route::get('posts_show/{id}','postController@show');
 Route::get('posts_edit/{id}','postController@edit');
 Route::post('posts_delete/{id}','postController@destroy');

如果您想使用命名路由{{ Form::open(array('url' => route('posts.edit', $p->id))) }},则需要设置这样的名称。

 Route::post('posts_edit/{id}', array('uses' => 'postController@edit', 
'as' => 'posts.edit'));

您可以在routing中查看laravel official documentation

修改

目前,您的表单看起来就是这样。

{{ Form::open(array('url' => route('posts.edit', $post->id), 'method' => 'POST')) }}

在途中,

Route::post('posts_edit/{id}', array('uses' => 'postController@edit', 
'as' => 'posts.edit'));

在PostController中,

public function edit($id)
{
    // do something
}

我希望它可能有用。

答案 1 :(得分:0)

您的路线看起来名为posts.destroy,如果是这种情况,您应该使用route代替url作为参数

{{Form::open(array('method'=>'DELETE','route'=>array('posts.destroy',$p->id)))}}

答案 2 :(得分:0)

这是我的路线:

 Route::get('post','postController@index');
 Route::get('posts_create',  function (){  return View::make('admin.newPost'); });
 Route::get('posts_show','postController@show');
 Route::get('posts_edit','postController@edit');
 Route::post('posts_delete','postController@destroy');

这是我的postController:

class postController extends BaseController{

public function show($id){
    $post=Post::find($id);
    $date=$post->persian_date;
    return View::make('posts.show')->with('post',$post)->with('date',$date);
}

public function edit($id){

    $post=Post::find($id);
    if(is_null($post)){
        return Redirect::route('posts.index');
    }
return View::make('posts.edit')->with('post',$post);
}

public function update($id){
    $input=array_except(Input::all(),'_method');
    Post::find($id)->update($input);
    return Redirect::route('posts.index');

}

public function destroy($id)
{
    Post::find($id)->delete();
    return Redirect::route('posts.index');
}