【问题标题】:Laravel Post Form dataLaravel 发布表单数据
【发布时间】:2015-04-29 13:35:41
【问题描述】:

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

这是我的表单控制器

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

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

【问题讨论】:

    标签: php laravel


    【解决方案1】:

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

    在创建方法中设置$this-&gt;name 之后。当您导航到创建的路由时,$this-&gt;name 不再设置,即使您将 return 语句移到 name 设置之后。

    您需要将数据保留在数据库/会话/缓存中,或从创建方法重定向到传递数据的创建方法。

    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');        
    }
    

    【讨论】:

    • $this->name 从未设置。因为这是死代码,因为他已经在他的控制器方法中返回了。
    【解决方案2】:
    $name = Input::get('name');
    

    或检查:

    echo var_dump($_POST); 
    

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-27
      • 1970-01-01
      • 2018-10-08
      • 2013-12-18
      • 2016-02-27
      • 2014-04-27
      • 1970-01-01
      • 2013-12-03
      • 2021-03-01
      相关资源
      最近更新 更多