使用Laravel 4中的参数生成URL :: route

时间:2014-09-18 18:41:21

标签: php laravel laravel-4

我无法获取&item项目ID'的参数。为我的表格动作网址生成我的路线的末尾。

我有一个页面设置来更新'现有项目。路线看起来像这样:

Route::get('/item/edit/{id}', array(
    'as' => 'item-edit',
    'uses' => 'ItemController@getEditItem',
));



Route::post('/item/edit/{id}', array(
    'as' => 'item-edit-post',
    'uses' => 'ItemController@postEditItem',
));

我的ItemController包含以下方法:

public function getEditItem($id) {

    $states = State::where('user_id', '=', Auth::user()->id)->get();

    $types = Type::where('user_id', '=', Auth::user()->id)->get();

    $item = Item::where('user_id', '=', Auth::user()->id)
            ->where('id', '=', $id)
            ->first();

    return View::make('items.edit')
            ->with('item', $item)
            ->with('states', $states)
            ->with('types', $types);

}

public function postEditItem($id) {

    // Validate input for Item changes
    $validator = Validator::make(Input::all(),
        array(
            'label'    => 'required|min:3|max:128|unique:items,label,null,id,user_id,' . Auth::user()->id,
            'type_id'  => 'required|integer',
            'state_id' => 'required|integer',
        )
    );

    if( $validator->fails() ) {

        return Redirect::route('item-edit')
               ->withErrors($validator)
               ->withInput();

    } else {

        $item               = Item::find($id);
        $item->label        = Input::get('label');
        $item->type_id      = Input::get('type_id');
        $item->state_id     = Input::get('state_id');
        $item->save();

        return Redirect::route('item-create')
               ->with('global', 'Your new item has been edited successfully!');

    }

}

最后一块拼图是items.edit视图:

@extends('layout.main')

@section('content')

    <form action="{{ URL::route('item-edit-post', $item->id) }}" method="post" class="form-horizontal form-bordered" autocomplete="off">
        <!-- some inputs and such -->
    </form>

@stop

此处生成的操作网址错误:

<form method="POST" action="http://manageitems.com/item/edit/%7Bid%7D" accept-charset="UTF-8" hello="hello" class="form-horizontal form-bordered">

出于某种原因,它正在逃离路线中的{id},而不是在路线末端添加实际物品ID。我尝试了几种不同的方法来阅读路线参数文档,但我还没有取得任何进展。我也尝试过使用Laravel作为建设者:

{{ Form::open(array('action' => 'ItemController@postEditItem', $item->id, 'class'=>'form-horizontal form-bordered')) }}

但这也做了同样的事情。我是Laravel的新手,所以这可能是一个我忽略的简单问题,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

在第二个参数中使用数组。

URL::route('item-edit-post', ['id' => $item->id])

或者route帮助器(我会使用它,在视图文件中更适合)。

route('item-edit-post', ['id' => $item->id])

答案 1 :(得分:1)

似乎$item->id返回null

当您在action中指定routeForm::open时,就是这样做的。

Form::open(['route' => ['some.route', $param]]);

Form::open(['action' => ['controller@action', $param]]);