【问题标题】:how to send data from Blade view to controller in laravel to preform a post request如何将数据从 Blade 视图发送到 laravel 中的控制器以执行发布请求
【发布时间】:2020-03-24 02:18:24
【问题描述】:

我正在尝试收藏和不喜欢的帖子,如果单击它并将其插入收藏夹表中,如果再次单击它会从收藏夹表中删除它我将我的路线放在 web.php 文件中 控制器中应该在路由中调用的函数没有被调用我在那里插入dd() 方法来测试它所以我猜问题出在表单操作中而不是发送数据

<body>

...

@foreach ($posts as $post)
    <div class="column">
        @if ($post->showstar == true)
            <form action="/favorites/delete" method="post">
                <span class="foo fa fa-star checked"></span>
            </form>
        @endif

        <h2>{{$post->title}}</h2>
        <img src={{$post->url}} >
    </div>
@endforeach
</body>

<script>
    $(document).ready(function () {
        $("form").on("click", ".foo", function () {
            if ($(this).hasClass("checked")) {
                $(this).removeClass("checked");
            } else {
                $(this).addClass("checked");
            }
        });
    });
</script>

控制器:

class FavoritesController extends Controller
{
    public function index()
    {
        return view('Favorites', ['favs' => Favorite::where('user_id', '1')->get()]);
    }

    public function view(Request $request)
    {
        dd("hello");
        $fav = new Favorite();
        $fav->user_id = $request->get('userid');
        $fav->post_id = $request->get('postid');
        $fav->save();
    }

    public function delete(Request $request)
    {
        dd("bye");
        $fav = new Favorite();
        $dfav = $fav->where('id', $request->id);
        $dfav->delete();

        return view('favorites');
    }

    public function fetch(Request $request)
    {
        $fav = new Favorite();
        $favs = $fav->where('user_id', $request->user_id);

        return view('favorites', compact('favs'));
    }
}

路线:

Route::post('/favorites', 'FavoritesController@view');
Route::post('/favorites/delete', 'FavoritesController@delete');
Route::post('/favorites/fetch', 'FavoritesController@fetch');

【问题讨论】:

  • 您似乎没有提交任何内容。单击跨度不会以本机方式提交表单,即使提交了,表单内也没有任何数据或建议应该收藏/不收藏哪个帖子的操作。请您显示您的 web.php 文件中的路线以及您的控制器中的代码。
  • 完成了,我的问题是如何将数据发送到控制器
  • 你需要把@csrf放在form之后

标签: php jquery laravel laravel-blade


【解决方案1】:

您总是可以尝试简单的 html 表单提交。

<form action="/favorites/delete" method="post">
  @csrf
  <input type="hidden" name="id" value="{{ $post->id }}">
  <button>
    <span class="foo fa fa-star checked"></span>
  </button>
</form>

通过这种方式,您可以将隐藏的输入(在您的情况下为 post id)发送到控制器,控制器会将其删除。

【讨论】:

    【解决方案2】:

    您需要一个类似的函数 ajax,将数据发送到控制器:

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    
    $.ajax({
        url:'youUrl',
        data:{'youData':"YourValueData"},
        type:'post',
        success:  function (response) {
            alert(response);
        },
        error: function(x,xs,xt){
            alert(x);
    
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2016-07-14
      • 2019-11-13
      • 2021-04-07
      • 2020-08-26
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      相关资源
      最近更新 更多