【4858.com】Symfony学习十秒钟入门出色教程,安装和布局

By admin in 4858.com on 2019年7月14日

Symfony是五个强硬的基于PHP的Web开辟框架,在这里我们用十秒钟的小时来做叁个简约的增删改查的次第,
任何面生Symfony的人都足以透过这一个课程完结本人的首先个Symfony程序。

Symfony 01:安装和安顿

Symfony
提供了叁个安装器,用于安装和早先化你的采取。那几个安装器实际上是用PHP代码编写的一个剧本程序,运维在PHP
5.4及以上的版本,通过它你能够成立自便多少个Symfony应用。

正文实例陈诉了Symfony2安装第三方Bundles的章程。分享给我们供大家参照他事他说加以考察,具体如下:

Symfony2是二个基于PHP语言的Web开拓框架,有着开垦速度快、质量高级特点。本文以贰个顺序示例的兑现进度详细描述了Symfony2框架的布署与程序支付。

假诺急需以此样例程序的百分之百源代码,能够访谈
这里
,只怕通过上边包车型大巴格局赢得源代码:

①下载symfony安装器

● Linux和MacOS
张开调节台,实践以下命令:

【4858.com】Symfony学习十秒钟入门出色教程,安装和布局。$ sudo curl -LsS
https://symfony.com/installer
-o /usr/local/bin/symfony
$ sudo chmod a+x /usr/local/bin/symphony

实践完上述命令后,就创办了三个大局的symfony命令。
● Windows
展开调整台,实施以下命令:

c:> php -r
“readfile(‘https://symfony.com/installer’);”
> symfony

然后,将下载的symfony文件移动到你的工程目录下

c:> move symfony c:\projects

②创建Symfony应用
有限支撑symfony安装器可用,然后实践以下命令:
● Linux和MacOS

$ symfony new my_project_name

● Windows

c:> cd projects/
c:\projects> php symfony new my_project_name

实行完上述命令后,会自行创设一个“my_project_name”目录,该目录下包蕴了多少个全新的基于前段时间稳固版本的Symfony工程。别的,安装器会检查你的体系是不是满意推行Symfony应用的能力目标要求,倘若不满足,你会看到输出的一个列表,在那之中交付了不满意的技术目标须求。
▼ 指定Symfony版本号
假定您要开创一个点名版本Symfony应用,那么须要在new命令中加入第三个参数:

$ symfony new my_project_name 2.8
$ symfony new my_project_name 2.8.1
$ symfony new my_project 3.0.0-BETA1
$ symfony new my_project 3.1.0-RC1

▼ 目录结构表达

my_project_name/
|— app/
| |— console
| |— cache/
| |— config
| |— logs
| ∟ config
|— src/
| ∟ AppBundle
| |— vendor
∟ web/

那是Symfony提议的一种文件组织格局的科班,种种目录的有血有肉表明如下:
● app/cache/:存款和储蓄应用运营进度中变化的全套缓存文件
● app/config/:存款和储蓄为每一个景况定义的配置文件
● app/logs/:存款和储蓄应用运营进程中变化的日记文件
● app/Resources/:存款和储蓄应用的模板和国际化文件
● src/AppBundle/:存款和储蓄你和睦专门的工作逻辑代码

vendor/:Composer安装的行使所依附的组件,比方Symfony大旨就存款和储蓄在那些目录下,这么些目录下的漫天文件都无法举办改造。

web/:网址公布时的根目录,存款和储蓄应用的前端调节器和网址静态财富文件,举例stylesheet、JavaScript和图片等。

▼ Application Bundles
Symfony中,常常以Bundle来组织具备特定作用的代码,八个Bundle意味着成效上独立且平静,可被重复使用的组件。因而,要是你和睦定义的Bundle无法在Symfony其余的采用中重复使用,那么就不能够定义为三个Bundle。其余,假如三个Bundle正视于另三个Bundle,最佳将那四个Bundle合为一个。
建议:在您的应用逻辑代码中最棒创建三个Bundle,如上述所述AppBundle。
经过Bundle这种办法来公司代码,能够令你的代码变得越发可读和轻易了然。

许多的Bundles都提了安装的介绍,上边来介绍核心的装置步骤:

一、下载

$git clone https://github.com/saharabear/symfony-sample.git

③运行Symfony应用

Symfony提供了贰个依据PHP的里边webserver,在开辟进度中用来周转调治你的施用。试行上边包车型客车命令:

$ cd my_project_name/
$ php bin/console server:run

下一场,张开你的浏览器,在地方栏中输入http://localhost:8000/,你就可能够旁观如下的Symfony应接分界面:

4858.com 1

接待界面

若无出现招待分界面,你可能拜谒到七个空白页或然不当页面,那是因为漏洞相当多配置导致的目录访谈权限产生的。

假如急需停止WebServer运维,能够输入Ctrl+C以中止服务。

亟需注意一点的是,这么些PHP WebServer要求周转在PHP 5.4
及以上版本,对于开采形式以来颇为有用,可是对于最终的生产版本的话,照旧必要运用Apache或许Nginx作为WebServer。

一、加多composer注重关系

首先是下载Symfony2,到

品种初步化

④检查Symfony应用配置和安装

Symfony专门提供了叁个可视化的配置页面,访谈地址为:

http://localhost:8000/config.php

▼ 配置文件
Symfony的安插文件存款和储蓄在app/config/,该目录下定义基础配置、路由、服务、安全性等。平时默许选为yaml文件,当然也足以换到任何格式如XML和PHP。
app/config/config.yml:总安排文件,别的安顿文件通过imports引进。

imports:

  • { resource: parameters_default.yml }
  • { resource: parameters_service.yml, ignore_errors: true }
  • { resource: parameters.yml }
  • { resource: security.yml }
  • app/config/config_dev.yml:开荒条件下的分公司署文件。
  • 4858.com ,app/config/config_prod.yml:生产景况下的总布署文件。
  • app/config/config_test.yml:测验情况下的安插文件。
  • app/config/routing.yml:路由布置文件。
  • app/config/security.yml:安全性配置文件,比如AAA验证配置、防火墙配置,用户剧中人物、用户组配置等。

● 基础配置文件
基本功配置文件正是app/config/parameters.yml,
驷比不上舌不外乎数据库和邮箱配置:

parameters:
database_driver: pdo_mysql #数据库驱动
database_host: localhost
database_port: 3306
database_name: edu
database_user: root
database_password: ‘root’
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: null
mailer_password: null
locale: zh_CN
secret: l0wkrtgjp0gk44woo0soco4k0488w4c
user_partner: none

在symfony里,用composer来保管重视关系

tar zxvf Symfony_Standard_Vendors_2.0.###.tgz -C /var/www

第一,必要您在团结的Computer中设置PHP意况并安装git.那方面包车型地铁内容属于基础内容,网络上有多量的科目,在此地就没有多少介绍了,然而要升迁的一些是:PHP从5.4起先,
已经停放了测量试验用服务器,Symfony也拥抱了那个由PHP内置的服务器,只要求在指令行中使用$php
app/console server:run 就足以
运营基于Symfony框架的PHP程序举办测验,因而不须求选拔XAMPP这一类复杂的合一遭受,直接设置PHP并确定保障在指令行下能够推行php命令就足以了。

⑤更新Symfony应用

到那边,对于你要开支品种来讲,你早就创办了一个职能比较圆满的Symfony应用。实际上,Symfony正视于一多级外界的库,它们都寄放在类型中的“vendor/”目录下,统一由Composer进行管理(Composer是一款PHP包管理工科具)。

为期的换代三方的库入眼意在修复bugs和任何安全性难点,执行Composer的“update”命令就能立即对借助包达成立异:

$ cd my_project_name/
$ composer update

更新时间首要取决于你的类别的目不暇接和网络状态,一般几分钟就足以做到换代。

1.找到Bundle的包的名号

上面的###是指版本号,小编下的时候是BETA5。

下一场,大家须要树立一个新的目录,名字叫symfony-sample,Symfony使用二个叫composer的程序管理各体系库的借助关系,由此只要您的机器上
安装了composer,就能够一直跳过这一步,若无设置,能够用下边包车型地铁指令安装新型版本的composer.

在包的README里一般都告知了大家它的名目,若无,能够在

当解压之后,Symfony2的目录如下:

$cd symfony-sample
$curl -sS https://getcomposer.org/installer | php

2.通过composer来安装Bundle

/var/www/ <- Web根目录 
 Symfony/ <- Symfony2解压目录 
  app/ <- 存放symfony的核心文件的目录
   cache/ <- 存放缓存文件的目录
   config/ <- 存放应用程序全局配置的目录
   logs/ <- 存放日志的目录
  src/ <- 应用程序源代码
   ... 
  vendor/ <- 供应商或第三方的模组和插件
   ... 
  web/ <- Web入口
   app.php <- 生产环境下的前端控制器
   ... 

一经指望通晓越来越多关于composer的新闻,能够参谋本条网址。

清楚了bundle的包名之后,大家能够透过composer来安装它

假如您要求安装(假若你下载的是without
vendor版本)或更新vendor(第三方)内容时,能够选拔:

安装完毕composer后,大家得以开头设置当前最新版本的Symfony2.6.0

$ composer require codeguy/upload
cd /var/www/Symfony
php bin/vendors install

复制代码 代码如下:

codeguy/upload是一个上传文件的bundle,在上一章《Symfony2使用第三方库Upload制作图纸上传实例详解》中我们利用到。

二、配置

$php composer.phar create-project symfony/framework-standard-edition
mysampleproject/ 2.6.0

施行上面的下令,composer会给你的类型选用多个最佳本子的bundle,把它加多到composer.json中,并将bundle下载到vendor/目录下。如若你想要下载二个钦定的本子,在bundle的包名后扩展:版本号

Symfony2的陈设很简短,只需求在浏览器中输入:

安装进度中,供给填写数据库等新闻,在这么些事例中,我们会使用mysql数据库,因而你能够一并按回车键,先不要关切那整个安顿相应如何填写。反正
Symfony会在设置成功后,生成一个安插文件,叫app/config/parameters.yml,上面笔者会提供多少个parameters.yml文件的
内容样本,只要复制进去就足以了,先不用关切那样多细节。

二、注册Bundle

http://localhost/Symfony/web/config.php

刚刚制造mysampleproject以后,在symfony-sample目录下生成了mysampleproject目录,作者习贯于将先后放在项指标根目录下,由此进行上边的多少个指令,
就可以把项目从symfony-sample/mysampleproject目录中,移到symfony-sample目录中

今昔,第三方的bundle已经设置到您的symfony项目中了,在vendor/目录下。此时大家要求在app/AppKernel.php里注册安装好的bundle

下一场依照提醒来进展就能够了。在那之中值得注意的正是app/cache和app/logs目录的权杖难题,由于笔者是在Ubuntu下安装的,所以可以运用(在那之中firehare是自己的用户名,大家在此处能够用你的用户名取代):

$mv mysampleproject/* ./
$rm -rf mysampleproject

例如DoctrineFixturesBundle:

#为了保险起见 
rm -rf app/cache/* 
rm -rf app/logs/* 
#设置ACL 
sudo setfacl -R -m u:www-data:rwx -m u:firehare:rwx app/cache app/logs 
sudo setfacl -dR -m u:www-data:rwx -m u:firehare:rwx app/cache app/logs 

答辩上来讲,大家已经成功了Symfony项指标创建,不过刚刚提到的parameters.yml文件还尚无解释。这几个parameters.yml是Symfony的全局配置文件,
无论是数据库配置音讯照旧别的的各样配置,都能够献身那么些文件中。上面是我们需求利用的测量试验用的parameters.yml,记得把最终一行的值修改为三个随机值

class AppKernel extends Kernel
{
  public function registerBundles()
  {
    $bundles = array(
      //...在这里注册
      new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(),
    );
  }
  //...
}

借使系统不辅助setfacl命令的话,要反省2个地点:
  setfacl是不是业已设置,若无的话,能够由此以下命令安装(在Ubuntu
11.第10中学好象已经缺省安装了,包为叫acl):

# This file is auto-generated during the composer install
parameters:
  database_driver: pdo_mysql
  database_host: localhost
  database_port: 3306
  database_name: symfony
  database_user: root
  database_password: root
  mailer_transport: smtp
  mailer_host: localhost
  mailer_user: null
  mailer_password: null
  locale: en
  secret: ChangeThisLineAsYouWish_ioiuqwoieru

三、配置Bundle

sudo apt-get install setfacl 

平素用这段,替换掉app/config/parameters.yml文件中的内容,然后编辑app/config/config.yml,找到上面几行,把最终一行增多进去并保留。

一些包需求有的附加的布置在
app/config/config.yml文件里。包的文书档案会告诉大家关于怎么样安顿,也能够经过指令来参照他事他说加以考察包的布局

  要是setfacl已经设置,那么请查看/etc/fstab文件,看看是否增加了acl选项:

driver:  "%database_driver%"
host:   "%database_host%"
port:   "%database_port%"
dbname:  "%database_name%"
user:   "%database_user%"
password: "%database_password%"
charset: UTF8
path:   "%database_path%"
$ app/console config:dump-reference
# /var was on /dev/sda7 during installation 
UUID=c2cc4104-b421-479a-b21a-1108f8895110 /var ext4 defaults,acl 0 2 

好了,那样大家就成功了着力的Symfony程序的安插,你今后有了二个铺排好了数据库,邮件发送器,日志系统的中坚顺序原型。上边,大家就从头编制自个儿的Symfony程序。

例如TwigBundle:

  然后基于页面提示填写数据库名等音信,再将那几个消息拷到/var/www/Symfony/app/config/parameters.ini文件中,如下所示:

建立Bundle

$ app/console config:dump-reference TwigBundle
; These parameters can be imported into other config files 
; by enclosing the key with % (like %database_user%) 
; Comments start with ';', as in php.ini 
[parameters] 
 database_driver="pdo_mysql" 
 database_host="localhost" 
 database_name="symfony" 
 database_user="symfony" 
 database_password="symfony" 
 mailer_transport="smtp" 
 mailer_host="localhost" 
 mailer_user="" 
 mailer_password="" 
 locale="zh_CN" 
 secret="29f96e9e70c2797cb77dd088d3954d3c38d9b33f" 

先说一下怎么是Bundle。Symfony是以DI为主导的,可能您不明白怎么着是DI,没涉及,那不主要,你能够把Symfony的DI精晓成为叁个功效池,把程序中的全数机能都做成Bundle,也许你把Bundle精通成一组php文件组合而成的顺序就足以。
例如用户注册,登陆功用做成一个Bundle,你也得以把二个论坛的发帖回贴效用做成四个Bundle,自然也足以把稿子管理做成二个Bundle,然后用三个Bundle去调用和布局分化的Bundle,那么您就足以把网址组装起来了,而你写的种种Bundle,在其余的应用程序中还足以承继复用,那样写的Bundle更多,可复用性就越强,制作新品类的时候也越平价。

会收获如下的唤醒

  
要是全部OK的话,在您浏览器中输入下列地点时,你将得到二个德姆o页:

大家前几天就来确立友好的Bundle.在命令行中,使用命令:

# Default configuration for "TwigBundle"
twig:
  exception_controller: 'twig.controller.exception:showAction'
  # Deprecated since 2.6, to be removed in 3.0. Use twig.form_themes instead
  form:
    resources:
      # Default:
      - form_div_layout.html.twig
      # Example:
      - MyBundle::form.html.twig
  form_themes:
    # Default:
    - form_div_layout.html.twig

    # Example:
    - MyBundle::form.html.twig
  globals:
    # Examples:
    foo:         "@bar"
    pi:         3.14
    # Prototype
    key:
      id:          ~
      type:         ~
      value:        ~
  autoescape:
    # Defaults:
    - Symfony\Bundle\TwigBundle\TwigDefaultEscapingStrategy
    - guess
  autoescape_service:  null
  autoescape_service_method: null
  base_template_class: ~ # Example: Twig_Template
  cache:        '%kernel.cache_dir%/twig'
  charset:       '%kernel.charset%'
  debug:        '%kernel.debug%'
  strict_variables:   ~
  auto_reload:     ~
  optimizations:    ~
  paths:
    # Prototype
    paths:        ~
http://localhost/Symfony/web/app_dev.php
$php app/console generate:bundle
Bundle namespace: Symfony/Bundle/SampleBundle
Bundle name [SymfonySampleBundle]:
Target directory [/home/saharabear/workspace/symfony-sample/src]:
Configuration format (yml, xml, php, or annotation): yml
Do you want to generate the whole directory structure [no]? yes
Do you confirm generation [yes]? yes
Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]? yes
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]? yes

现实的第三方bundle安装情势,和该bundle的利用办法都足以在它的README文件里查看。

三、程序示例:

如此就马到功成建立了我们的Bundle,名字叫Symfony萨姆pleBundle,大家运用的Bundle
namespace是Symfony/Bundle/SampleBundle,那是一种约定,大家还足以创建其余的Bundle,举个例子Symfony/Bundle/PostBundle,
大概Symfony/Bundle/阿特icleBundle,而相应的Bundle
name就分别是SymfonyPostBundle只怕SymfonyArticleBundle。你也得以友善树立那多少个Bundle,那并不会影响当下大家的课程。

本文长久地址:
本文来源 IT985博客 ,转发时请注解出处及相应链接。

1.创建Bundle

对了,在大家创设的Bundle中,分别会变动下边多少个目录:

更加的多关于PHP框架相关内容感兴趣的读者可查看本站专项论题:《php非凡开拓框架计算》,《codeigniter入门教程》,《CI(CodeIgniter)框架进级教程》,《Yii框架入门及常用技术计算》及《ThinkPHP入门教程》

  首先创立八个Bundle:


Entity:那个目录实际不是必须的,相当多动静下独有在扭转实体的时候才会扭转,放置模型,也便是MVC中的M

Controller:那些目录会生成DefaultController.php,你能够在此处建构本人的Controller调节器,约等于MVC中的C

Resources:这几个目录上边还或然有子目录,个中views放置的是模板,也等于MVC中的V,而public放置的是静态文件,举个例子js,
css, images等等
④ Tests:放置单元测量试验与集成测量试验的代码,在这一个样例程序中临时无需
⑤ DependencyInjection:与DI相关的目录,暂且也无需去探听
⑥ SymfonySampleBundle.php:当前以此Bundle的定义文件

可望本文所述对大家基于Symfony框架的PHP程序设计有着援助。

php app/console gen:bundle "AcmeHelloBundle" src
  为了确保Acme名称空间可以被自动加载,请在你的app/autoload.php文件添加下列语句:
$loader->registerNamespaces(array( 
 // ...
 //添加自定义的名称空间 
 'Acme' => __DIR__.'/../src', 
 // ... 
)); 
  最后是将该Bundle注册到Symfony2中,请在你的app/AppKernel.php文件中添加下列语句:
// app/AppKernel.php 
public function registerBundles() 
{ 
 $bundles = array( 
  // ... 
  new AcmeHelloBundleAcmeHelloBundle(), 
 ); 

 // ... 

 return $bundles; 
} 

越来越多细节能够去阅读Symfony
的法定文书档案,而日前的主假设把那些Symfony的样例程序运维起来。

您或者感兴趣的稿子:

  • Symfony查询艺术实例小结
  • Symfony2联合查询落成格局
  • Symfony2使用Doctrine实行数据库查询办法实例总计
  • 高品质PHP框架Symfony2精湛入门教程
  • Symfony2完毕从数据库获取数据的章程小结
  • Symfony2学习笔记之模板用法详解
  • Symfony2框架学习笔记之表单用法详解
  • Symfony2框架创制项目与模板设置实例详解
  • symfony2.4的twig中date用法深入分析
  • Symfony2学习笔记之调整器用法详解
  • Symfony2实现在controller中获取url的方法
  • Symfony2针对输入时间开始展览查询的格局剖析

2.创制路由

规划实体

  路由得以创设在app/config/routing.yml中,但为了有个好的编制程序习于旧贯和代码组织,能够将它坐落所建Bundle目录中的Resources/config/routing.yml中,而在app/config/routing.yml中只保留到该路由文件的援用,如下所示:

在MVC的宏图意见中,M是最重大的,因为M表达的剧情是事情逻辑。小编感到假诺这几个地点往深远去研究,会一向斟酌到富血模型大概贫血模型,可是当下在这么些科目中常有
无需思虑这么多,你只要求理解实体正是MVC中的M,用于表明业务逻辑。比方说,大家要开拓三个稿子管理的系统,那么小说作者就意味着的职业逻辑。比如,大家的小说要有
标题,内容,小编,那么那三项就属于工作逻辑,而标题不可见为空,无法超过200长度,内容无法为空,小编却是可感觉空的,那么些也属于工作逻辑。同不常候,这些稿子须要被
存款和储蓄起来,举例存款和储蓄到数据库中,那么那一个M就应该能力所能达到映射到数据库的表中。大家把那几个M,叫实体。

# app/config/routing.yml 
homepage: 
 pattern: / 
 defaults: { _controller: FrameworkBundle:Default:index } 
hello: 
 resource: "@AcmeHelloBundle/Resources/config/routing.yml"

依旧少说废话,直接上代码。那么怎样创设实体呢?当然不是起始一点一点地写,而是径直用下边包车型地铁指令生成:

而真的的路由则写在src/Acme/HelloBundle/Resources/config/routing.yml路由文件中,如下所示:

$php app/console generate:doctrine:entity
Welcome to the Doctrine2 entity generator
This command helps you generate Doctrine2 entities.
First, you need to give the entity name you want to generate.
You must use the shortcut notation like AcmeBlogBundle:Post.
The Entity shortcut name: SymfonySampleBundle:Article
Determine the format to use for the mapping information.
Configuration format (yml, xml, php, or annotation) [annotation]:yml
Instead of starting with a blank entity, you can add some fields now.
Note that the primary key will be added automatically (named id).
Available types: array, simple_array, json_array, object,
boolean, integer, smallint, bigint, string, text, datetime, datetimetz,
date, time, decimal, float, blob, guid.
New field name (press to stop adding fields): title
Field type [string]:
Field length [255]: 200
New field name (press to stop adding fields): content
Field type [string]: text
New field name (press to stop adding fields): author
Field type [string]:
Field length [255]: 20
New field name (press to stop adding fields):
Do you want to generate an empty repository class [no]? yes
Summary before generation
You are going to generate a "SymfonySampleBundle:Article" Doctrine2 entity
using the "yml" format.
Do you confirm generation [yes]? yes
Entity generation
Generating the entity code: OK
You can now start using the generated code!
# src/Acme/HelloBundle/Resources/config/routing.yml 
hello: 
 pattern: /hello/{name} 
 defaults: { _controller: AcmeHelloBundle:Hello:index, name:'pu' }

透过那几个命令,你会发觉在Entity中确立了新的文件阿特icle.php,代码如下:

3.始建调控器:

namespace Symfony\Bundle\SampleBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * Article
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Symfony\Bundle\SampleBundle\Entity\ArticleRepository")
 */
class Article
{
  /**
   * @var integer
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;
  /**
   * @var string
   *
   * @ORM\Column(name="title", type="string", length=200)
   */
  private $title;
  /**
   * @var string
   *
   * @ORM\Column(name="content", type="text")
   */
  private $content;
  /**
   * @var string
   *
   * @ORM\Column(name="author", type="string", length=20)
   */
  private $author;
  /**
   * Get id
   *
   * @return integer
   */
  public function getId()
  {
    return $this->id;
  }
  /**
   * Set title
   *
   * @param string $title
   * @return Article
   */
  public function setTitle($title)
  {
    $this->title = $title;
    return $this;
  }
  /**
   * Get title
   *
   * @return string
   */
  public function getTitle()
  {
    return $this->title;
  }
  /**
   * Set content
   *
   * @param string $content
   * @return Article
   */
  public function setContent($content)
  {
    $this->content = $content;
    return $this;
  }
  /**
   * Get content
   *
   * @return string
   */
  public function getContent()
  {
    return $this->content;
  }
  /**
   * Set author
   *
   * @param string $author
   * @return Article
   */
  public function setAuthor($author)
  {
    $this->author = $author;
    return $this;
  }
  /**
   * Get author
   *
   * @return string
   */
  public function getAuthor()
  {
    return $this->author;
  }
}

  调控器的名字自然得是HelloController.php,原因很简短,因为您路由一度把调控器的名字给定下来了,在地点路由文件中的第4行和第7行中的调节器都以以AcmeHelloBundle:Hello初阶的,个中AcmeHelloBundle表示Bundle名,而Hello则表示调控器名,所以调控器必须是HelloController.php,Controller名缀是命名约定。而关于前边的index和say则是决定器类中的方法。下边就定义了index方法,当然方法名称为indexAction这些也是命名约定:

您能够一行不改地使用那些代码。那时候大家再来做多少个美妙的操作:

// src/Acme/HelloBundle/Controller/HelloController.php 
namespace AcmeHelloBundleController; 
use SymfonyComponentHttpFoundationResponse; 
class HelloController 
{ 
 public function indexAction($name) 
 { 
  return new Response('<html><body>Hello '.$name.'!</body></html>'); 
 } 
} 

复制代码 代码如下:

那样,当大家在浏览器中输入

$php app/console doctrine:schema:update –force

http://localhost/hello/index/World

本条操作,已经帮衬您通过Article.php构造建设了数据库和数据表,你不必要团结操作那么些进度,上面我们还有恐怕会对Article.php举行改建,而到时候只必要再行
实行上边的那么些操作,Symfony会协助您活动修改数据库的表结构。

就能够议及展览示Hello World!那样的字样。

丰盛封锁

4.始建立模型板:

地点我们创制了Article.php,既然这么些实体代表了切实的事务逻辑,因此大家要思索多少个有血有肉的难点:

  为了能够重用布局文件中的区块,能够应用模板来取代调节器中的HTML语句。首先创造页面布局文件:

  1. 用户必须填写题目和剧情
  2. 用户填写的标题无法赶过200个字
  3. 用户能够不填写我
{# app/Resources/views/layout.html.twig #} 
<!DOCTYPE html> 
<html> 
 <head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  <title>{% block title %}Hello Application{% endblock %}</title> 
 </head> 
 <body> 
  {% block body %}{% endblock %} 
 </body> 
</html> 

那几个就属于工作逻辑,而我辈得以修改Article.php如下,以充实对应的工作逻辑的封锁:

  注意,该文件位于app/Resources/views/目录中,效率范围是整整应用程序的大局模板文件。在该文件中定义了五个区块:title和body。接下来正是创立二个专项使用于Hello调整器的模板,如下所示:

namespace Symfony\Bundle\SampleBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
 * Article
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Symfony\Bundle\SampleBundle\Entity\ArticleRepository")
 */
class Article
{
  /**
   * @var integer
   *
   * @ORM\Column(name="id", type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;
  /**
   * @var string
   * @Assert\NotBlank(message="标题不可为空")
   * @Assert\Length(
   *   max=200,
   *   maxMessage="标题不能超过200个字"
   * )
   * @ORM\Column(name="title", type="string", length=200)
   */
  private $title;
  /**
   * @var string
   *
   * @Assert\NotBlank(message="文章内容不可为空")
   * @ORM\Column(name="content", type="text")
   */
  private $content;
  /**
   * @var string
   *
   * @ORM\Column(name="author", type="string", length=20,nullable=true)
   */
  private $author;
  /**
   * Get id
   *
   * @return integer
   */
  public function getId()
  {
    return $this->id;
  }
  /**
   * Set title
   *
   * @param string $title
   * @return Article
   */
  public function setTitle($title)
  {
    $this->title = $title;
    return $this;
  }
  /**
   * Get title
   *
   * @return string
   */
  public function getTitle()
  {
    return $this->title;
  }
  /**
   * Set content
   *
   * @param string $content
   * @return Article
   */
  public function setContent($content)
  {
    $this->content = $content;
    return $this;
  }
  /**
   * Get content
   *
   * @return string
   */
  public function getContent()
  {
    return $this->content;
  }
  /**
   * Set author
   *
   * @param string $author
   * @return Article
   */
  public function setAuthor($author)
  {
    $this->author = $author;
    return $this;
  }
  /**
   * Get author
   *
   * @return string
   */
  public function getAuthor()
  {
    return $this->author;
  }
}
{# src/Acme/HelloBundle/Resources/views/Hello/index.html.twig #} 
{% extends '::layout.html.twig' %} 
{% block body %} 
 Hello {{ name }}! 
{% endblock %} 

下一场推行同步数据库的操作:

  在该公文中,它接二连三了全局模板,並且定义了区块body,这样就覆写了大局模板中的body区块。若是系统在渲染到该模板时,会将区块body覆写全局模板的区块body,再开始展览渲染。
  最后,将调节器中的HTML语句改成渲染上述模板即可:

$ php app/console doctrine:schema:update --force
Updating database schema...
Database schema updated successfully! "1" queries were executed
// src/Acme/HelloBundle/Controller/HelloController.php 
namespace AcmeHelloBundleController; 
use SymfonyBundleFrameworkBundleControllerController; 
class HelloController extends Controller 
{ 
 public function indexAction($name) 
 { 
  return $this->render('AcmeHelloBundle:Hello:index.html.twig', array('name' => $name)); 
 } 
}

增加和删除改查

你或者感兴趣的文章:

  • Symfony查询格局实例小结
  • Symfony2联合查询达成格局
  • Symfony2使用Doctrine举办数据库查询艺术实例总结
  • Symfony2完成从数据库获取数据的法子小结
  • Symfony2学习笔记之模板用法详解
  • Symfony2框架学习笔记之表单用法详解
  • Symfony2框架成立项目与模板设置实例详解
  • symfony2.4的twig中date用法剖判
  • Symfony2学习笔记之调节器用法详解
  • Symfony2安装第三方Bundles实例详解
  • Symfony2实现在controller中获取url的方法
  • Symfony2针对输入时间张开查询的章程分析

好了,我们来做多个针对性小说的增加和删除改查操作。首先请试行上面包车型大巴下令:

$ php app/console generate:doctrine:crud
 Welcome to the Doctrine2 CRUD generator
This command helps you generate CRUD controllers and templates.
First, you need to give the entity for which you want to generate a CRUD.
You can give an entity that does not exist yet and the wizard will help
you defining it.
You must use the shortcut notation like AcmeBlogBundle:Post.
The Entity shortcut name: SymfonySampleBundle:Article
By default, the generator creates two actions: list and show.
You can also ask it to generate "write" actions: new, update, and delete.
Do you want to generate the "write" actions [no]? yes
Determine the format to use for the generated CRUD.
Configuration format (yml, xml, php, or annotation) [annotation]: yml
Determine the routes prefix (all the routes will be "mounted" under this
prefix: /prefix/, /prefix/new, ...).
Routes prefix [/article]: /article
 Summary before generation
You are going to generate a CRUD controller for "SymfonySampleBundle:Article"
using the "yml" format.
Do you confirm generation [yes]? yes
 CRUD generation
Generating the CRUD code: OK
Generating the Form code: OK
 You can now start using the generated code!

下一场请编辑DefaultController.php中的indexAction如下:

/**
 * @Route("/",name="welcome")
 * @Template()
 */
public function indexAction()
{
  return array();
}

编纂Resource/views/Default/index.html.twig内容如下:

<a href="{{path('article')}}">文章管理</a>

让大家看看美妙的作业,运营放手的测量检验服务器:

$php app/console server:run

好了,大家早就完结了那十分钟的博客,一切的代码都在Controller/ArticleController.php,Form/ArticleType.php,Resource/views/阿特icle/*.html.twig中,大家曾经完成了最宗旨的篇章管理效用。当然在你熟知Symfony今后,未应当要完全正视Symfony帮您生成这几个增加和删除改查操作,不过至少Symfony用二个发令让全体都先运营起来了,那不正是大家所要的原型吗?

正文长久地址:
正文来源 IT985博客 ,转发时请表明出处及相应链接。

愈来愈多关于PHP框架相关内容感兴趣的读者可查阅本站专项论题:《php非凡开辟框架总结》,《codeigniter入门教程》,《CI(CodeIgniter)框架进级教程》,《Yii框架入门及常用技术总计》及《ThinkPHP入门教程》

梦想本文所述对我们基于Symfony框架的PHP程序设计有着帮助。

您可能感兴趣的稿子:

  • Symfony2联合查询完成格局
  • Symfony2使用Doctrine举办数据库查询办法实例计算
  • 高质量PHP框架Symfony2杰出入门教程
  • symfony表单与页面实现本领
  • Symfony页面的着力制造实例详解
  • Symfony2达成从数据库获取数据的措施小结
  • Symfony2学习笔记之模板用法详解
  • Symfony数据校验方法实例分析
  • Symfony2框架学习笔记之表单用法详解
  • Symfony2创制页面实例详解
  • Symfony2安装的措施(2种办法)
  • Symfony查询艺术实例小结

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有