>php教程 >PHP开发 >고성능 PHP 프레임워크 Symfony2 클래식 입문 튜토리얼

고성능 PHP 프레임워크 Symfony2 클래식 입문 튜토리얼

高洛峰
高洛峰원래의
2016-12-26 11:27:071579검색

Symfony2는 PHP 언어 기반의 웹 개발 프레임워크로 빠른 개발 속도와 높은 성능을 특징으로 합니다. 이 글에서는 프로그램 예제의 구현 과정을 통해 Symfony2 프레임워크의 구성과 프로그램 개발을 자세히 설명합니다.

우분투 시스템을 예로 들어 .tgz 압축 패키지를 사용하고 /var/www 디렉토리에 소스 파일의 압축을 풀고 다음을 실행합니다.

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

The 위의 ###은 버전 번호를 의미합니다. 제가 다운로드했을 때는 BETA5였습니다.

압축해제 후 Symfony2의 디렉터리는 다음과 같습니다.

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

설치해야 하는 경우(없이 다운로드한 경우) 공급업체 버전) 또는 공급업체(타사) 콘텐츠를 업데이트할 때 다음을 사용할 수 있습니다.

cd /var/www/Symfony
php bin/vendors install

2. 구성

구성 Symfony2의 사용법은 매우 간단합니다. 브라우저에

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

을 입력한 다음 프롬프트를 따르세요. 주목할 만한 점은 app/cache 및 app/logs 디렉터리의 권한 문제입니다. Ubuntu에 설치했으므로 사용할 수 있습니다(firehare는 내 사용자 이름이므로 여기에서 사용자 이름으로 바꿀 수 있습니다).

#为了保险起见
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

시스템이 setfacl 명령을 지원하지 않는 경우 두 곳에서 확인할 수 있습니다.
setfacl이 설치되었는지 여부, 그렇지 않은 경우 다음을 수행할 수 있습니다. 다음 명령 설치를 사용하십시오(Ubuntu 11.10에서는 기본적으로 설치되는 것으로 보이며 패키지는 acl이라고 함):

sudo apt-get install setfacl

setfacl이 설치된 경우 , /etc/fstab 파일을 확인하여 acl 옵션이 추가되었는지 확인하세요.

# /var was on /dev/sda7 during installation
UUID=c2cc4104-b421-479a-b21a-1108f8895110 /var ext4 defaults,acl 0 2

그런 다음 데이터베이스 이름과 기타 정보를 다음에 따라 입력하세요. 페이지 메시지가 나타나면 정보를 복사합니다. 다음과 같이 /var/www/Symfony/app/config/parameters.ini 파일로 이동합니다.

; These parameters can be imported into other config files
; by enclosing the key with % (like %database_user%)
; Comments start with &#39;;&#39;, 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"


모든 것이 정상이라면 브라우저에 다음 주소를 입력하면 데모 페이지가 나타납니다:

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

3. 프로그램 예:

1. 번들 생성:

먼저 번들 생성:

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

2. 경로 생성

라우팅은 app/config/routing.yml에서 생성할 수 있지만, 좋은 프로그래밍 습관과 코드 정리를 위해서는 생성된 Bundle 디렉토리의 Resources/config/routing.yml에 넣어두시면 됩니다. app/config/routing. 아래와 같이 라우팅 파일에 대한 참조만 yml에 유지됩니다.

# 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 라우팅 파일은 다음과 같습니다.

# src/Acme/HelloBundle/Resources/config/routing.yml
hello:
 pattern: /hello/{name}
 defaults: { _controller: AcmeHelloBundle:Hello:index, name:&#39;pu&#39; }

3. 컨트롤러 생성:

컨트롤러 이름은 HelloController.php여야 합니다. 라우팅에 이미 컨트롤러 이름이 지정되어 있기 때문입니다. 위 라우팅 파일의 4번째 줄과 7번째 줄에 있는 컨트롤러는 모두 AcmeHelloBundle:Hello로 시작합니다. AcmeHelloBundle은 번들 이름을 나타내고 Hello는 컨트롤러 이름을 나타내므로 컨트롤러는 HelloController.php여야 하며 컨트롤러 이름 확장자는 명명 규칙입니다. 후속 인덱스는 컨트롤러 클래스의 메소드입니다. 물론 인덱스 메서드는 아래에 정의되어 있습니다. indexAction이라는 메서드 이름도 명명 규칙입니다.

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

이렇게 하면

브라우저에서
http://localhost/hello/index/World

에 Hello World!라는 단어가 표시됩니다.

4. 템플릿 만들기:

레이아웃 파일의 블록을 재사용하려면 템플릿을 사용하여 컨트롤러의 HTML 문을 바꿀 수 있습니다. 먼저 페이지 레이아웃 파일을 만듭니다.

{# 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>

이 파일은 app/Resources/views/ 디렉터리에 있으며 해당 범위는 전역 템플릿입니다. 전체 신청서에 대해. 이 파일에는 제목과 본문이라는 두 개의 블록이 정의되어 있습니다. 다음 단계는 아래와 같이 특별히 Hello 컨트롤러용 템플릿을 만드는 것입니다.

   
{# src/Acme/HelloBundle/Resources/views/Hello/index.html.twig #}
{% extends &#39;::layout.html.twig&#39; %}
{% block body %}
 Hello {{ name }}!
{% endblock %}

이 파일에서는 전역 템플릿을 상속하고, 전역 템플릿의 본문 블록을 재정의하는 블록 본문이 정의됩니다. 시스템이 이 템플릿을 렌더링하면 전역 템플릿의 블록 본문을 블록 본문으로 덮어쓴 다음 렌더링합니다.
마지막으로 컨트롤러의 HTML 문을 변경하여 위 템플릿을 렌더링합니다.

// src/Acme/HelloBundle/Controller/HelloController.php
namespace AcmeHelloBundleController;
use SymfonyBundleFrameworkBundleControllerController;
class HelloController extends Controller
{
 public function indexAction($name)
 {
  return $this->render(&#39;AcmeHelloBundle:Hello:index.html.twig&#39;, array(&#39;name&#39; => $name));
 }
}

더 많은 고성능 PHP 프레임워크 Symfony2 클래식 소개 튜토리얼용 관련 기사는 PHP 중국어 홈페이지를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.