如何在会话Laravel中存储输入

时间:2018-10-26 12:29:18

标签: php laravel forms session

我是Laravel的新手,我在这里尝试将输入表单发布到会话中,但是它不起作用,我收到此错误而没有任何消息:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

我什么都没找到,在这里我共享一些代码。

我的控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Category;
use \App\Product;

class ShopController extends Controller
{
    public function index()
    {
        $categories = Category::with('products')->get();
        return view('shop.index', compact('categories'));
    }

    public function category($id)
    {
        $products = Category::find($id)->products;
        return view('shop.1', compact('products'));
    }

    public function addToShoppingCart(Request $request)
    {
        $request->session()->put('cart', 'id');
        $request->session()->put('cart', 'number');

        $request->session()->flash('status', 'Product is toegevoegd!');
        return redirect()->back();
    }
}

我的观点:

@extends('layouts.app')

@section('content')
    @if(Session::has('id', 'number'))
        <div class="alert alert-success">
            {{Session::get('id', 'number')}}
        </div>
    @endif
    @foreach ($products as $product)
        <ul>
            <li>{{ $product->name }}</li>
            <li>{{ $product->description }}</li>
            <li>{{ $product->price }}</li>
            <li>{{ $product->amount }}</li>
        </ul>
        <form method="post" action="{{url('categories\{id}')}}">
            @csrf
            <div class="col-md-4">
                <label for="number">Aantal:</label>
                <input type="number" name="number">

                <label for="id">Id:</label>
                <input type="text" id="id" name="id" value= {{$product->id}}>

                <button type="submit" class="btn btn-success">Add product</button>
            </div>
        </form>
    @endforeach
    {{var_dump(Session::get('cart'))}}

@endsection

我的路线:

Route::get('/shop', 'Shopcontroller@index')->name('shop');
Route::get('/categories/{id}', 'ShopController@category');
Route::get('/cart/{id}', 'ShopController@addToShoppingCart');

我希望有人能帮助我解决我的问题,以便在laravel会议上发表意见。

2 个答案:

答案 0 :(得分:5)

您正在尝试使用“获取”路线进行“发布”。您应将Route::get更改为Route::post

答案 1 :(得分:0)

首先,我建议您使用procedure_2方法。 X方法没有什么问题,但我只是使用route()方法。

所以让我们解决您的问题!

1.在路线中添加名称,并将ROUTE设置为POST而不是GET

url()

2.将您的路线作为动作传递给表单

route()

3.添加Route::get('/shop', 'Shopcontroller@index')->name('shop'); Route::post('/categories/{id}', 'ShopController@category')->name('category'); Route::get('/cart/{id}', 'ShopController@addToShoppingCart')->name('cart.add');

您的控制器缺少action="{{route('category',['id' => 'your_category_id_here'])}} 语句,请将其添加到控制器页面的顶部,以便您可以使用会话。