>  기사  >  백엔드 개발  >  Symfony Pages_php 예제의 기본 생성 예제에 대한 자세한 설명

Symfony Pages_php 예제의 기본 생성 예제에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 20:24:45936검색

이 기사에서는 Symfony 페이지의 기본 생성 방법을 예제를 통해 분석합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 내용은 다음과 같습니다.

여기에서는 페이지를 구성하는 구조 요소인 모듈을 만드는 방법을 알아봅니다. 동시에 액션과 템플릿으로 구분되는 페이지를 만드는 방법도 함께 알아보겠습니다. 이유는 MVC 패턴 때문입니다. 링크와 인식은 기본적인 페이지 상호 작용이며 이러한 요소를 템플릿에 삽입하고 작업에서 처리하는 방법을 알아봅니다.

모듈 프레임워크 만들기

Symfony는 페이지를 모듈로 구성합니다. 페이지를 생성하기 전에 모듈을 생성하고 Symfony가 인식할 수 있는 파일 구조를 가진 빈 셸로 초기화해야 합니다.

Symfony 명령줄은 모듈 생성을 자동화합니다. init-module 작업을 호출하고 프로그램 이름과 모듈 이름을 매개변수로 사용하기만 하면 됩니다. myapp 프로그램을 생성한 후 이 프로그램에 mymodule 모듈을 추가하려면 다음 명령을 입력하면 됩니다.

코드 복사 코드는 다음과 같습니다.
> > 심포니 초기화 모듈 myapp mymodule
>> 디렉토리 ~/myproject/apps/myapp/modules/mymodule

>> ~/myproject/apps/myapp/modules/mymodule/actions
>> 파일 ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> ~/myproject/apps/myapp/modules/mymodule/config
>> ~/myproject/apps/myapp/modules/mymodule/lib
>> ~/myproject/apps/myapp/modules/mymodule/templates
>> 파일 ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php
>> ~/myproject/apps/myapp/modules/mymodule/validate
>> 파일 ~/myproject/test/function/myapp/mymoduleActionsTest.php
>> 토큰 ~/myproject/test/function/myapp/mymoduleActionsTest.php
>> 토큰 ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> 토큰 ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php

actions/,config/,lib/,templates/,validate/ 디렉터리와 별도로 이 명령은 세 개의 파일만 생성합니다. test/ 디렉터리에 있는 것이 단위 테스트입니다. actions.class.php는 기본 모듈 시작 페이지를 가리킵니다. template/indexSuccess.php 파일이 비어 있습니다.

actions/actions.class.php 파일에서 기본적으로 생성되는 액션:


코드 복사 코드는 다음과 같습니다.
mymoduleActions 클래스는 sfActions를 확장합니다
{
공용 함수 excuteIndex()
{
             $this->forward('기본값', '모듈');
}
}
?>

모든 새 모듈에 대해 Symfony는 기본 인덱스 작업을 생성합니다. 이는 ExecuteIndex라는 액션 메소드와 indexSuccess.php라는 템플릿 파일로 구성됩니다. 다음 URL을 통해 해당 페이지를 탐색할 수 있습니다:
http://localhost/myapp_dev.php/mymodule/index
여기서는 기본 인덱스 작업을 사용하지 않으므로 actions.class.php 파일에서 excuteIndex() 메서드를 제거하고 template/ 디렉터리에서 indexSuccess.php 파일을 삭제할 수 있습니다.

Symfony는 명령줄 외에도 모듈을 초기화하는 다른 방법도 제공합니다. 한 가지 방법은 디렉터리와 파일을 수동으로 만드는 것입니다. 많은 경우 모듈의 작업과 템플릿은 주어진 데이터 테이블의 데이터를 조작하기 위한 것입니다. 데이터 테이블에서 데이터 레코드를 생성, 가져오기, 업데이트 및 삭제하는 데 필요한 코드는 일반적으로 동일하기 때문에 Symfony는 이 코드를 생성할 수 있는 프레임워크라는 메커니즘을 제공합니다. 추후 계속해서 소개해드리겠습니다.

페이지 추가

Symfony에서 페이지 이면의 로직은 액션에 저장되고 표면은 템플릿에 저장됩니다. 논리가 없는 페이지에는 여전히 빈 작업이 필요합니다.

작업 추가

'Hello, world!' 페이지는 myAction 작업을 통해 액세스됩니다. 이 작업을 생성하려면 아래와 같이 mymoduleActions 클래스에 ExecuteMyAction 메서드를 추가하기만 하면 됩니다.

코드 복사 코드는 다음과 같습니다.
mymoduleActions 클래스는 sfActions를 확장합니다
{
공용 함수 excuteMyAction()
{
}
}

액션 메서드 이름은 항상 'Xxx'() 형식으로 이루어지며 이름의 두 번째 부분은 액션 이름이고 첫 글자는 대문자로 표시됩니다.

이제 다음 URL을 요청할 수 있습니다:
http://localhost/myapp_dev.php/mymodule/myAction

Symfony는 myActionSuccess.php 템플릿이 누락되었다고 불평합니다. 이것은 정상입니다. Symfony에서 페이지는 일반적으로 액션과 템플릿으로 구성됩니다.

URL이 응답의 일부입니다

Symfony에는 실제 작업 이름과 호출해야 하는 URL 형식을 완전히 분리할 수 있는 라우팅 시스템이 포함되어 있습니다. 이를 통해 사용자 정의 URL이 마치 응답의 일부인 것처럼 형식을 지정할 수 있습니다. 더 이상 파일 구조나 요청의 매개변수 데이터에 의해 제한되지 않으며 작업의 URL은 해결하려는 방식으로 보입니다. 예를 들어, Article이라는 모듈에 대한 인덱스 작업 호출은 일반적으로 다음과 같습니다.
http://localhost/myapp_dev.php/article/index?id=123

이 URL은 데이터에서 지정된 기사를 검색합니다. 그러나 Routingyml 구성 파일을 약간 변경하면 URL을 완전히 다른 방식으로 작성할 수 있습니다.
http://localhost/articles/europe/france/finance.html

이러한 URL은 검색 엔진에 친숙할 뿐만 아니라 사용자에게도 매우 중요합니다. 따라서 사용자는 주소 표시줄을 의사코드 명령으로 사용하여 쿼리를 사용자 정의할 수 있습니다.
http://localhost/articles/tagged/finance 프랑스 유로

Symfony는 사용자를 위한 URL을 구문 분석하고 생성하는 방법을 알고 있습니다. 라우팅 시스템은 요청된 매개변수를 압축 URL에서 자동으로 제거하여 작업에 사용할 수 있도록 합니다. 또한 응답에 포함된 하이퍼링크의 형식을 더욱 깔끔하게 보이도록 합니다. 이 기능에 대한 자세한 내용은 9장에서 알아보겠습니다.

요약하자면 이는 프로그램 액션의 이름을 지정하는 방식이 해당 액션을 호출하는 URL의 모양에 영향을 받아서는 안 되며 오히려 프로그램 내 액션의 기능에 의해 제어되어야 함을 의미합니다. 동작의 이름은 동작이 실제로 수행하는 작업을 설명하며 일반적으로 부정사 형태(예: 표시, 목록, 편집)의 동사입니다. 작업 이름은 최종 사용자에게 전혀 보이지 않을 수 있으므로 명시적인 작업 이름을 사용하는 것에 대해 걱정할 필요가 없습니다. 코드 주석을 효과적으로 사용하여 함수 기능을 설명할 수 있으므로 코드를 더 읽기 쉽게 만들 수 있습니다.

템플릿 추가

액션을 캡슐화하려면 템플릿이 필요합니다. 템플릿은 모듈의 template/ 디렉토리에 있는 파일로, 일반적으로 action과 action의 접미사를 따서 명명됩니다. 기본 작업 접미사는 "success"이므로 myAction 작업을 위해 생성된 템플릿 파일 이름은 myActionSuccess.php로 지정해야 합니다.

템플릿에는 프레젠테이션 코드만 포함되어 있으므로 PHP 코드는 최대한 적게 포함해야 합니다. 실제로 "Hello, world!"를 표시하는 페이지는 단 한 줄의 코드만 포함된 템플릿입니다.

코드 복사 코드는 다음과 같습니다.

Hello, world!

템플릿에서 일부 PHP 코드를 실행해야 하는 경우 아래 나열된 일반적인 PHP 구문을 사용하지 않아야 합니다. 대신, 우리의 템플릿은 다른 PHP 구문을 사용하여 작성되어야 하며, 이는 PHP가 아닌 프로그램에서도 코드를 더 쉽게 이해할 수 있도록 합니다. 최종 코드가 정확할 뿐만 아니라 제어문에만 해당 코드가 있으므로 복잡한 PHP 코드를 계속 작동하는 데 도움이 됩니다.

일반적인 PHP 구문은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

Hello, world!



if ($test)
{
echo "

".time()."

";
}
 
?>

대체 PHP 구문은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

Hello, world!






액션에서 템플릿으로 정보 전송

액션의 역할은 모든 복잡한 계산, 데이터 읽기 및 테스트를 완료하고 출력 또는 테스트할 템플릿 변수를 설정하는 것입니다. Symfony는 전역 네임스페이스의 템플릿에서 액션 클래스 속성을 사용할 수 있도록 합니다. 다음은 작업에서 템플릿으로 정보가 전달되는 방법을 보여줍니다.

템플릿에서 사용할 수 있도록 작업에 작업 속성을 설정합니다.

코드 복사 코드는 다음과 같습니다.

mymoduleActions 클래스는 sfActions를 확장합니다
{
공용 함수 excuteMyAction()
{
           $today = getdate();
$this->hour = $today['hours'];
}
}

템플릿은 작업 속성에 직접 액세스합니다.

코드 복사 코드는 다음과 같습니다.

Hello, world!


= 18): ?>

아니면 안녕하십니까? 벌써


템플릿은 작업에 변수를 설정하지 않고도 이미 일부 데이터에 액세스할 수 있습니다. 각 템플릿은 일반적으로 $sf_context, $sf_request, $sf_params, $sf_user 개체의 메서드를 호출할 수 있습니다. 여기에는 현재 콘텐츠, 요청, 요청 매개변수 및 세션과 관련된 데이터가 포함됩니다. 우리는 곧 그 사용법을 배우게 될 것입니다.

양식을 사용하여 사용자로부터 정보 수집

양식은 사용자로부터 정보를 수집하는 좋은 방법입니다. HTML로 양식과 양식 요소를 작성하는 것은 때로 매우 번거로울 수 있습니다. 특히 XTHML로 작업하려는 경우에는 더욱 그렇습니다. 아래와 같이 일반적인 방법으로 Symfony 템플릿에 양식 요소를 포함할 수 있지만 Symfony는 이 작업을 더 쉽게 할 수 있도록 도우미를 제공합니다.

템플릿에는 일반적인 HTML 코드가 포함될 수 있습니다.

코드 복사 코드는 다음과 같습니다.

Hello, world!


= 18): ?>

아니면 안녕하십니까? 벌써







헬퍼는 템플릿에 사용되는 Symfony 정의 PHP 함수입니다. 실제 HTML 코드를 직접 작성하는 것보다 훨씬 빠르게 HTML 코드를 출력합니다. Symfony 도우미를 사용하면 다음 코드로 위의 일반적인 HTML 코드와 동일한 출력을 얻을 수 있습니다.

코드 복사 코드는 다음과 같습니다.

Hello, world!


= 18): ?>

아니면 안녕하십니까? 벌써







위 코드에서 도우미 버전을 사용하는 것이 HTML 코드를 작성하는 것보다 빠르지 않다고 생각되면 다음 상황을 고려해 볼 수 있습니다.

코드 복사 코드는 다음과 같습니다.
$card_list = 배열(
'비자' => '비자',
'MAST' => '마스터카드',
'AMEX' => '아메리칸 익스프레스',
'DISC' => '발견');
echo select_tag('cc_type', options_for_select($card_list, 'AMEX'));
?>

다음과 같은 HTML 출력이 발생합니다.

코드 복사 코드는 다음과 같습니다.