【发布时间】:2021-10-29 01:18:02
【问题描述】:
我正在构建一个 Laravel 应用,我需要使用如下所示的 URL:
/api/ads?page=Actuel&formatsQuery[]=side&formatsQuery[]=leaderboard&deviceQuery=mobile
我有 3 个参数(page、formatsQuery(作为数组)和 deviceQuery)。
您现在如何在路由和控制器中保存他以便在控制器的功能中具有正确的值?
我试过这个: 路线/api.php
//request to get ads for given parameters
Route::get('/ads', [MediaController::class, 'findAds']);
还有这个(MediaController.php):
public function findAds($page, $formatsQuery, $deviceQuery) {
echo $page;
if(sizeof($formatsQuery) <= 0 || sizeof($formatsQuery) > 3){
return $this->unvalidParametersError();
}
//transform format to position depending on deviceQuery
$position = [];
$res = [];
foreach ($formatsQuery as $format) {
$res = Media::where('position', $format)->inRandomOrder()->first()->union($res);
}
echo $res;
return $res;
}
然后我用这个测试它:
public function test_findAds()
{
$ads = Ad::factory()
->has(Media::factory()->count(3), 'medias')
->count(3)->create();
$response = $this->get('/api/ads?page=Actuel&formatsQuery[]=side&formatsQuery[]=leaderboard&deviceQuery=mobile');
$response->assertStatus(200);
}
【问题讨论】:
-
阅读documentation,这很容易解释...在您的情况下,您使用
get发送该URL(您应该这样做),所以您只需执行@987654327 @,它应该返回Actuel。用你所有的输入来做到这一点。对于数组,不要在名字后面写[]... -
你试过了吗?添加您的代码。您可以使用控制器中的 Request 对象读取查询。