@HeartOfProgrammer

Почему laravel не видит в контроллере функцию?

Есть контроллер BookController
В котором следующие функции
index(),create(),store(),show(),edit(),update(),destroy().
Все эти функции работают кроме функции test(). Не понимаю где может быть ошибка.
Вот сам весь код моего контроллера BookController:
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class BookController extends Controller
{
    public function index()
    {
        $allBooks = Book::all();

        return view('books.booklist', compact('allBooks'));
    }

    public function create()
    {
        return view('books.addbook');
    }


    public function store(Requests\PublishBookRequest $requestData)
    {
        $book = new Book;
        $book->title = $requestData['title'];
        $book->description = $requestData['description'];
        $book->author = $requestData['author'];
        $book->save();

        return redirect()->route('book.index');
    }

    public function show($id)
    {
        $book = Book::find($id);

        return view('books.showbook')->with('book', $book);
    }

    public function edit($id)
    {
        $book = Book::find($id);

        return view('books.editbook')->with('book', $book);
    }

    public function test(){
        return 'hello!';
    }

    public function update($id, PublishBookRequest $requestData)
    {
        $book->title = $requestData['title'];
        $book->description = $requestData['description'];
        $book->author = $requestData['author'];
        $book->save();

        return redirect()->route('book.index');

    }

    public function destroy($id)
    {
        Book::find($id)->delete();

        return redirect()->route('book.index');
    }
}


Мой routes:

Route::resource('book', 'BookController');
Route::get('book', 'BookController@index');
Route::get('book/create', 'BookController@create');
Route::post('book', 'BookController@store');
Route::get('book/{book}/edit', 'BookController@edit');
Route::put('book/{book}', 'BookController@update');
Route::delete('book/{book}', 'BookController@destroy');
Route::get('book/test', 'BookController@test');


Чувствую я не правильно указываю URL в routes, если это так, то как мне правильнее вписывать URL?
  • Вопрос задан
  • 723 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Route::get('book/test', 'BookController@test');
Это нужно до ресурса указывать, потому что урл 'book/test' попадает под правило get('book/{book}').

Route::get('book', 'BookController@index');
Route::get('book/create', 'BookController@create');
Route::post('book', 'BookController@store');
Route::get('book/{book}/edit', 'BookController@edit');
Route::put('book/{book}', 'BookController@update');
Route::delete('book/{book}', 'BookController@destroy');

Ну а это всё просто лишнее, раз ресурс объявлен.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы