Как сохранить ввод в сеансе Laravel

Я новичок в 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.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 133
2

Ответы 2

Вы пытаетесь «опубликовать», используя маршрут «получить». Вы должны заменить Route::get на Route::post

Изменил мой запрос $ на сеанс в моем сообщении, чтобы получить, но все еще получаю ту же ошибку

tasninta 26.10.2018 14:36

Я говорил о ваших маршрутах: Route::get('/categories/{id}', 'ShopController@category'); становится Route::post('/categories/{id}', 'ShopController@category');

lbrs 26.10.2018 14:38

Никакой ошибки, так что это здорово. Но мой var_dump не работает, мне нужно изменить его на {{var_dump(Session::get('number'))}}?

tasninta 26.10.2018 14:48

Прежде всего, я предлагаю вам использовать метод route(). В методе url() нет ничего плохого, но я просто использую метод route().

Итак, давайте решим вашу проблему!

1. Добавьте имена к вашим маршрутам и установите ROUTE на POST вместо GET.

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

2. Передайте свой маршрут как действие в форму.

action = "{{route('category',['id' => 'your_category_id_here'])}}

3. Добавьте use Session;

В вашем контроллере отсутствует оператор use Session;, добавьте его вверху страницы контроллера, чтобы вы могли использовать сеансы.

Другие вопросы по теме