Laravel Post Form数据

时间:2015-04-29 13:35:41

标签: php laravel

我无法从我的laravel应用程序中的表单中获取数据,并在同一个控制器中使用其他方法显示它。

这是我的FormController

class ForumController extends Controller {
+
+   private $name,
+           $description;
+
+   public function __construct() {
+       $this->middleware('auth');
+   }
+
+   /**
+    * Show the form for creating a new resource.
+    *
+    * @return Response
+    */
+   public function create()
+   {
+       return view('forum.create');        
+
+       $this->name = Input::post('name');  
+   }
+
+   /**
+    * Show the details of their input once its created
+    */
+   public function created()
+   {   
+       var_dump($this->name);
+   }
+}

这是我的Routes.php

Route::get('/group/create', 'ForumController@create');
+Route::post('/group/create', 'ForumController@created');

这是我的论坛创建视图。

@extends('app')
+
+@section('content')
+   
+   <div class="container">
+       <h1>Create a Forum</h1>
+       <hr>
+       
+       <div class="panel panel-default">
+           <div class="panel-heading">Create your own forum here!</div>
+           
+           <div class="panel-body">
+               @if (count($errors) > 0)
+                   <div class="alert alert-danger">
+                       <strong>Whoops!</strong>There were some problems with your input.<br><br>
+       <ul>
+           @foreach ($errors->all() as $error)
+               <li>{{ $error }}</li>
+           @endforeach
+       </ul>
+               @endif
+               <form class="form-horizontal" method="POST" action="{{ url('/group/create') }}">
+
+                   <input type="hidden" name="_token" value="{{ csrf_token() }}">  
+                   
+                   <div class="form-group">
+                       <label class="col-md-4 control-label">Name</label>
+                       <div class="col-md-6">
+                           <input type="text" class="form-control" name="name" min="1" max="20">
+                       </div>
+                   </div>
+
+                   <div class="form-group">
+                       <label class="col-md-4 control-label">Description</label>
+                       <div class="col-md-6">
+                           <input type="text" class="form-control" name="description" min="1" max="255">
+                       </div>
+                   </div>
+                   
+                   <div class="form-group">
+                       <div class="col-md-6 col-md-offset-4">
+                           <button type="submit" class="btn btn-primary">
+                               Create
+                           </button>
+                       </div>
+                   </div>
+               </form>
+           </div>
+       </div>  
+   </div>  
+@stop

有人可以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:4)

嗯,您的示例的失败点是,当您加载$this->name路由时,PHP不会持久created。事实上,正如评论者所说,$this->name永远不会被设置,因为你在定义之前有一个return语句。

在create方法中设置$this->name后。导航到创建的路径时,即使您在设置名称后移动return语句,也不再设置$this->name

您需要在数据库/会话/缓存中使用pesist数据,或者从create方法重定向到传递数据的创建方法。

public function create() 
{
    // Handle POST Here
    if (Input::has('name')) {
       $this->name = Input::get('name'); 

        // $this->name is redundant but even still...
        return Redirect::to('created', array('name' => $this->name));
    }

    return view('forum.create');        
}

答案 1 :(得分:1)

$name = Input::get('name');

或检查:

echo var_dump($_POST); 

您应该在您要发布的控制器方法中使用此代码。 如果您想要保存一个请求然后将其丢弃,您可以将值保存在session或flashdata中。而且您需要将视图重定向到某个视图或路径。

http://laravel.com/docs/4.2/session#flash-data