Вот контроллер:
use FOS\RestBundle\Controller\Annotations as Rest;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
class AppsController extends AbstractController
{
/**
* @Rest\Get("/apps", name="apps")
*/
public function listAction(Request $request)
{
}
/**
* @Rest\Post("/apps", name="apps")
*/
public function postAction(Request $request)
{
}
}
Пока не было postAction все работало нормально, но когда я его добавил стал работать только postAction, а на listAction ругается "No route found for "GET /apps": Method Not Allowed (Allow: POST)". В чем дело? Мне надо чтобы они были по одному пути, но с разными методами.
Get, Post и прочие являются наследниками Route.
Указывать "name" для @Route необязательно, он генерируется автоматически.
В аннотации ошибка, достаточно удалить name или задать его уникальные значения для методов - всё заработает. Здесь описано как это устроено.
Не знаю как в symfony устроены маршруты, но попробую на примере laravel Объяснить.
В нём создаются маршруты по типу:
Route::get('/apps', 'AppsController@listAction');
Route::post('/apps', 'AppsController@postAction');
Тем самым когда Вы обращаетесь по get запросу вызывается первый метод, а по post второй! по uri /apps
Указывая @Rest\Post("/apps", name="apps") у вас в комментариях, вы определяете тип обращения! Ошибка которая у Вас возникла сообщает о том что:
Route::get(/apps, 'AppsController@listAction'); -- Вы не создали данный маршрут
Route::post(/apps, 'AppsController@postAction'); -- а этот создали
Решение. В файле указания маршрутов необходимо создать маршрут для GET
Продвижение своими сайтами как стратегия роста и независимости