Symfony 4 optional locale/prefix only for one domain route - symfony

I'm trying to create prefix for only one domain in Symfony 4.
I would like to have following domains:
domain1.com
domain1.pl
domain2.com
**domain2.com/pl**
First option, I have tried
In /config/routes/annotations.yaml:
controllers:
resource: ../../src/Controller/
type: annotation
controllers_localized:
resource: ../../src/Controller/
type: annotation
prefix:
pl: /pl
en: /
But it adds to all domains prefixes and I want prefix only for domain2.com > domain2.com/pl
Second option, I have tried
In /config/routes.yaml route to the same controller:
index:
path: /
controller: App\Controller\DefaultController::index
index_localized:
path: /{_locale}
controller: App\Controller\DefaultController::index
defaults:
path: /pl
permanent: true
careers_localized:
path:
en: /careers
pl: /{_locale}/kariera
defaults:
path: /pl
permanent: true
controller: App\Controller\CareersController::careers
It works, but I have to change all anchors/link hrefs with if conditions in twig templates with additional /pl and add all Route cases in yaml which is time-consuming.
I wouldn't like to use bundles which was suggested for older Symfony versions

Related

Can't override homepage trailing slash

My site have no "homepage" that use the base url (mydomain.com)
The default routing include the _locale parameter, and thus, fail to match one part of the route depending on how I set it.
Config A
homepage:
path: /{_locale}/
defaults:
_locale: '%locale%'
requirements:
_locale: '%locales%'
This first config will match the route homepage with the following URLs
mydomain.com/en
mydomain.com/en/
But will fail to match
mydomain.com
mydomain.com/
Config B
homepage:
path: /{_locale}
defaults:
_locale: '%locale%'
requirements:
_locale: '%locales%'
This second config will match the route homepage with the following URLs
mydomain.com
mydomain.com/
mydomain.com/en
But will fail to match
mydomain.com/en/
Any idea what I'm missing in my config to match the 4 possibles URL patterns?
Found my answer:
homepage:
path: /{_locale}{trailingSlash}
defaults:
_locale: '%locale%'
trailingSlash: ''
requirements:
_locale: '%locales%'
trailingSlash: /?

URL based on locale

Is it possible to change URL when locale is changed?
This is my route:
contact:
path: /{type}
defaults: { _controller: WebPortalBundle:Default:contact }
requirements:
type: kontakty|contact
Is it possible when locale is "en" to display url with type = contact, when russian, czech, slovak, display with type = kontaky ?
Yes, it's possible. We are using https://github.com/BeSimple/BeSimpleI18nRoutingBundle that bundle for doing that.
After installation bundle you need to open config.yml file and add this config.
be_simple_i18n_routing: ~
After that open your main routing.yml file(app/routing.yml) and simply add type "be_simple_i18n". It's shoud be like that.
acme:
resource: "#AcmeBundle/Resources/config/routing.yml"
prefix: /
type: be_simple_i18n
And finally open bundle spesific routing.yml file (in that case AcmeBundle/Resources/config/routing.yml).
acme_contact:
path: /
defaults: { _controller: AcmeBundle:Default:contact }
locales: { en: "/contact", ru: "/kontaky" }

How to create admin page and api/v1 in symfony 2.7

this is my forder structure project structure image
this is my routing config
this is my routing config
app:
resource: "#AppBundle/Controller/"
type: annotation
admin:
resource: "#AdminBundle/Controller/"
type: annotation
prefix: admin/
defaults: { _controller: AdminBundle:Default:index }
Hi guys!
This is my project
but I go to link http://127.0.0.1:8000/admin
I get message
No route found for "GET /admin"
Please help me
Sorry my english is not very well
Thanks Guy
Try like this:
admin:
resource: "#AdminBundle/Controller/"
type: annotation
prefix: /admin
defaults: { _controller: AdminBundle:Default:index }
(slash before admin and typo on AdminBunlde)

Symfony2 - Parent routes read instead

I am working on Symfony2 project in which a kind of general bundle, let say CoreBundle, is managing all the routes (in this form, first.domain/a-route, second.domain/a-route, third.domain/a-route,...) of the website. Now I have been creating FirstBundle, SecondBundle, ThirdBundle with the idea to "transfer" the management of routes of each subdomain (firt, second, third,...) to the related bundle.
Beginning with the transfer of routes from CoreBundle to FirstBundle by editing /app/config/routing.yml file from:
resource: "#ProjectFirstBundle/Resources/config/routing.yml"
prefix: /
host: "{subdomain}.{domain}"
defaults: { _controller: ProjectFirstBundle:Public:aroute }
domain: %project_domain%
requirements:
domain: "%project_domain%"
subdomain: 'first'
to:
project_first_aroute:
path: /a-route
host: "{subdomain}.{domain}"
defaults: { _controller: ProjectFirstBundle:Public:aroute, domain: "%project_domain%" }
requirements:
domain: "%project_domain%"
subdomain: 'first'
And of course I have created controller and view files using the same schema as CoreBundle (by making an adaptation -- inheritance for .twig files).
Now the problem is only parent route (that is CoreBunble /a-route route) is being read when running the URL first.domain/a-route.
Any suggestions?

Symfony 2 - can't configure application for hosts

I have problem with setting hosts for my symfony application. For now we have one domain, let's sey it was domain.pl for all four languages. So rule in YML was:
front_common:
resource: "#FrontCommonBundle/Resources/config/routing.yml"
prefix: /{_locale}
defaults: { _locale: pl }
requirements:
_locale: "[a-z]{2}"
front_common_locale:
path: /
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
_locale: pl
path: /pl
permanent: true
So if someone enters domain.pl, he/she will be redirected to domain.pl/pl. Other pages was domain.pl/en, domain.pl/de and so on...
Now we get another domain, let's say domain.eu, that should show only english version, so domain.eu show english, others still redirects to /pl /de etc. My routing now looks this way:
front_common_eu:
host: domain.eu
resource: "#FrontCommonBundle/Resources/config/routing.yml"
prefix: /
defaults: { _locale: en }
front_common:
resource: "#FrontCommonBundle/Resources/config/routing.yml"
prefix: /{_locale}
defaults: { _locale: pl }
requirements:
_locale: "[a-z]{2}"
front_common_locale:
path: /
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
_locale: pl
path: /pl
permanent: true
When I enter domain.pl it works fine, and redirects me to /pl. But when I enter domain.eu it works the same, it redirects me to /pl. If I remove fron_common_locale route, I've got 404. Help, what am I doing wrong?
PS. According to this: Routing prefix as follows the Virtual Host it should work...
Replace _locale on front_common_locale with:
_locale: pl|en

Resources