杰瑞科技汇

Symfony2教程该怎么学?

Symfony2 是一个强大、灵活且遵循最佳实践的 PHP 框架,它基于“组件”架构,这意味着您可以使用其中的任何一个部分(例如路由、表单、HTTP 内核)来构建自己的项目,而无需使用整个框架。


目录

  1. 第一部分:环境准备与安装

    • 1 系统要求
    • 2 安装 Composer
    • 3 创建第一个 Symfony2 项目
  2. 第二部分:项目结构初探

    • 1 核心目录解析
    • 2 app 目录详解
  3. 第三部分:创建一个简单的“Hello, World!”页面

    • 1 创建控制器
    • 2 配置路由
    • 3 访问页面
  4. 第四部分:构建一个完整的 CRUD 应用

    • 1 创建数据库和实体
    • 2 生成 CRUD 代码
    • 3 运行与测试
    • 4 深入理解生成的代码
  5. 第五部分:进阶概念与最佳实践

    • 1 服务容器
    • 2 Twig 模板引擎
    • 3 表单组件
    • 4 安全组件
  6. 第六部分:学习资源与总结


第一部分:环境准备与安装

1 系统要求

在开始之前,请确保您的开发环境满足以下要求:

  • PHP: 5.3.9 或更高版本 (推荐使用 PHP 5.6 或更高版本以获得更好的性能和安全性)。
  • PHP 扩展:
    • php-ctype
    • php-iconv
    • php-mbstring
    • php-spl
    • php-pdo (用于数据库操作)
    • php-xml
    • php-apcu (强烈推荐,用于缓存)
  • Web 服务器: Apache 2.2+ 或 Nginx。
  • 数据库: MySQL, PostgreSQL, SQLite 等 (PDO 支持的数据库)。

2 安装 Composer

Composer 是 PHP 的依赖管理工具,Symfony2 完全依赖 Composer 来管理其核心库和第三方包。

  1. 打开终端(命令行工具)。
  2. 运行以下命令来安装 Composer:
    curl -sS https://getcomposer.org/installer | php
  3. 将 Composer 移动到系统路径,以便全局使用:
    sudo mv composer.phar /usr/local/bin/composer

3 创建第一个 Symfony2 项目

我们使用 Symfony 的标准版骨架,它包含了开发一个典型应用所需的一切。

  1. 在您的 Web 服务器根目录(/var/www)下,运行以下命令:

    composer create-project symfony/framework-standard-edition my_project_name
    • my_project_name 是您为项目创建的文件夹名称。
  2. 命令执行完成后,进入项目目录:

    cd my_project_name
  3. 配置 Web 服务器:您需要配置您的 Web 服务器,将 Web 根目录指向 my_project_name/web 文件夹。

    • Apache: 在您的虚拟主机配置文件中,设置 DocumentRoot /var/www/my_project_name/web
    • Nginx: 在您的 Nginx 配置文件中,设置 root /var/www/my_project_name/web
  4. 设置文件权限:Symfony2 需要对 app/cacheapp/logs 目录写入权限,运行以下命令:

    # 在项目根目录下执行
    sudo setfacl -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
    sudo setfacl -d -R -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs
    • 如果您不熟悉 setfacl,可以使用一个简单的(但不够安全的)方法:
      sudo chmod -R 777 app/cache app/logs

在浏览器中访问 http://localhost/my_project_name/web/config.php,您应该能看到 Symfony 的配置检查页面,确保所有项都为绿色,然后点击“Configure your application”。


第二部分:项目结构初探

安装完成后,让我们来了解一下 Symfony2 项目的核心结构。

my_project_name/
├── app/                  # 应用程序的核心配置和资源
│   ├── cache/           # 缓存目录
│   ├── config/          # 配置文件目录 (最重要!)
│   │   ├── config.yml   # 主配置文件
│   │   ├── routing.yml  # 路由配置文件
│   │   └── ...
│   ├── logs/            # 日志目录
│   └── Resources/       # 应用级别的模板、CSS 等
├── bin/                 # Symfony 命令行工具
├── src/                 # 您的 PHP 代码 (控制器、实体、服务等)
├── vendor/              # Composer 下载的第三方库 (不要修改)
├── web/                 # Web 服务器根目录 (入口文件 index.php)
└── app.php              # 生产环境的入口文件

1 app 目录详解

  • app/config/: 这是您配置整个应用的地方。config.yml 是主配置文件,数据库连接、路由、服务等都在这里定义。
  • app/Resources/: 存放应用级别的资源,比如覆盖默认的模板或 CSS 文件。

2 src 目录

src 目录是存放您自己代码的地方,遵循 PSR-0/PSR-4 自动加载标准,通常按命名空间组织,您的所有控制器可以放在 src/YourBundle/Controller/ 目录下。


第三部分:创建一个简单的“Hello, World!”页面

在 Symfony2 中,一个典型的页面请求流程是:路由 -> 控制器 -> 视图

1 创建控制器

控制器是处理用户请求并返回响应的 PHP 函数或方法。

  1. src 目录下创建一个命名空间包,AppBundle

    • 目录结构:src/AppBundle/Controller/DefaultController.php
  2. DefaultController.php 中编写以下代码:

    // src/AppBundle/Controller/DefaultController.php
    namespace AppBundle\Controller;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Response;
    class DefaultController extends Controller
    {
        public function helloAction($name)
        {
            return new Response('<html><body>Hello '.$name.'!</body></html>');
        }
    }

2 配置路由

路由负责将 URL 映射到特定的控制器方法。

  1. 打开 app/config/routing.yml 文件。
  2. 在文件末尾添加以下配置:
    # app/config/routing.yml
    hello_world:
        path:     /hello/{name}
        defaults: { _controller: AppBundle:Default:hello }
  • path: 定义 URL 模式。{name} 是一个占位符,它会作为参数传递给控制器。
  • defaults: _controller 是 Symfony2 的约定,它告诉 Symfony 去调用哪个控制器,格式是 BundleName:ControllerName:ActionName

3 访问页面

清除缓存并访问页面。

  1. 清除缓存 (在项目根目录的终端中运行):

    php app/console cache:clear --env=dev
  2. 在浏览器中访问 http://localhost/my_project_name/web/hello/Symfony

您应该能看到页面显示:Hello Symfony!


第四部分:构建一个完整的 CRUD 应用

我们来创建一个更实用的应用:一个简单的任务管理器。

1 创建数据库和实体

实体 是一个 PHP 类,用于与数据库表进行交互。

  1. 创建数据库

    mysql -u root -p -e "CREATE DATABASE symfony_tutorial CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
  2. 配置数据库连接: 打开 app/config/parameters.yml 文件,修改数据库连接信息:

    # app/config/parameters.yml
    parameters:
        database_host:     127.0.0.1
        database_port:     null
        database_name:     symfony_tutorial
        database_user:     root
        database_password: your_password
  3. 生成实体: 使用 Symfony2 的命令行工具来生成实体类,在项目根目录运行:

    php app/console doctrine:generate:entity --entity="AppBundle:Task" --format=yml
    • AppBundle:Task 是一个简写,表示 AppBundle\Entity\Task
    • 命令行会提示您输入字段信息:
      • Field name -> task
      • Field type -> string (任务描述)
      • Field name -> dueDate
      • Field type -> datetime (截止日期)
      • Field name -> (直接回车,结束)
  4. 更新数据库: 实体定义好后,需要同步到数据库中。

    php app/console doctrine:schema:update --force

    您的 task 表已经创建在数据库中了。

2 生成 CRUD 代码

Symfony2 提供了强大的命令来自动生成完整的 CRUD 操作。

php app/console doctrine:generate:crud --entity="AppBundle:Task" --route-prefix=task --with-write --format=yml
  • --entity: 指定要操作的实体。
  • --route-prefix: 为所有生成的路由设置前缀,/task/
  • --with-write: 生成创建、更新和删除功能。
  • --format: 指定路由配置格式。

3 运行与测试

  1. 清除缓存

    php app/console cache:clear --env=dev
  2. 访问应用: 在浏览器中访问 http://localhost/my_project_name/web/task/

您现在拥有一个功能完整的任务管理界面,可以:

  • 列表:查看所有任务。
  • 创建:点击 "Create a new entry" 添加新任务。
  • 编辑:点击任务行的 "Edit" 修改任务。
  • 删除:点击任务行的 "Delete" 删除任务。

4 深入理解生成的代码**

  • 控制器: src/AppBundle/Controller/TaskController.php,这个文件包含了处理所有任务相关请求的方法(indexAction, newAction, editAction 等)。
  • 模板: src/AppBundle/Resources/views/Task/,这个目录包含了所有显示给用户的 HTML 模板文件,它们使用 Twig 模板引擎编写。
  • 路由: app/config/routing.yml 中自动添加了一组新的路由,用于处理任务的各种操作。

第五部分:进阶概念与最佳实践

1 服务容器

服务容器是 Symfony2 的心脏,它是一个“依赖注入”容器,负责管理您应用中的所有对象(服务),您可以将任何类注册为服务,然后在需要的地方轻松地“注入”它,而不是手动创建 new MyObject(),这使代码更易于测试和维护。

2 Twig 模板引擎

Twig 是 Symfony2 默认的、强大且安全的模板引擎,它允许您在 HTML 中嵌入简单的逻辑,

  • {{ variable }}: 输出变量。
  • {% for item in items %}: 循环。
  • {% if condition %}: 条件判断。
  • {# 这是注释 #}: 注释。

3 表单组件

Symfony2 的表单组件是其最强大的特性之一,它允许您:

  1. 在 PHP 中定义表单结构,与控制器逻辑分离。
  2. 自动生成 HTML 表单
  3. 处理数据验证和绑定
  4. 轻松地重新渲染表单,包括错误信息。

4 安全组件

Symfony2 的安全组件提供了完整的认证和授权系统。

  • 认证: 确认“你是谁?”(通过登录表单)。
  • 授权: 确认“你能做什么?”(只有管理员才能删除文章)。

第六部分:学习资源与总结

通过本教程,您已经掌握了 Symfony2 的核心概念:

  • 如何安装和配置一个 Symfony2 项目。
  • 理解了 MVC(模型-视图-控制器)模式在 Symfony2 中的实现。
  • 创建了从简单页面到完整 CRUD 应用的实例。
  • 接触了 Doctrine、Twig、表单等核心组件。

Symfony2 的学习曲线相对陡峭,但一旦掌握了其核心思想,您会发现它构建复杂、可维护、可扩展的应用程序的能力是无与伦比的。

推荐学习资源

  1. 官方文档 (首选):
  2. 书籍:
    • Symfony2 Cookbook: 提供了大量常见问题的解决方案。
    • Learning Symfony2: 一本很好的入门书籍。
  3. 视频教程:

    KnpUniversity 提供了大量高质量的 Symfony 教程。

  4. 社区:

继续探索,不断实践,您将很快成为一名 Symfony2 专家!

分享:
扫描分享到社交APP
上一篇
下一篇