Symfony可同时作为API和网页服务,通过路由区分/api/和/page/,使用控制器返回JSON或Twig渲染页面,配置Nginx指向public目录,设置生产环境变量、禁用调试、启用HTTPS与CORS,优化性能即可部署。
将 PHP 网站部署到 Symfony API 项目中,核心是明确“网站”与“API”的角色分工。通常,Symfony 被用作后端 API 服务,而前端可能是独立的网站(如 Vue、React 或传统 PHP 页面)。如果你希望把一个现有的 PHP 网站整合进 Symfony API 项目,或让 Symfony 同时提供 API 和网页服务,可以按以下方式操作。
Symfony 默认支持同时处理 API 请求和传统网页请求。你可以让同一个 Symfony 应用既提供 JSON 接口,又渲染 HTML 页面。
典型场景:
无需拆分项目,只需合理规划路由和控制器逻辑即可。
在 config/routes.yaml 中定义 API 和网页路由:
# config/routes.yaml
api_users:
path: /api/users
controller: App\Controller\Api\UserController::list
web_homepage:
path: /home
controller: App\Controller\Web\HomeController::index
创建对应的控制器:
// src/Controller/Api/UserController.php
r extends AbstractController确保生产环境正确配置:
APP_ENV=prod
DATABASE_URL)composer install --no-dev -o
php bin/console cache:clear --env=prod
npm run build(配合 Webpack Encore)将 Nginx 指向 Symfony 的 public 目录,并正确重写 URL:
server {
listen 80;
server_name yourdomain.com;
root /var/www/symfony/public;
index index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}}
确保 PHP-FPM 正常运行,并启用必要扩展(如 pdo_mysql、curl、json 等)。
5. 安全与性能优化
部署后建议:
APP_DEBUG=false
composer require nelmio/cors-bundle
基本上就这些。Symfony 本身就是一个完整的 PHP 框架,既能做 API 也能服务网页,关键是按功能划分模块和路由,再配合正确的服务器配置完成部署。不复杂但容易忽略环境和权限问题。