У меня есть проект с использованием Symfony 3.1, и у меня довольно сложное время на этапе развертывания.Symfony3 routing in production
Моя маршрутизация отлично работает в среде dev, используя встроенный сервер, но в производственной среде некоторые маршруты не работают. Они запускают ошибку 405, говоря, что метод не разрешен.
К примеру, один из маршрутов, которые не работают в (он стреляет 405, POST не допускается, допускается: "GET, HEAD"):
http POST http://domain/api/benefits
Другие работают отлично, такие как
http GET http://domain/api/benefits
Я попытался сбросить кэш через:
./bin/console cache:clear -e=prod --no-debug
Кроме того, если я призываю:
./bin/console debug:router --env=prod
Мои маршруты есть. Вы можете увидеть здесь: выводе
----------------------------- -------- -------- ------ -------------------------------
Name Method Scheme Host Path
----------------------------- -------- -------- ------ -------------------------------
api_read_benefit GET ANY ANY /api/benefits/{id}
api_delete_benefit DELETE ANY ANY /api/benefits/{id}
api_edit_benefit PUT ANY ANY /api/benefits/{id}
api_edit_benefit_picture POST ANY ANY /api/benefits/picture/{id}
api_edit_benefit_attachment POST ANY ANY /api/benefits/attachment/{id}
api_list_benefits GET ANY ANY /api/benefits/
api_new_benefits POST ANY ANY /api/benefits/
api_read_entity GET ANY ANY /api/entities/{id}
api_delete_entity DELETE ANY ANY /api/entities/{id}
api_list_entities GET ANY ANY /api/entities/
api_new_entities POST ANY ANY /api/entities/
logout ANY ANY ANY /logout
lang ANY ANY ANY /lang
app ANY ANY ANY /{url}
Мой routing.yml является:
api:
resource: "@AppBundle/routing.yml"
prefix: /api
logout:
path: /logout
lang:
path: /lang
defaults: {_controller: AppBundle:Default:lang}
app:
path: /{url}
requirements:
url: ".*"
defaults: {_controller: AppBundle:Default:index}
AppBundle/routing.yml:
api_benefits:
resource: "@AppBundle/Controller/benefits_routing.yml"
prefix: /benefits
api_entities:
resource: "@AppBundle/Controller/entities_routing.yml"
prefix: /entities
api_users:
resource: "@AppBundle/Controller/entities_routing.yml"
prefix: /entities
AppBundle/Controller/benefits_routing.yml:
api_read_benefit:
path: /{id}
defaults: {_controller: "AppBundle:Benefits:read" }
methods: [GET]
api_delete_benefit:
path: /{id}
defaults: {_controller: "AppBundle:Benefits:delete" }
methods: [DELETE]
api_edit_benefit:
path: /{id}
defaults: {_controller: "AppBundle:Benefits:edit" }
methods: [PUT]
api_edit_benefit_picture:
path: /picture/{id}
defaults: {_controller: "AppBundle:Benefits:pictureChange" }
methods: [POST]
api_edit_benefit_attachment:
path: /attachment/{id}
defaults: {_controller: "AppBundle:Benefits:attachmentChange" }
methods: [POST]
api_list_benefits:
path:/
defaults: {_controller: "AppBundle:Benefits:list" }
methods: [GET]
api_new_benefits:
path:/
defaults: {_controller: "AppBundle:Benefits:new" }
methods: [POST]
Любая ориентация была бы высокой hly оценили, так как я не могу найти проблему.
спасибо.
EDIT:
На всякий случай, я отправляю ВХост мой Апача:
<VirtualHost 51.254.96.87:443>
ServerName domain
SSLEngine On
SSLProxyEngine On
SSLCertificateFile /etc/letsencrypt/live/domain/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain/privkey.pem
DocumentRoot dir/web
<Directory dir/web>
AllowOverride All
Order allow,deny
Allow from all
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>
</Directory>
<Directory dir/web/bundles>
<IfModule mod_rewrite.c>
RewriteEngine Off
</IfModule>
</Directory>
LogLevel warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost 51.254.96.87:80>
ServerName domain
Redirect permanent/https://domain
</VirtualHost>
Похоже маршрут в вопросе определен для PUT не POST? – Cerad
Это не так, в отладке говорится: api_new_benefits POST ANY ANY/api/benefits/ Или я что-то упускаю? Во всяком случае, он отлично работает в dev. –
Вы правы. Как именно вы генерируете запрос? Ajax или html-форму. Html-формы действительно разработаны только для POST. http://symfony.com/doc/current/cookbook/routing/method_parameters.html – Cerad