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

この記事では、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. 简洁:想想看要打, 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 id="nbsp-block-nbsp-blog-title-nbsp-a-nbsp-href-symfony-a-nbsp-endblock-nbsp">{% block blog_title %}<a href="#">symfony</a>{% endblock %}</h2>
<h3 id="nbsp-block-nbsp-blog-tagline-nbsp-a-nbsp-href-creating-nbsp-a-nbsp-blog-nbsp-in-nbsp-Symfony-a-nbsp-endblock-nbsp">{% 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 までご連絡ください。
PHPメール:ステップバイステップ送信ガイドPHPメール:ステップバイステップ送信ガイドMay 09, 2025 am 12:14 AM

PhpisusedForsedingEmailsDueToitsIttegration withServerMailServicesAndExternalSmtpproviders、自動化とMarketingCampaign.1)SetupYourphpenvironment withebeBironment witheBiserverandphp、保証

PHP経由で電子メールを送信する方法:例とコードPHP経由で電子メールを送信する方法:例とコードMay 09, 2025 am 12:13 AM

メールを送信する最良の方法は、PHPMailerライブラリを使用することです。 1)Mail()関数を使用することはシンプルですが信頼できないため、電子メールがスパムを入力するか、配信できない場合があります。 2)PHPMailerは、より良い制御と信頼性を提供し、HTMLメール、添付ファイル、SMTP認証をサポートします。 3)SMTP設定が正しく構成されていることを確認し、暗号化(StartTLSやSSL/TLSなど)を使用してセキュリティを強化します。 4)大量の電子メールについては、メールキューシステムを使用してパフォーマンスを最適化することを検討してください。

高度なPHPメール:カスタムヘッダーと機能高度なPHPメール:カスタムヘッダーと機能May 09, 2025 am 12:13 AM

customedersandaddadvancedfeaturesinphpemailentalitylivainability.1)customederadddetadata fortrackingandcategorization.2)htmLemailsallowStingtintintintintintinteractivity.3)添付物質の添付物質の添付

php&smtpでメールを送信するためのガイドphp&smtpでメールを送信するためのガイドMay 09, 2025 am 12:06 AM

PHPとSMTPを使用してメールを送信することは、PHPMailerライブラリを介して実現できます。 1)PHPMailerをインストールして構成する、2)SMTPサーバーの詳細を設定する、3)電子メールコンテンツを定義し、4)メールを送信してエラーを処理します。この方法を使用して、電子メールの信頼性とセキュリティを確保します。

PHPを使用して電子メールを送信する最良の方法は何ですか?PHPを使用して電子メールを送信する最良の方法は何ですか?May 08, 2025 am 12:21 AM

BestappRoachforseminginphpisusingthephpmailerlibrarydueToitsReliability、featurrichness、andeaseofuse.phpmailerSupportssmtpは、detairederorhandlingを提供します

PHPでの依存関係注射のベストプラクティスPHPでの依存関係注射のベストプラクティスMay 08, 2025 am 12:21 AM

依存関係注射(DI)を使用する理由は、コードのゆるい結合、テスト可能性、および保守性を促進するためです。 1)コンストラクターを使用して依存関係を注入します。2)サービスロケーターの使用を避け、3)依存関係噴射コンテナを使用して依存関係を管理する、4)依存関係を注入することでテスト可能性を向上させる、5)注入依存性を回避、6)パフォーマンスに対するDIの影響を考慮します。

PHPパフォーマンスのチューニングのヒントとコツPHPパフォーマンスのチューニングのヒントとコツMay 08, 2025 am 12:20 AM

phpperformancetuningisucial cuseenhancess andandandadsand。

PHP電子メールセキュリティ:電子メールを送信するためのベストプラクティスPHP電子メールセキュリティ:電子メールを送信するためのベストプラクティスMay 08, 2025 am 12:16 AM

bestpracticesforsendingemails securlyinphpinclude:1)sutureconsmttarttlsencryptionとの使用の使用、2)検証およびサンシジン化のinputStopReventinjectuctacks、3)adinitivedinitivedInemailsopenslsl、4)adlinglinglingemailoaに

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン