用超薄
问题描述:
确定使用路由模式下的路由工作正常,可以遍历项目的方法: 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'不会通过。
如何通过标识符正确处理路由模式?
答
正如我在评论中所说的,请让我们知道开发控制台在类别控制台和网络下的实例。
我不知道你为什么选择创建您的路线一样,但我会创建它们下面的方式(这也看起来更整洁):
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);
}
你能否错误消息,李关于在控制台+网络下chrome dev控制台所说的内容,因此我学会了以不同的方式创建这些路由,这可能不是错误,但如果您愿意,我仍然可以发布它们。此外,你是否按任何按钮访问每本书,或者你只是打开它们的网址?如果您创建了一个按钮来显示每本书的帖子,请按这个按钮的刀片 – utdev
在控制台日志中没有错误消息,我在这里发布了一个我找到的简单解决方案。 – blsn