In diesem Artikel wird hauptsächlich die Methode zum Erstellen von Projekten und Vorlageneinstellungen im Symfony2-Framework vorgestellt und die spezifischen Schritte und der detaillierte Implementierungscode des Symfony2-Frameworks anhand von Beispielen detailliert analysiert. Freunde in Not können darauf verweisen. Ich hoffe, dass es für alle hilfreich ist.
Umgebungsvorbereitung und -übersicht
Gewöhnt an die Verwendung des Netbean-Editors in Windows und Virtualbox Virtual Centos System, vorinstalliert nginx+php-fpm+mysql, Von Natürlich ist Apache auch eine gute Wahl. Verwenden Sie http://symfony als Entwicklungsdomänennamen unter Windows und Centos.
1. Download- und Umgebungseinstellungen
1. Wie man eine Entwicklungsumgebung auf Centos einrichtet, wird natürlich nicht im Detail beschrieben auf Windows installiert.
2. Bezüglich der Verwendung von Symfony anstelle von 127.0.0.1. Ändern Sie die Datei /etc/hosts im Linux-System und ändern Sie die Datei C:WindowsSystem32driversetchost (muss mit Administratorrechten geöffnet werden)
Ähnliches hinzufügen Geben Sie einfach den Inhalt von IP-Alias 1 und Alias 2 ein, z. B.:
# /etc/hosts 127.0.0.1 symblog dev symfony
3. Laden Sie Symfony2 manuell herunter.
Das Einzige, was zu beachten ist: Die Verzeichnisse app/cache und app/logs müssen auf 777-Berechtigungen eingestellt sein. Dieses Problem sollte in der Windows-Entwicklungsumgebung nicht auftreten.
4. Ändern Sie den Symfony-Domänennamen der Apache- oder Nginx-Konfigurationsdatei so, dass er auf das Webverzeichnis der heruntergeladenen Symfony-Datei verweist.
An diesem Punkt sollten Sie über http://symfony/app_dev.php auf die Standardseite von Symfony zugreifen können. Es gibt mehrere Demos, auf die Sie verweisen und von denen Sie lernen können.
app_dev.php lädt standardmäßig eine Entwicklungssymbolleiste, die einige Informationen zur aktuellen Seite anzeigt, was das Debuggen des Programms erheblich erleichtert. Nur wenn die Umgebungsvariable dev ist angezeigt.
5. Wenn Sie Composer zur Installation verwenden, werden Sie aufgefordert, MySQL und andere verwandte Informationen auszugeben. Wenn Sie diese Informationen ändern oder die Datei direkt herunterladen müssen, können Sie dies auf der Seite „Konfigurieren“ tun relevanten Einstellungen.
Bundles (vielleicht Pakete, Bundles, Assemblys oder Projekte genannt, verwenden wir Englisch) sind die Grundbestandteile von Symfony, wiederverwendbare Codepakete, die einzeln geteilt werden, sogar Symfony selbst. Es wird als Bundle ausgeführt. Einschließlich Controller, Module, Vorlagen und sogar Bilder, JS, CSS-Stylesheets und andere Ressourcen. Es ist eine sehr chaotische Sache. Verschiedene Bundles verwenden den Namespace nach php5.3. Die meisten virtuellen Hosts von cpenal und da scheinen nur die Version php5.2 zu haben, und Symfony2 kann nicht ausgeführt werden.
2. Ein Bundle erstellen
Im folgenden Beispiel wird ein Blog erstellt, um eine große Anzahl von Tools zur schnellen Erstellung von Projekten bereitzustellen. Beispielsweise können wir damit schnell ein Basispaket für einen Blog erstellen.
php app/console generate:bundle –namespace=Blogger/BlogBundle –format=yml
Verwenden Sie nach dem Ausführen einfach alle Standardeinstellungen. Wir können ganz einfach die grundlegenden Controller, Module und Vorlagen erstellen, die wir benötigen. Enthält das folgende Verhalten:
Bundles registrieren
Alle in Symfony verwendeten Bundles müssen zuerst registriert werden, und einige Bundles werden nur in Entwicklungs- und Testumgebungen verwendet ( dev oder test), wie oben in der Entwicklungssymbolleiste erwähnt, zeigt, wie der Bundle-Erstellungsbefehl das BloggerBlogBundle-Bundle registriert.
// app/AppKernel.php class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // .. new Blogger\BlogBundle\BloggerBlogBundle(), ); // .. return $bundles; } // .. } }
Routing
Als Framework wird die Routing-Funktion in app/config/routing.yml vom Bundler-Ersteller erstellt und verwendet das YML-Format zum Speichern von Konfigurationsinformationen.
# app/config/routing.yml BloggerBlogBundle: resource: "@BloggerBlogBundle/Resources/config/routing.yml" prefix: /
Präfixoption ermöglicht es uns, es in Unterverzeichnissen wie Blog, News usw. zu platzieren.
Datei
Zusätzlich zu den oben genannten Konfigurationsdateien werden die meisten anderen Dateien im src-Verzeichnis generiert, wie die meisten MVC-Frameworks. Das Blogger-Verzeichnis wird unter src generiert und es gibt ein BlogBundle-Unterverzeichnis, in dem verschiedene verwandte Dinge gespeichert werden. Der Unterschied besteht darin, dass ein Blogger-ähnliches Verzeichnis dem PHP-Namespace entspricht.
Standard-Controller
Der Bundle-Generator generiert den Standard-Controller unter src. Ein einfaches Hallo finden Sie unter: http://symfony/app_dev.php/hello/world. Bezüglich der Art und Weise, wie diese Seite generiert wird:
Routing
ist immer noch Routing. Der Unterschied besteht darin, dass das vorherige Routing im gesamten Programm registriert und verwendet wird die spezifische Seite. Verwenden Sie src/Blogger/BlogBundle/Resources/config/routing.yml, um BloggerBlogBundle zu steuern, einschließlich der folgenden Programmfragmente:
# src/Blogger/BlogBundle/Resources/config/routing.yml BloggerBlogBundle_homepage: pattern: /hello/{name} defaults: { _controller: BloggerBlogBundle:Default:index }
Parameter: URL-Erkennung durchführen, jeder Wert, der dem entspricht /hello/{name}-Struktur Wird der Methode {name},
zugewiesen: Es gibt keine Einschränkung für das Formular. Theoretisch können alle Operationen von put, get, post und delete ausgeführt werden.
Nachverfolgung: Wenn die beiden oben genannten Punkte erfüllt sind, wird {name} in eine bestimmte Datei übertragen und das obige Indexverhalten des Standardcontrollers in der Datei src/Blogger/BlogBundle/Controller/DefaultController.php verwendet wird.
Controller
Im Standard-Produktions-Bundler ist das Controller-Verhalten recht einfach, der Parameter {name} wird in die Vorlagendatei ein- und ausgegeben:
// src/Blogger/BlogBundle/Controller/DefaultController.php namespace Blogger\BlogBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class DefaultController extends Controller { public function indexAction($name) { return $this->render('BloggerBlogBundle:Default:index.html.twig', array('name' => $name)); } }
BloggerBlogBundle:Default:index.html.twig verwendet die Vorlagendatei index.html.twig im Standardordner im BloggerBlogBundle-Ansichtsordner.
Vorlagendatei
Öffnen Sie die obige Vorlagendatei, einen sehr einfachen Code:
{# src/Blogger/BlogBundle/Resources/views/Default/index.html.twig #} Hello {{ name }}!
以上就是symfony的整个mvc流程, 这么多文件的作用只是输出一个 “hello world”. 理论上不用bundler创建器, 只是手动创建上述文件也可以实现相同效果。花费的时间就多了去了。
回到正题, 我们是创建博客系统, 所以不需要 hello world,
1.移除控制器 src/Blogger/BlogBundle/Controller/DefaultController.php
2.移除模板 src/Blogger/BlogBundle/Resources/views/Default/
3.最后移除路由 src/Blogger/BlogBundle/Resources/config/routing.yml
整个世界清静了。
三、让我们开始创建博客的主页
Twig的优点
在symfony中我们可以使用 Twig和php(这不是废话嘛)作为模板。使用Twig的以下优点:
1. 快: 是编绎过的php类, 可以占用更少的资源
2. 简洁:想想看要打, Twig输入的内容要少很多。
3. 可继承: 非常cool的一个功能
4. 安全: 转义功能默认开启, 甚至还可以为重要代码提供沙盒功能。
5. 可扩展: 需要额外的定制功能, 可以随时扩展
可继承是一个非常好的优点, 我们将使用三级继承结构来定制这个模板, 这将允许我们在三个不同层级修改模板, 方便自由定制。
主模板–level 1
<!– app/Resources/views/base.html.twig –> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html"; charset=utf-8" /> <title>{% block title %}symfony{% endblock %} – blog</title> <!–[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]–> {% block stylesheets %} <link href='http://fonts.googleapis.com/css?family=Irish+Grover' rel='stylesheet' type='text/css'> <link href='http://fonts.googleapis.com/css?family=La+Belle+Aurore' rel='stylesheet' type='text/css'> <link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" /> {% endblock %} <link rel="shortcut icon" href="{{ asset('favicon.ico') }}" /> </head> <body> <section id="wrapper"> <header id="header"> <p> {% block navigation %} <nav> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Contact</a></li> </ul> </nav> {% endblock %} </p> <hgroup> <h2>{% block blog_title %}<a href="#">symfony</a>{% endblock %}</h2> <h3>{% block blog_tagline %}<a href="#">creating a blog in Symfony2</a>{% endblock %}</h3> </hgroup> </header> <section> {% block body %}{% endblock %} </section> <aside> {% block sidebar %}{% endblock %} </aside> <p id="footer"> {% block footer %} <a href="http://blog.dengruo.com/201309/1409">Symfony2 博客教程</a> {% endblock %} </p> </section> {% block javascripts %}{% endblock %} </body> </html>
上面代码在引入了一个js文件, 在ie9版本前的浏览器中实现html, 以及两个css文件导入google fronts.
这构成了网页的主要内容结构, 相当于drupal的html.tpl.php+page.tpl.php.
让我们看一下头部文件
<title>{% block title %}blog{% endblock %} – symfony</title>
{% 标签中即不是html, 也不是php, 他是3个Twig标签中的一个, 用于执行某些动作。 这里可以找到完整的Twig控制动作用于这个标签。 回到当前代码, 是用于查找title的block并输出他, 如果没有则输出默认的symblo这个词。
Twig的可续承特性可以用于修改title, 我们可以在其它模板文件中重写它:
{% extends '::base.html.twig' %} {% block title %}The blog title goes here{% endblock %}
上面代码首先继承了第一次定义这个block的文件, 然后修改它。 网站标题部分会输出 'The blog title goes here – symfony'。
一般而言, 我们引用模板文件时会采用bundle:controller:template, 但是以上代码并没有bundle 和controller, 不包含这两个字段会直接引用app/Resources/views/ 文件夹下面的文件。
在css样式表中, 我们可以发现另一个Twig标签{{, 这是一个输出(说些什么)标签。
<link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" />
这个标签用于输出变量或者表达式, 上面例子输出了asset函数的返回值, 这个函数提供可移植的方式来返回css,js, 图片的地址。
这个标签可以以特定格式输出我们想要内容, 比如时间:
{{ blog.created|date("d-m-Y") }}
全部过滤列表在 Twig 文档可以查到。
最后一个标签并没有在上述代码中出现, 它是{#, 只是一个注释标签
{# 注释内容可以输出在这里 #}
接下来我们将创建css样式表web/css/screen.css , 加入以下内容.
html,body,p,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0} body { line-height: 1;font-family: Arial, Helvetica, sans-serif;font-size: 12px; width: 100%; height: 100%; color: #000; font-size: 14px; } .clear { clear: both; } #wrapper { margin: 10px auto; width: 1000px; } #wrapper a { text-decoration: none; color: #F48A00; } #wrapper span.highlight { color: #F48A00; } #header { border-bottom: 1px solid #ccc; margin-bottom: 20px; } #header .top { border-bottom: 1px solid #ccc; margin-bottom: 10px; } #header ul.navigation { list-style: none; text-align: right; } #header .navigation li { display: inline } #header .navigation li a { display: inline-block; padding: 10px 15px; border-left: 1px solid #ccc; } #header h2 { font-family: 'Irish Grover', cursive; font-size: 92px; text-align: center; line-height: 110px; } #header h2 a { color: #000; } #header h3 { text-align: center; font-family: 'La Belle Aurore', cursive; font-size: 24px; margin-bottom: 20px; font-weight: normal; } .main-col { width: 700px; display: inline-block; float: left; border-right: 1px solid #ccc; padding: 20px; margin-bottom: 20px; } .sidebar { width: 239px; padding: 10px; display: inline-block; } .main-col a { color: #F48A00; } .main-col h1, .main-col h2 { line-height: 1.2em; font-size: 32px; margin-bottom: 10px; font-weight: normal; color: #F48A00; } .main-col p { line-height: 1.5em; margin-bottom: 20px; } #footer { border-top: 1px solid #ccc; clear: both; text-align: center; padding: 10px; color: #aaa; }
Bundler模板–level 2
现在我们为blog bundler 创建模板, 创建src/Blogger/BlogBundle/Resources/views/layout.html.twig 并加入:
{# src/Blogger/BlogBundle/Resources/views/layout.html.twig #} {% extends '::base.html.twig' %} {% block sidebar %} Sidebar content {% endblock %}
非常简单的代码,1. 继承了一级模板, 并且为博客内容特别定制了侧边栏, 很显然我们并不想博客的布局与其它页面一样。 类似drupal7中page–content-type.tpl.php模板, 定制了某一特殊类型内容的布局。
具体页面布局–level 3
这个阶段已经涉及到创建具体页面, 所以需要先创建控制器src/Blogger/BlogBundle/Controller/PageController.php
// src/Blogger/BlogBundle/Controller/PageController.php namespace Blogger\BlogBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class PageController extends Controller { public function indexAction() { return $this->render('BloggerBlogBundle:Page:index.html.twig'); } }
然后创建相应的Twig文件: src/Blogger/BlogBundle/Resources/views/Page/index.html.twig
{# src/Blogger/BlogBundle/Resources/views/Page/index.html.twig #} {% extends 'BloggerBlogBundle::layout.html.twig' %} {% block body %} Blog homepage {% endblock %}
创建路由将首页引导到我们刚创建的页面:src/Blogger/BlogBundle/Resources/config/routing.yml
# src/Blogger/BlogBundle/Resources/config/routing.yml BloggerBlogBundle_homepage: pattern: / defaults: { _controller: BloggerBlogBundle:Page:index } requirements: _method: GET
再次访问 http://symfony/app_dev.php可以看见简单的首页。
四、再创建一个about页面
路由:在src/Blogger/BlogBundle/Resources/config/routing.yml中加入
# src/Blogger/BlogBundle/Resources/config/routing.yml BloggerBlogBundle_about: pattern: /about defaults: { _controller: BloggerBlogBundle:Page:about } requirements: _method: GET
当以get方式访问about页时执行位于BloggerBlogBundle命名空间的page控制器about动作。
控制器: 在src/Blogger/BlogBundle/Controller/PageController.php 于page控制器中加入about动作
// src/Blogger/BlogBundle/Controller/PageController.php // .. public function aboutAction() { return $this->render('BloggerBlogBundle:Page:about.html.twig'); } // ..
模板: 创建src/Blogger/BlogBundle/Resources/views/Page/about.html.twig 并加入相关页面文件
{# src/Blogger/BlogBundle/Resources/views/Page/about.html.twig #} {% extends 'BloggerBlogBundle::layout.html.twig' %} {% block body %} about page {% endblock %}
简单的三个流程增加了关于页面:http://symfony/app_dev.php/about
相关推荐:
Detaillierte Erläuterung, wie Symfony Anforderungsparameter in Vorlagen und Verhaltensweisen erhält
Detaillierte Erläuterung der Verwendung von Symfony-Vorlagen-Verknüpfungsvariablen
Kurze Beschreibung der Symfony-Kernklassen
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung zum Erstellen von Projekten und Festlegen von Vorlagen im Symfony2-Framework. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!