登录后和注销后丢失当前本地语言
lost current local language after login and after logout
我可以正确切换我网站的语言,但是当我登录时,我在 url 中丢失了我当前的语言。例如登录前 http://test.bu/app_dev.php/en/admin/slideshow/ and after login i have this http://test.bu/app_dev.php/fr/admin/slideshow/
symfony2.7 始终采用语言环境:fr。我使用 FosUserBundle。我惊呆了,我发现我可以使用捆绑包来解决这个问题,但我想我可以通过编辑配置来解决这个问题。
登录后,我通过 default_target_path 重定向网站:slideshow_index 像这样
app_slideshow:
resource: "@AppBundle/Resources/config/routing/slideshow.yml"
prefix: /{_locale}/admin/slideshow
this is my config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: fr
framework:
#esi: ~
translator: { fallback: %locale% }
secret: '%secret%'
router:
resource: '%kernel.root_dir%/config/routing.yml'
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: '%locale%'
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
fragments: ~
http_method_override: true
# Twig Configuration
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: '%kernel.root_dir%/data/data.db3'
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
#path: '%database_path%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }
# app/config/config.yml
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: Gold\UserBundle\Entity\User
from_email:
address: "%mailer_user%"
sender_name: "%mailer_user%"
thanks Whosebug
您可以使用 JMSI18nRoutingBundle
处理语言环境 detection/switch
将所需的捆绑包添加到 composer.json:
"require": {
...
"jms/i18n-routing-bundle": "1.1.*",
"jms/translation-bundle": "1.1.*",
"friendsofsymfony/user-bundle": "1.3.*"
},
http://jmsyst.com/bundles/JMSI18nRoutingBundle/master/installation
JMS 路由包 Link https://github.com/schmittjoh/JMSI18nRoutingBundle
但在安装之前请先观看这个简短的视频教程。本教程帮助我理解了 fos 用户包和 url.
中的语言环境之间的问题
如果您不想使用 composer.json 文件安装 jms 路由包,您可以使用此命令安装它 php composer.phar require jms/i18n-routing-bundle "dev-master"
这是我的配置:
jms_i18n_routing:
default_locale: "%locale%"
locales: ["fr", "en"]
strategy: prefix_except_default
Security.yml:
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
require_previous_session: false
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: your_route_name_homepage
logout:
path: fos_user_security_logout
target: your_route_name_homepage
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
安装 Jms 路由包后。尝试执行命令 debug/router
(symfony 3) 并观察路由名称和前缀。
我可以正确切换我网站的语言,但是当我登录时,我在 url 中丢失了我当前的语言。例如登录前 http://test.bu/app_dev.php/en/admin/slideshow/ and after login i have this http://test.bu/app_dev.php/fr/admin/slideshow/ symfony2.7 始终采用语言环境:fr。我使用 FosUserBundle。我惊呆了,我发现我可以使用捆绑包来解决这个问题,但我想我可以通过编辑配置来解决这个问题。 登录后,我通过 default_target_path 重定向网站:slideshow_index 像这样
app_slideshow:
resource: "@AppBundle/Resources/config/routing/slideshow.yml"
prefix: /{_locale}/admin/slideshow
this is my config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
locale: fr
framework:
#esi: ~
translator: { fallback: %locale% }
secret: '%secret%'
router:
resource: '%kernel.root_dir%/config/routing.yml'
strict_requirements: ~
form: ~
csrf_protection: ~
validation: { enable_annotations: true }
#serializer: { enable_annotations: true }
templating:
engines: ['twig']
default_locale: '%locale%'
trusted_hosts: ~
trusted_proxies: ~
session:
# handler_id set to null will use default session handler from php.ini
handler_id: ~
fragments: ~
http_method_override: true
# Twig Configuration
twig:
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: '%kernel.root_dir%/data/data.db3'
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
#path: '%database_path%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
spool: { type: memory }
# app/config/config.yml
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: Gold\UserBundle\Entity\User
from_email:
address: "%mailer_user%"
sender_name: "%mailer_user%"
thanks Whosebug
您可以使用 JMSI18nRoutingBundle
处理语言环境 detection/switch将所需的捆绑包添加到 composer.json:
"require": {
...
"jms/i18n-routing-bundle": "1.1.*",
"jms/translation-bundle": "1.1.*",
"friendsofsymfony/user-bundle": "1.3.*"
},
http://jmsyst.com/bundles/JMSI18nRoutingBundle/master/installation
Link https://github.com/schmittjoh/JMSI18nRoutingBundle
但在安装之前请先观看这个简短的视频教程。本教程帮助我理解了 fos 用户包和 url.
中的语言环境之间的问题如果您不想使用 composer.json 文件安装 jms 路由包,您可以使用此命令安装它 php composer.phar require jms/i18n-routing-bundle "dev-master"
这是我的配置:
jms_i18n_routing:
default_locale: "%locale%"
locales: ["fr", "en"]
strategy: prefix_except_default
Security.yml:
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
require_previous_session: false
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: your_route_name_homepage
logout:
path: fos_user_security_logout
target: your_route_name_homepage
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
安装 Jms 路由包后。尝试执行命令 debug/router
(symfony 3) 并观察路由名称和前缀。