【问题标题】:Php laravel using post method by controllerphp laravel 通过控制器使用 post 方法
【发布时间】:2016-04-30 19:46:13
【问题描述】:

我尝试通过 post 方法将值形式发送到控制器

这是我的观点,我该如何使用post方法发送

 <form class="form-horizontal" role="form">
    <div class="form-group">
      <label class="col-lg-3 control-label">Title:</label>
      <div class="col-lg-8">
        <input class="form-control" value='{{ $words->first()->title }}' type="text">
      </div>
    </div>
    <div class="form-group">
      <label class="col-lg-3 control-label">Meaning:</label>
      <div class="col-lg-8">
        <input class="form-control" value="{{ $words->first()->meaning }}" type="text">
      </div>
    </div>

    <div class="form-group">
      <label class="col-md-3 control-label"></label>
      <div class="col-md-8">
        <input class="btn btn-primary" value="Save Changes" type="button">
        <span></span>
        <input class="btn btn-default" value="Cancel" type="reset">
      </div>
    </div>
  </form>

这里是控制器方法

public function postSaveedit($meaning){


}

控制器使用路由

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你应该阅读 Laravel 中的请求:https://laravel.com/docs/5.2/requests#accessing-the-request

    你需要把它传递给你的控制器

    public function postSaveedit(Request $request) {
        $input = $request->input();
        $foo = $input['foo'];
        $bar = $input['bar'];
        $baz = $input['baz'];
    
    }
    

    【讨论】:

    • 如果我发送 2 或 3 个参数我如何处理方法
    • @NonBrazilian 您可以发送任意数量的参数......它们都将在请求中可用。更新答案
    • ok 另一个问题,我如何更新我的雄辩对象 ex.$words = Word::where('title', $var)->get();选择对象
    • 您的所有字段都将出现在您的请求中,但请确保您的可填写字段中有这些字段以保存到数据库中。
    • @NonBrazilian 要获取 eloquent 模型的单个实例而不是集合,请使用 first(),如下所示:Word::where('title', $var)-&gt;first()
    【解决方案2】:

    在 Laravel 5.2 中,您可以使用 request() 辅助方法来解决您的问题... 这就是你可以做到的......

    Routes 文件应该是这样的(确保这个路由应该是 post 类型)

    Route::post('/myurl', 'Controllername@postSaveEdit')->name('postSaveEdit');
    

    表单文件应该是这样的,还请在表单中指定输入字段名称,以便您可以通过它们指定的名称在控制器中获取它们(如 - 标题,含义 - 见下面的代码)...

    <form class="form-horizontal" action="{{ route('postSaveEdit') }}" method="POST" role="form">
      <div class="form-group">
        <label class="col-lg-3 control-label">Title:</label>
        <div class="col-lg-8">
          <input class="form-control" name="title" value='{{ $words->first()->title }}' type="text">
        </div>
      </div>
      <div class="form-group">
        <label class="col-lg-3 control-label">Meaning:</label>
        <div class="col-lg-8">
          <input class="form-control" name="meaning" value="{{ $words->first()->meaning }}" type="text">
        </div>
      </div>
    
      <div class="form-group">
        <label class="col-md-3 control-label"></label>
        <div class="col-md-8">
          <button class="btn btn-primary" type="submit">Save Changes</button>
          <span></span>
          <input class="btn btn-default" value="Cancel" type="reset">
        </div>
      </div>
    </form>
    

    和控制器应该是这样的......

    public function postSaveEdit() {
        // The inputs variable contains all your form's inputs in the form of array...
        $inputs = request()->all();
        /* 
            $inputs = array(
                'title' => 'title_value',
                'meaning' => 'meaning_value'
            )
        */
        // Wheareas you can also get them by using 'get' method on request method like this
        $title = request()->get('title');
        $meaning = request()->get('meaning');
    }
    

    【讨论】:

      【解决方案3】:

      你来了

      表格

      您必须在表单中添加方法 + 在输入中添加名称

      <form class="form-horizontal" role="form" method="POST">
          <!-- Add csrf token -->
          {!! csrf_field() !!}
      
          <div class="form-group">
            <label class="col-lg-3 control-label">Title:</label>
            <div class="col-lg-8">
              <input class="form-control" value='{{ $words->first()->title }}' type="text" name="input1">
            </div>
          </div>
          <div class="form-group">
            <label class="col-lg-3 control-label">Meaning:</label>
            <div class="col-lg-8">
              <input class="form-control" value="{{ $words->first()->meaning }}" type="text" name="input2">
            </div>
          </div>
      
          <div class="form-group">
            <label class="col-md-3 control-label"></label>
            <div class="col-md-8">
          <input class="btn btn-primary" type="submit" value="Save Changes"/>
              <span></span>
              <input class="btn btn-default" value="Cancel" type="reset">
            </div>
          </div>
        </form>
      

      控制器

      Use Word; // at the top of the class
      public function postSaveedit(Request $request) {
      $word= new Word; // if you are creating a new record
      $word= Word::find(1);// if you are updating a record
      
      $word->title = $request->input('input1');
      $word->meaning= $request->input('input2');
      $word->save();
      
      return view('home.blade.php');
      

      }

      路线文件

      Route::get('/myurl', 'Controllername@postSaveedit');
      

      :)

      【讨论】:

      • 我不明白 return view('test.blade.php')->with('test1', var1)->with('test2', var2);它如何更新到数据库
      • 这就是接下来会发生的事情,它只会返回一个带有输入的视图,错误编辑答案以更新数据库
      • 现在我尝试公共函数 postSaveedit(Request $request) { $var1 = $request->input('title'); //表单上的名称 $var2 = $request->input('meaning'); //表单上的名称 $words = User::where("title", $var1)->update(array("meaning" => $var2));返回视图('dict.watch',紧凑('words'));但它在 VerifyCsrfToken.php 第 46 行出现 TokenMismatchException:
      • 再次检查表格,答案由angad编辑(添加crsf令牌)
      • 确保在视图中编辑名称以匹配控制器
      猜你喜欢
      • 2016-07-09
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 2018-02-13
      • 1970-01-01
      • 2021-06-16
      • 2013-05-21
      相关资源
      最近更新 更多