ホームページ >バックエンド開発 >PHPチュートリアル >Symfony2フレームワークでのプロジェクト作成とテンプレート設定の詳細説明

Symfony2フレームワークでのプロジェクト作成とテンプレート設定の詳細説明

*文
*文オリジナル
2018-01-05 17:50:591870ブラウズ

この記事では、Symfony2 フレームワークのプロジェクトとテンプレート設定の作成方法を主に紹介し、Symfony2 フレームワークの具体的な手順と詳細な実装コードをサンプルの形式で詳細に分析します。困っている友達が参考になれば幸いです。

環境の準備と概要

私は Windows の Netbean エディターと virtualbox 仮想 centos システム、プリインストールされた nginx+php-fpm+mysql を使用することに慣れています。もちろん、Apache も良い選択です。http:/ を使用します。 /symfony in Windows および centos の開発ドメイン名として。

1. ダウンロードと環境設定

1. centosでの開発環境の構築方法については詳しく説明しませんが、もちろんWindowsでも開発環境を構築することは可能です。

2. 127.0.0.1 の代わりに symfony を使用する場合、liunx システムでは /etc/hosts ファイルを変更し、win7 システムでは C:WindowsSystem32driversetchost ファイルを変更します (管理者権限で開く必要があります)

同様のコンテンツを追加しますIP エイリアス 1 エイリアス 2 以上です:

# /etc/hosts 127.0.0.1 symblog dev symfony

3 symfony2 を手動でダウンロードします。

注意する必要がある唯一のことは、app/cache ディレクトリと app/logs ディレクトリが 777 権限に設定されている必要があることです。この問題は Windows 開発環境では存在しないはずです。

4. ダウンロードした symfony ファイルの Web ディレクトリを指すように、Apache または nginx 設定ファイルの symfony ドメイン名を変更します。

この時点で、http://symfony/app_dev.php から symfony のデフォルトのページにアクセスできるようになります。参照して学ぶことができるデモがいくつかあります。

app_dev.php には、デフォルトで以下にロードされる開発ツールバーがあり、現在のページに関する情報が表示され、プログラムのデバッグが非常に容易になります。環境変数が dev の場合にのみ表示されます。

5. Composer を使用してインストールする場合、mysql およびその他の関連情報を出力するように求められます。この情報を変更するか、ファイルを直接ダウンロードする必要がある場合は、「設定」ページに入って関連する設定を行うことができます。

バンドル (パッケージ、バンドル、アセンブリ、プロジェクトなどと呼ばれるかもしれません。英語を使いましょう) は symfony の基本的なもので、1 つずつ共有される再利用可能なコード パッケージであり、symfony 自体も進行中のバンドルとして使用されます。コントローラー、モジュール、テンプレート、さらには画像、js、css スタイル シート、その他のリソースが含まれます。これは非常に厄介で、php5.3 以降の名前空間をさまざまなバンドルが使用しています。ほとんどの cpenal および da 仮想ホストには php5.2 バージョンしかなく、symfony2 は実行できません。

2. バンドルを作成する

次の例では、Symfony はプロジェクトを迅速に作成するための多数のツールを提供します。 たとえば、これを使用して基本的なブログ バンドルを簡単に作成できます

php app/console generate:bundle –namespace=Blogger/BlogBundle –format=yml

実行後はすべてデフォルト設定を使用するだけです。 必要な基本的なコントローラー、モジュール、テンプレートを簡単に作成できます。 以下の動作が含まれます:

バンドルの登録

symfony で使用されるすべてのバンドルは、最初に登録する必要があります。一部のバンドルは、上記の開発ツールバーなど、開発およびテスト環境 (dev または test) でのみ使用されます。以下のコード スニペットは、バンドル作成コマンドが BloggerBlogBu​​ndle バンドルを登録する方法を示しています。

// app/AppKernel.php
class AppKernel extends Kernel {
public function registerBundles() {
$bundles = array(
// ..
new Blogger\BlogBundle\BloggerBlogBundle(),
);
// .. return $bundles; } // ..
}
}

routing

フレームワークとして、ルーティング関数はバンドラー作成者によって app/config/routing.yml に作成され、symfony は yml にあります。構成情報を保存するための形式。

# app/config/routing.yml
BloggerBlogBundle:
resource: "@BloggerBlogBundle/Resources/config/routing.yml"
prefix: /

prefix オプションを使用すると、ブログ、ニュースなどのサブディレクトリに配置できます。
ファイル
上記の構成ファイルに加えて、ほとんどの mvc フレームワークと同様に、他のほとんどのファイルが src ディレクトリに生成されます。 Blogger ディレクトリは src の下に生成され、さまざまな関連情報を保存する BlogBu​​ndle サブディレクトリがあります。違いは、blogger と同様のディレクトリが PHP 名前空間に対応することです。

デフォルト コントローラー

バンドル ジェネレーターは、src の下にデフォルト コントローラーを生成します。 簡単な hello は、http://symfony/app_dev.php/hello/world にアクセスすると表示されます。 このページの生成方法について:

routing

は引き続きルーティングです。違いは、前のルーティングが登録され、プログラム全体で使用されることです。ここでのルーティングは、特定のページ (src/Blogger/BlogBu​​ndle/) の使用を制御します。 Resources/config/routing.yml は BloggerBlogBu​​ndle を制御し、次のプログラム フラグメントが含まれています:

# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_homepage:
pattern: /hello/{name}
defaults: { _controller: BloggerBlogBundle:Default:index }

パラメータ: URL 検出を実行します。/hello/{name} 構造に準拠する値はすべて {name} に割り当てられます。
メソッド: そこにあります。フォームに制限はなく、理論上、put、get、post、delete などのすべての操作を実行できます。
フォローアップ: 上記の 2 つの項目が満たされる場合、{name} は特定のファイルに転送され、src/Blogger/BlogBu​​ndle/Controller/DefaultController.php ファイル内のデフォルト コントローラーのインデックス動作が使用されます。 。

Controller

デフォルトの実稼働バンドラーでは、コントローラーの動作は非常に単純で、{name} パラメーターがテンプレート ファイルに渡され、テンプレート ファイルに渡されます:

// 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));
}
}

BloggerBlogBu​​ndle:Default:index.html.twig が使用されますBloggerBlogBu​​ndle ビュー フォルダーの Default フォルダーにあるindex.html.twig テンプレート ファイル

テンプレート ファイル

上記のテンプレート ファイルを開きます。非常に簡単なコードです:

{# 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. 简洁:想想看要打bb9bd6d87db7f8730c53cb084e6b4d2d, 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=&#39;http://fonts.googleapis.com/css?family=Irish+Grover&#39; rel=&#39;stylesheet&#39; type=&#39;text/css&#39;>
<link href=&#39;http://fonts.googleapis.com/css?family=La+Belle+Aurore&#39; rel=&#39;stylesheet&#39; type=&#39;text/css&#39;>
<link href="{{ asset(&#39;css/screen.css&#39;) }}" type="text/css" rel="stylesheet" />
{% endblock %}
<link rel="shortcut icon" href="{{ asset(&#39;favicon.ico&#39;) }}" />
</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 &#39;::base.html.twig&#39; %}
{% 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(&#39;css/screen.css&#39;) }}" 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: &#39;Irish Grover&#39;, cursive; font-size: 92px; text-align: center; line-height: 110px; }
#header h2 a { color: #000; }
#header h3 { text-align: center; font-family: &#39;La Belle Aurore&#39;, 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 &#39;::base.html.twig&#39; %}
{% 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(&#39;BloggerBlogBundle:Page:index.html.twig&#39;);
}
}

然后创建相应的Twig文件: src/Blogger/BlogBundle/Resources/views/Page/index.html.twig

{# src/Blogger/BlogBundle/Resources/views/Page/index.html.twig #}
{% extends &#39;BloggerBlogBundle::layout.html.twig&#39; %}
{% 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(&#39;BloggerBlogBundle:Page:about.html.twig&#39;);
}
// ..

模板: 创建src/Blogger/BlogBundle/Resources/views/Page/about.html.twig 并加入相关页面文件

{# src/Blogger/BlogBundle/Resources/views/Page/about.html.twig #}
{% extends &#39;BloggerBlogBundle::layout.html.twig&#39; %}
{% block body %}
about page
{% endblock %}

简单的三个流程增加了关于页面:http://symfony/app_dev.php/about

相关推荐:

Symfonyがテンプレートとビヘイビアでリクエストパラメータを取得する方法の詳細な説明

Symfonyテンプレートのショートカット変数の使用法の詳細な説明

Symfonyのコアクラスの簡単な紹介

以上がSymfony2フレームワークでのプロジェクト作成とテンプレート設定の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。