用超薄

问题描述:

确定使用路由模式下的路由工作正常,可以遍历项目的方法: http://localhost/library/api/books用超薄

$app->get('/api/books', 'Book:getBooks'); 

类:

class Book { 
    : 
    : 
    public function __construct($container) { 
     $this->container = $container; 
    }  

    public function getBooks($request, $response) { 
     : 
     : 
     echo '{"book": ' . json_encode($books) . '}';   
    } 

    public function getBook($id) { 
     echo json_encode($id); 
    } 
} 

调用与路由模式的方法鉴定'id'如下,不返回任何内容(空$ id): http://localhost/library/api/books/10

$app->get('/api/books/{id}', 'Book:getBook'); 

看来'id'不会通过。

如何通过标识符正确处理路由模式?

+0

你能否错误消息,李关于在控制台+网络下chrome dev控制台所说的内容,因此我学会了以不同的方式创建这些路由,这可能不是错误,但如果您愿意,我仍然可以发布它们。此外,你是否按任何按钮访问每本书,或者你只是打开它们的网址?如果您创建了一个按钮来显示每本书的帖子,请按这个按钮的刀片 – utdev

+0

在控制台日志中没有错误消息,我在这里发布了一个我找到的简单解决方案。 – blsn

正如我在评论中所说的,请让我们知道开发控制台在类别控制台和网络下的实例。

我不知道你为什么选择创建您的路线一样,但我会创建它们下面的方式(这也看起来更整洁):

Route::group(['prefix' => 'book'], function() 
{ 
    Route::get('/', ['as' => 'index', 'uses' => '[email protected]']); 
    Route::get('new', ['as' => 'new', 'uses' => '[email protected]']); 
    Route::get('show/{bookID}', ['as' => 'show', 'uses' => '[email protected]']); 
    Route::get('edit/{bookID}', ['as' => 'edit', 'uses' => '[email protected]']); 
    Route::post('create', ['as' => 'create', 'uses' => '[email protected]']); 
    Route::post('update', ['as' => 'update', 'uses' => '[email protected]']); 
    Route::delete('destroy/{deviceID}', ['as' => 'destroy', 'uses' => '[email protected]']); 
}); 

的BookController的应该是这样的,那么:

class BookController extends Controller 
{ 
    // this shows all books and adds a pagination of 15 items, which you can easily increase or decrease 
    public function index() 
    { 
     $books = DB::table('books')->paginate(15); 
     return view('books.index', compact('books'); 
    } 

    public function new() 
    { 
     $book = new Book; 

     return view('books.new', [ 
      'books' => $books, 
      'type' => 'new' 
     ]); 
    } 

    public function create(Request $request) 
    { 
     $this->validate($request, Book::$rules); // I put the rules inside of the Book Model, but you could just add them here aswell 

     $data = $request->all(); 

     $book = new Book(); 
     $book->fill($data); 

     if($book->save()) 
     { 
      return redirect()->route('new')->with('success', 'success.'); 
     } 
     else 
     { 
      return redirect()->route('new')->with('error', 'Error.')->withInput(); 
     } 

    public function edit(Request $request, $bookID = 0) 
    { 
     $books = Book::all(); 
     $newBook = new Book; 
     $book  = Book::find($bookID); 

     if(is_null($book)) 
     { 
      $books = Device::paginate(10); // paginate if you like to 
      return view('books.index', [ 
       'books' => $books, 
       'errorNoBook' => 'No BOok' 
      ]); 
     } 
     else 
     { 
      $bookID = $book->id; 
     } 

     return view('books.edit', [ 
      'allBooks' => $allBooks, 
      'new' => $new, 
      'book' => $book, 
     ]); 
    } 
} 

下面是一个简单可行的解决方案,我发现:

: 
: 
public function getBook($request, $response) { 
    $route = $request->getAttribute('route'); // route object 
    $id = $route->getArgument('id'); // route object identifier 
    $book = $this->db->table('books')->where('id', $id)->first(); 
    echo json_encode($book); 
}