Heim > php教程 > PHP开发 > Hauptteil

Symfony2 erstellt Beispiele für domänennamenbasiertes Routing

高洛峰
Freigeben: 2016-12-26 12:32:17
Original
1190 Leute haben es durchsucht

Das Beispiel in diesem Artikel beschreibt, wie Symfony2 eine domänennamenbasierte Routing-Implementierung erstellt. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Sie können eingehende Anfragen mit dem HTTP-Domänennamen abgleichen

YAML-Methode

mobile_homepage:
 path:  /
 host:  m.example.com
 defaults: { _controller: AcmeDemoBundle:Main:mobileHomepage }
homepage:
 path:  /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }
Nach dem Login kopieren

XML-Methode

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing
  http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="mobile_homepage" path="/" host="m.example.com">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>
Nach dem Login kopieren

PHP-Methode

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add(&#39;mobile_homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:mobileHomepage&#39;,
), array(), array(), &#39;m.example.com&#39;));
$collection->add(&#39;homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:homepage&#39;,
)));
return $collection;
Nach dem Login kopieren

Zwei Routen stimmen mit demselben Pfad / überein, die erste stimmt jedoch nur mit dem Domänennamen m.example.com überein

Platzhalter verwenden

Diese Domänennamenoption verwendet ein Platzhalter-Pfad-Matching-System für Charaktere. Das bedeutet, dass Sie in Ihren Domainnamen Platzhalter verwenden können, die mit Domainnamen übereinstimmen.

YAML

projects_homepage:
 path:  /
 host:  "{project_name}.example.com"
 defaults: { _controller: AcmeDemoBundle:Main:mobileHomepage }
homepage:
 path:  /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }
Nach dem Login kopieren

XML

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing
  http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="projects_homepage" path="/" host="{project_name}.example.com">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>
Nach dem Login kopieren

PHP

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add(&#39;project_homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:mobileHomepage&#39;,
), array(), array(), &#39;{project_name}.example.com&#39;));
$collection->add(&#39;homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:homepage&#39;,
)));
return $collection;
Nach dem Login kopieren

Sie können für diese Platzhalter auch Bedingungen und Standardoptionen festlegen. Wenn Sie beispielsweise m.example.com und mobile.example.com abgleichen möchten, können Sie wie folgt vorgehen:

YAML

mobile_homepage:
 path:  /
 host:  "{subdomain}.example.com"
 defaults:
  _controller: AcmeDemoBundle:Main:mobileHomepage
  subdomain: m
 requirements:
  subdomain: m|mobile
homepage:
 path:  /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }
Nach dem Login kopieren

XML

 
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing
  http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="mobile_homepage" path="/" host="{subdomain}.example.com">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
  <default key="subdomain">m</default>
  <requirement key="subdomain">m|mobile</requirement>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>
Nach dem Login kopieren

PHP

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add(&#39;mobile_homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:mobileHomepage&#39;,
 &#39;subdomain&#39; => &#39;m&#39;,
), array(
 &#39;subdomain&#39; => &#39;m|mobile&#39;,
), array(), &#39;{subdomain}.example.com&#39;));
$collection->add(&#39;homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:homepage&#39;,
)));
return $collection;
Nach dem Login kopieren

Sie können auch verwenden Wenn Sie den Domänennamen in den Dienstparametern nicht fest codieren möchten, schreiben Sie ihn wie folgt:

YAML

mobile_homepage:
 path:  /
 host:  "m.{domain}"
 defaults:
  _controller: AcmeDemoBundle:Main:mobileHomepage
  domain: &#39;%domain%&#39;
 requirements:
  domain: &#39;%domain%&#39;
homepage:
 path: /
 defaults: { _controller: AcmeDemoBundle:Main:homepage }
Nach dem Login kopieren

🎜>

PHP

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
 <route id="mobile_homepage" path="/" host="m.{domain}">
  <default key="_controller">AcmeDemoBundle:Main:mobileHomepage</default>
  <default key="domain">%domain%</default>
  <requirement key="domain">%domain%</requirement>
 </route>
 <route id="homepage" path="/">
  <default key="_controller">AcmeDemoBundle:Main:homepage</default>
 </route>
</routes>
Nach dem Login kopieren

Tipp

Stellen Sie sicher, dass Sie immer die Standardoption „Domänenplatzhalter“ einschließen, andernfalls müssen Sie bei jeder Verwendung den Domänenwert angeben Diese Route, um eine URL zu generieren.
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
$collection = new RouteCollection();
$collection->add(&#39;mobile_homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:mobileHomepage&#39;,
 &#39;domain&#39; => &#39;%domain%&#39;,
), array(
 &#39;domain&#39; => &#39;%domain%&#39;,
), array(), &#39;m.{domain}&#39;));
$collection->add(&#39;homepage&#39;, new Route(&#39;/&#39;, array(
 &#39;_controller&#39; => &#39;AcmeDemoBundle:Main:homepage&#39;,
)));
return $collection;
Nach dem Login kopieren

Verwenden Sie den enthaltenen Routing-Regelabgleich

Sie können Domänennamenoptionen festlegen, indem Sie Routing-Konfigurationsdateien wie folgt importieren:

YAML

XML

acme_hello:
 resource: &#39;@AcmeHelloBundle/Resources/config/routing.yml&#39;
 host:  "hello.example.com"
Nach dem Login kopieren

PHP

<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
 <import resource="@AcmeHelloBundle/Resources/config/routing.xml" host="hello.example.com" />
</routes>
Nach dem Login kopieren

Der Domänenname hello.example.com wird für jede Route in der neuen Routenkonfigurationsdatei festgelegt, die in geladen wird

Testen Sie Ihre Controller
use Symfony\Component\Routing\RouteCollection;
$collection = new RouteCollection();
$collection->addCollection($loader->import("@AcmeHelloBundle/Resources/config/routing.php"), &#39;&#39;, array(), array(), array(), &#39;hello.example.com&#39;);
return $collection;
Nach dem Login kopieren

Sie müssen die HTTP-Domänen-Header-Datei festlegen Objekt, das Sie angefordert haben, wenn Sie die URL in Ihrer Testfunktion korrekt zuordnen möchten

Ich hoffe, dass dieser Artikel für alle hilfreich sein wird, die auf Symfony2 Frameworks basieren für PHP-Programmierhilfe.

Weitere verwandte Beispiele für die Erstellung von Routing basierend auf dem Domainnamen durch Symfony2 finden Sie auf der chinesischen PHP-Website!
$crawler = $client->request(
 &#39;GET&#39;,
 &#39;/homepage&#39;,
 array(),
 array(),
 array(&#39;HTTP_HOST&#39; => &#39;m.&#39; . $client->getContainer()->getParameter(&#39;domain&#39;))
);
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!