Laravel 4使用if else语句更改表单

时间:2015-02-09 11:14:56

标签: forms laravel-4

我是Laravel的新手并尝试了一些东西。希望你们能指出我正确的方向。

我有一个表单在页面上添加类别,其中包含所有类别的概述。现在,当您要添加或编辑类别时,我将路由到同一页面。问题是,我希望正常的添加表单显示当url是category / add时,当url是category / edit / id时,我希望它显示要编辑的表单(使用表单模型绑定)。我将代码放在if else语句中,但它总是显示编辑表单,因此如果我想在url类别上添加新类别,我会收到错误,因为它是编辑表单。

这是index.bade.php中的代码:

@if(Request::url() === 'categories' )
   {{ Form::open(array('url' => 'category/add', 'class' => 'form-horizontal')) }}
@else
  {{ Form::model($category, array(
     'url' => 'category/edit/'.$category->id , 
     $category->id, 
     'class' => 'form-horizontal')) 
  }}
@endif

我的控制器:

public function index()
    {
        $categories = Category::get();
        $category = new Category();
        View::share('title', 'Mini Blog - Categories');

        $view = View::make('category.index')->with('category', $category);
        $view->categories = $categories;
        return $view;
    }

    public function edit($id)
    {
        $categories = Category::get();
        $category = Category::find($id);
        View::share('title', 'Mini Blog - Edit category');
        return View::make('category.index')->with(array('category' => $category, 'categories' => $categories));

    }

这是要走的路吗?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

有一种更好的方式。

在您的控制器中执行以下操作:

    public function create()
    {
        return View::make('create');
    }

    public function edit($id)
    {
        return View::make('edit')->withId($id);
    }

然后在你的观点中你有

<强> Create.blade.php

{{ Form::open(array('url' => 'category/add', 'class' => 'form-horizontal')) }}
    @include ('form')
{{ Form::close() }}

<强> Edit.blade.php

{{ Form::model($category, array('url' => 'category/edit/'.$category->id, category->id, 'class' => 'form-horizontal')) }}
    @include ('form')
{{ Form::close() }}

<强> Form.blade.php

   //Put your HTML form stuff here

答案 1 :(得分:0)

我建议您不依赖于模型变量来检查URL。 Ever Eloquent模型有一个属性exists,它告诉您模型是从数据库加载还是新实例。

@if( ! $category->exists)
   {{ Form::open(array('url' => 'category/add', 'class' => 'form-horizontal')) }}
@else
   {{ Form::model($category, array(
       'url' => 'category/edit/'.$category->id , 
       $category->id, 
       'class' => 'form-horizontal')) 
   }}
@endif

实际上你也可以将Form::model与空模型一起使用,所以你应该可以将它减少到这个:

{{ Form::model($category, array(
    'url' => ($category->exists ? 'category/edit/'.$category->id : 'category/add'),
    'class' => 'form-horizontal')) 
}}