Контроллер Laravel не обрабатывает параметры моего просмотра - PullRequest
0 голосов
/ 10 декабря 2018

Ребята, мне действительно нужна ваша помощь.

У меня есть этот контроллер:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Book;

class BookController extends Controller
{
    public function index()
    {
        $books = Book::orderBy('id', 'DESC')->paginate(5);
        return view('index', compact('books'));
    }

    public function create()
    {
        return view('add');
    }

    public function store(Request $request)
    {
        $this->validate($request, ['titulo' => 'required', 'npaginas' => 'required', 'edicion' => 'required', 'autor' => 'required', 'resumen'=>'required', 'precio'=>'required']);
        Book::create($request->all());
        return redirect()->route('index');
    }
    public function edit($id){


        return view('edit');
    }
    public function update(Request $request, $id)
    {
        $this->validate($request, ['titulo' => 'required', 'npaginas' => 'required', 'edicion' => 'required', 'autor' => 'required', 'resumen'=>'required', 'precio'=>'required']);
        book::find($id)->update($request->all());
        return redirect()->route('book.index');
    }

    public function destroy($id)
    {
        Book::find($id)->delete();
        return redirect()->route('index');
    }    
}

У меня есть представление, отправляющее id из book в edit и уничтожают функции.Однако я получаю только ошибку `404.

Это представление:

@if($books->count())
        @foreach($books as $book)
            <tr>
                <td>{{$book->titulo}}</td>
                <td>{{$book->npaginas}}</td>
                <td>{{$book->edicion}}</td>
                <td>{{$book->autor}}</td>
                <td>{{$book->resumen}}</td>
                <td>${{$book->precio}}</td>
                <td><a class="btn btn-primary btn-xs margen-boton"
                       href="{{ action('BookController@edit', $book->id) }}"><span
                            class="fas fa-pencil-alt"></span></a>
                </td>

                <td>
                    <form action="{{ action('BookController@destroy', $book->id )}}"
                          method="post">
                        {{csrf_field()}}
                        <input name="_method" type="hidden" value="DELETE">
                        <button class="btn btn-danger btn-xs margen-boton2" type="submit"><span
                                class="fas fa-trash-alt"></span></button>
                    </form>
                </td>
            </tr>
        @endforeach
    @else
        <tr>
            <td colspan="8" class="text-center"><p>Sin libros en el inventario</p></td>
        </tr>
    @endif

Правда в том, что я меняю имя переменной book, но она ничего не делает.

Я пытаюсь изменить имя контроллера на представление, потому что я думал, что была проблема.но это не работаетЯ действительно не знаю, что делать.

Если бы вы могли мне помочь, это было бы здорово

1 Ответ

0 голосов
/ 10 декабря 2018

В простом примере выполните следующие шаги

В вашем файле web.php используйте этот

Route::get("/edit/{id}", ["as" => "books.edit", "uses" => "BookController@edit"]);

После этого здесь в BookController код должен быть таким:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Book;

class BookController extends Controller
{
    public function index()
    {
        ...
    }

    public function create()
    {
        ...
    }

    public function store(Request $request)
    {
        ....
    }
    public function edit($id){


        return view('edit', [
                'id' => $id
            ]);
    }

}

И в вашем файле index.blade.php вам нужно создать ссылку, подобную этой

<a class="btn btn-primary btn-xs margen-boton"
    href="{{ route('books.edit', ['id' => $book->id]) }}">

    <span class="fas fa-pencil-alt"></span>
</a>

Это будет работать именно так, как вы хотите.

...