Symfony 2 - can't configure application for hosts - symfony

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

Related

Symfony 4 optional locale/prefix only for one domain route

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

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: /?

Use Symfony expression to populate default route parameters

I have route like this:
os_user_security_check:
pattern: /login_check
host: "{subdomain}.%base_host%"
defaults:
_controller: FOSUserBundle:Security:check
subdomain: "expr(request.get('subdomain'))"
requirements:
_method: POST
subdomain: "[a-z0-9\-_]+?"
What I want, is by default populate subdomain by default to prevent to affect it when generating the route, how ?

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)

Symfony Match Route with Multiple Hosts

I know it is possible to filter a route by host, like this:
irc_backend.report.stacking_issue:
path: /reports/stacking-issues
host: backend.domain.com
defaults: { _controller: IRCBackendBundle:Reports/Product/StackingIssueReport:index }
Is it possible to alter this configuration to match multiple domains? For example:
irc_backend.report.stacking_issue:
path: /reports/stacking-issues
host: backend.domain.com|dev.backend.domain.com
defaults: { _controller: IRCBackendBundle:Reports/Product/StackingIssueReport:index }
I'm trying to avoid setting up 2 routes for every page.
You can try placeholders in your hostname with requirements (i.e.. Symfony Documentation)
irc_backend.report.stacking_issue:
path: /reports/stacking-issues
host: "{mydomaines}"
defaults: { _controller: IRCBackendBundle:Reports/Product/StackingIssueReport:index }
requirements:
mydomaines: backend.domain.com|dev.backend.domain.com
If you read the Symfony documentation, you'd know that you need to use placeholders. For your code, it would be :
irc_backend.report.stacking_issue:
path: /reports/stacking-issues
host: "{subdomain}.domain.com"
defaults:
_controller: IRCBackendBundle:Reports/Product/StackingIssueReport:index
subdomain: backend
requirements:
subdomain: backend|dev.backend
I hope it'll help you !
EDIT :
If you want your default subdomain to be the current one, you can use a parameter like this :
irc_backend.report.stacking_issue:
path: /reports/stacking-issues
host: "{subdomain}.domain.com"
defaults:
_controller: IRCBackendBundle:Reports/Product/StackingIssueReport:index
subdomain: "%subdomain%"
requirements:
subdomain: backend|dev.backend
Then you will be able to define this parameter in an Event listener with this line of code :
$container->setParameter("subdomain", $your_subdomain);
P-S : Don't forget to add the Service container to your listener's dependencies

Resources