【发布时间】:2021-02-23 19:54:40
【问题描述】:
所以我有两个模型 User 和 File,它们以一对多的关系连接。
我已经对 API 路由和控制器进行了排序,以索引所有用户、显示特定用户并索引该特定用户上传的所有文件。我不知道如何编写允许此路由 127.0.0.1:8001/api/2/files/1 显示第二个用户上传的第一个文件的逻辑。所以/2(seconduser)/files(显示全部)/1(只显示1个文件)
这是我的 API 代码:
Route::group(["prefix" => "/"], function () {
Route::get("", [Users::class, "index"]); //show all users
Route::group(["prefix" => "{user}"], function () {
Route::get("", [Users::class, "show"]); //show specific user
Route::group(["prefix" => "/files"], function () {
Route::get("", [Files::class, "index"]); //show all files
Route::group(["prefix" => "{file}"], function () {
Route::get("", [Files::class, "show"]); //trying to show specific file
});
});
});
});
文件控制器
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\File;
class Files extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(User $user)
{
return $user->files;
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show(User $user, File $file)
{
}
}
用户控制器
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
class Users extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return User::all();
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show(User $user)
{
return $user;
}
}
【问题讨论】:
-
这是一种非常奇怪的方式来声明你的路由。
artisan route:list -c对这些路线显示什么?你也能澄清问题吗?你在找什么?return $file;? -
请编辑您的问题以包含此信息,不要将其放入 cmets。
-
我仍然不清楚问题是什么。您在 URL 中指定了一个文件 ID,该文件被放入
$file变量中。与用户相同。 -
用
Users::show()做同样的事情有什么问题??? -
这与您在此处显示的代码不一致,其中
$file是参数 2。
标签: php laravel api laravel-routing