Laravel从表单传递变量

时间:2015-01-19 16:15:10

标签: php forms laravel

我是Laravel的新手,并且遵循超级基础教程。 然而,教程没有附带编辑记录部分,我试图扩展自己。

路线:

Route::controller('admin/products', 'ProductsController');

控制器:

class ProductsController extends BaseController
{ 

public function getUpdate($id)
    {
        $product = Product::find($id);

        if ($product) {
            $product->title = Input::get('title');
            $product->save();
            return Redirect::to('admin/products/index')->with('message', 'Product Updated');
        }
        return Redirect::to('admin/products/index')->with('message', 'Invalid Product');
}

..ECT...

我意识到控制器正在请求使用ID,但我无法弄清楚如何在表单发布/获取时将产品ID传递给它。

形式:

{{Form::open(array("url"=>"admin/products/update",'method' => 'get', 'files'=>true))}}
    <ul>
        <li>
            {{ Form::label('title', 'Title:') }}
            {{ Form::text('title') }}
            {{ Form::hidden('id', $product->id) }}

 ..ECT...

{{ Form::close() }}

我最初的想法是在表单URL中传递产品ID,如:

{{Form::open(array("url"=>"admin/products/update/{{product->id}}", 'files'=>true))}}

但也没有运气。

我得到的错误是:

Missing argument 1 for ProductsController::postUpdate()

有趣的是,如果我直接输入网址:

http://localhost/laravel/public/admin/products/update/3

它有效并且id 3的项目被改变了。

那么任何人都可以帮助并通知我如何通过表单传递id吗?

非常感谢

1 个答案:

答案 0 :(得分:5)

这里的第一个问题是:

{{Form::open(array("url"=>"admin/products/update/{{product->id}}", 'files'=>true))}}

{{product->id}}在两个方面有误:

  1. 应为{{$product->id}}
  2. 但它无论如何都行不通,因为{{Form :: ...}}内部的{{..}}将无法识别,因为它在字符串内,因此是字符串本身的一部分
  3. 你要么必须这样写:

    {{Form::open(array("url"=>"admin/products/update/".$product->id, 'files'=>true))}}
    

    或者在routes.php文件中为您的路线命名,并按照以下方式执行:

    {{Form::open(array('route' => array('route.name', $product->id, 'files'=>true)))}}
    

    我更喜欢第二种方式。

    您可能还想查看Form Model Bingin