2010-07-10 4 views
10

phpBB2에서 해킹해서 PHP를 배웠고, 데이터베이스에 몇 개의 모듈을 제출했습니다. 다른 모듈은 다운로드하여 사용했습니다. (나는 phpBB2가 이제는 phpBB3에서 더 이상 지원되지 않는다고 생각하므로, v2 mods 데이터베이스가 더 이상 필요하지 않습니다.)PHP와 HTML을 결합하는 가장 좋은 방법은 무엇입니까?

phpBB에 대한 가장 좋아하는 점 중 하나는 편집기 시스템을 완전히 분리시키는 템플릿 시스템이었습니다. HTML과 PHP. PHP 파일에는 PHP, 논리, 데이터베이스 쿼리 및 템플릿 활성화가 포함되어 있습니다. TPL 파일에는 템플릿, HTML, 템플릿 변수 및 특수 HTML 주석이 포함되어있어 조건부 또는 반복 블록을 허용합니다.

그러나 누군가의 PHP 코드를 온라인으로 볼 때마다 단일 함수 또는 작은 코드 조각을 사용하거나 PHP에 HTML이 포함 된 문자열 (또는 더 나쁜 HTML이 포함 된 PHP 코드)이 가득합니다. phpBB는 실제로 언어와 마크 업 언어를 분리 한 유일한 PHP입니다. 다른 PHP 코드베이스가 그러한 일을하는 경우는 거의 없습니다.

일부 PHP로 다시 작업하기를 원하지만 이번에는 phpBB 포럼이 아니며 팀으로 구성됩니다. 내 경험에 따라, PHP와 HTML의 분리는 드문 경우입니다. 제발 이것에 대해서 틀리게 저를 고쳐주십시오!). 그러나, 나는 그 분리 선에 너무 익숙하다, 나는 혼합 PHP와 HTML을 읽는 것을 싫어한다.

  • PHP와 HTML 완전히 별도의 PHP 블록과 헤어 졌 HTML의 문자열
  • HTML 파일과

    • PHP 파일 (: PHP 프로그래밍의 "현실 세계"에서

      이 선호하는 방법 무엇 나는 원한다?)

    • 다른 것?
  • 답변

    7

    PHP를 HTML에서 분리하려면 템플릿 엔진 (예 : smarty http://www.smarty.net/)을 사용할 수 있습니다.

    +0

    나는 phpBB를 피기 백하지 않고 PHP에서 개발하고자하는 것과 정확히 같은 종류라고 생각합니다. –

    3

    필자의 경험에 비추어 보았을 때, PHP 개발은 PHP의 개발이 더 좋든 나쁘 든간에 PHP를 통해 서로 연결되어 있기 때문에 필요에 따라 HTML 스 니펫을 출력 할 수 있습니다.

    마음하지만, 내 PHP 경험의 대부분은 내가 할 수있는 템플릿 시스템을 사용하는 것을 선호

    +0

    이것은 많은 의미가 있으며, 내가보기에 싫어하는 거짓말을 보는 모든 코드를 설명합니다. –

    2

    "우리가 가장 우아하고 효율적인 솔루션을 필요 '보다'우리가 작동 뭔가가 필요"솔루션의 이상입니다 HTML 파일에 포함 된 PHP 코드의 양을 최소화하십시오. 필자는 HTML에서 PHP를 완전히 분리 할 방법이 전혀 없지만 비즈니스 논리 (데이터베이스)와 표현 논리를 분리하는 것만으로도 충분하다고 생각합니다.

    내 템플릿 시스템은 가정식으로 구워졌지만 Google 검색을 수행하여 다양한 기능을 찾을 수 있습니다.

    4

    우리는 MVC 용 사용자 정의 코드 점화기 기반을 사용하고 논리와 레이아웃을 구분했습니다. 그게 반드시 우리의 HTML에 PHP가 없다는 것을 의미하는 것은 아니며 단지 논리에 사용되지 않는다는 것을 의미합니다. 템플릿 imho에서 PHP 코드로 레코드 세트를 루프하는 것은 완벽합니다. 비즈니스 객체와 대화를 시도하지 않고 실제로 레이아웃 템플릿에서 작업을 수행하십시오. 당신은 또한 모든 PHP 코드를 없애고 싶다면 tal 또는 템플릿을위한 백만 가지 다른 것을 찾아 볼 수도 있습니다.나는 좀 그

    편집 고정 오타

    내 경험을 바탕으로
    2

    , PHP와 HTML의 분리가 흔하지 않는 것은 "여기에 특별한 상황을 삽입"하지만 대부분 잔인한 생각하고

    참된. 하지만 많은 PHP 코드는 경험이 부족한 개발자가 작성합니다. 또한 PHP는 좋은 코드를 작성하는 것을 권장하지 않고 대신 HTML 코드와 프로그래밍 코드를 섞어 놓을 수있는 기능 중 하나입니다.

    고품질 코드를 사용하기를 원한다면 쉽게 유지 관리하고 확장하려면 템플릿 엔진이나 비슷한 것을 사용하는 것이 좋습니다. 믹싱은 코드의 가독성에 큰 영향을 주며, 시간이 지남에 따라 상황이 더욱 악화되고 악화 될 것입니다. 리팩토링은 불가능하지는 않더라도 고통 스러울 것입니다.

    지금, 당신은 방법의 큰 선택 PHP

      가장 눈에 띄는 하나가 기존의 레이아웃 엔진을 사용하는 것입니다
    • 에서 HTML을 분리해야합니다. 그들 중 많은 것들이 있습니다. 어떤 것들은 아주 잘 수행되었고, 매우 낮은 성능의 영향을줍니다.

    • 사용자가 직접 엔진을 작성할 수도 있습니다. 큰 프로젝트에서 좋은 아이디어가 아닐 수도 있지만 (작은 프로젝트에서 왜 재발 명을합니까?) 작은 프로젝트에서나 매우 구체적인 것을 필요로 할 때 솔루션이 될 수 있습니다.

    • 대부분의 프로젝트에서 사용하는 마지막 방법은 비즈니스 계층 (XML 직렬화는 PHP에서 매우 쉽습니다)에서 XML을 작성한 다음 XSLT를 사용하여 HTML 페이지로 변환하는 것입니다. 유지 보수가 훨씬 쉬우 며 이해하기 쉽도록 웹 사이트를 운영 할 수 있으며 필요에 따라 HTML 페이지 대신 프로그래밍 방식으로 웹 사이트 데이터에 액세스 할 수 있습니다. 반면에 성능이 크게 저하되므로 초당 수천 개의 쿼리가 포함 된 대규모 웹 사이트를 대상으로하지 않습니다.

    3

    나는 온라인으로 다른 사람의 PHP 코드를 볼 언제든지,이 중 하나의 기능이나, 또는 PHP 작업을 작은 조각은 HTML 포함하는 문자열로 가득하다 (또는 더 나쁜, PHP와 HTML은 산재).

    예, 일반적인 코드 품질은 당혹 스럽습니다.

    자신 만의 완벽한 템플릿 엔진을 사용할 수 있지만 과장 될 수 있으며 많은 경우 프리젠 테이션 논리를 작성할 때 제공되는 제한된 도메인 별 언어가 제공됩니다. PHP에서.

    당신이 원하는 경우

    는 여전히 정상 PHP를 작성하지만, 스파게티없이 수 :

    1. 파일의 상단에 또는 다른 파일에서 액션 코드를 유지합니다. 어떤 종류의 HTML이나 템플릿이 아니라 여기에 애플리케이션 로직 만 넣으십시오. 템플릿에 의해 표시되어야하는이 단계에서 생성 된 모든 정보는 비즈니스 로직로드 중간에 이 아니고print이 아닌 템플릿 부분으로 전달되는 변수로 이동해야합니다.

    2. 태그 기반 템플릿에 대한 지식을 갖고 PHP에 적용하십시오.HTML과 PHP 프리젠 테이션 로직을위한 코드 계층 구조를 올바르게 작성한 것처럼, 실제로 XHTML을 사용하는지 여부에 상관없이 '올바른 형식의'XML을 작성하는 것처럼 말입니다. HTML을 모든 비용으로 문자열에 넣지 않도록하십시오.

    3. 을 호출하는 더 쉬운 방법을 정의하십시오. 그렇지 않은 경우 항상 타이핑하는 것이 정말 고통스럽고 항상 타이핑하지 않으면 잠재적으로 보안에 민감한 오류가 발생합니다 . 현실 세계에서,

      오 :

    는 예 : PHP 프로그래밍의 "현실 세계"에서

    <?php 
        // active code here 
        // do things 
        // put any errors in a $errors array 
    
        // this trivial function would presumably be in an include 
        // 
        function h($s) { 
         echo htmlspecialchars($s, ENT_QUOTES); 
        } 
    ?> 
    
    <body> 
        <?php if (count($errors)!=0) { ?> 
         <ul id="errors"> 
          <?php foreach ($errors as $error) { ?> 
           <?php h($error); ?> 
          <?php } ?> 
         </ul> 
        <?php } ?> 
        ... 
    </body> 
    

    이 선호하는 방법 무엇을 요약하자면, PHP 프로그래밍의, 평균적인 프로젝트는 어떤 생각도없이 함께 던져진 접근 방식을 가지고 있습니다. 현실 세계에서 코드는 유지 불능이며 버그에 휩싸이고 안전하지 않습니다. 업계 표준은 모든면에서 망가져 있기 때문에 업계 표준을보고 싶지는 않습니다.

    +0

    이런 식으로 포맷 된 중요한 프로젝트의 소스 코드를 가르쳐 주시겠습니까? 나는이 개념이 마음에 든다. 그러나 그것이 더 큰 스케일에서 얼마나 읽기 쉽고 얼마나 특정한 상황이 다루어 지는지보고 싶다. – Robert

    +3

    아니, 할 수 없다. 필자는 공개적으로 사용할 수있는 PHP 프로젝트를 아직 만났습니다. 템플릿을 사용하는 템플릿은 꼬여 있지 않은 작은 echo-HTML과 같은 것이 아닙니다. – bobince

    4

    개인적으로 PHP가 이미 훌륭한 솔루션 일 때 개인적으로 템플릿 시스템/언어를 믹스에 추가 할 이유가 없습니다.

    내가 선호하는 방법은 디스플레이를 애플리케이션 로직과 분리하는 것이다. 이것은 완전히 날린 MVC 프레임 워크의 형태를 취할 수 있습니다. 그러나 코드를 작성하는 방법에 대한 간단한 문제 일 수도 있습니다.

    확장 :

    적 ASP 코드의 풍부한 양의 내 HTML을 산재의 실수를하기 때문에, 내가 화면에서 별도의 페이지 논리에 노력했다

    . 단일 페이지 내에서 이것은 모든 페이지 로직을 맨 위에 놓고 변수에 표시 할 정보를 저장 한 다음 PHP 파일의 맨 아래에있는 HTML 내에 반향 출력합니다. HTML 부분에 나타나는 유일한 논리는 표시 로직입니다. 즉, 간단한 오류 처리, ifs, 루프 등. 기본적으로 대부분의 템플릿 언어에서 찾을 수있는 것과 동일한 내용입니다.

    템플릿 언어를 피하는 이유는 그것이 내가 염려해야 할 또 다른 형식의 구문이라는 것입니다. 점은 무엇인가? PHP는이 목적에 필요한 것 이상을 제공합니다.

    한편, 당신이 분리 것들에 의해 간단한 MVC 접근 방식을 취할 수

    controller.php

    <?php 
    // some application logic 
    $data['message'] = 'Hello, World.'; 
    
    include 'view.php'; 
    
    exit; 
    ?> 
    

    view.php :

    <html> 
    <head> 
    <title> 
    A simple 'MVC' view 
    </title> 
    </head> 
    <body> 
    <p> 
    <?php 
    
    echo $data['message']; 
    
    ?> 
    </p> 
    </body> 
    </html> 
    

    이 단점이없는 것은 아니다 및 문제. 그러나 애플리케이션 로직과 디스플레이를 완전하고 깨끗하게 분리 할 수 ​​있다고 생각한다면 오해를 불러 일으킬 수 있습니다.

    +1

    이것을 확장 할 수 있습니까? PHP는 PHP와 HTML을 분리하는 솔루션과 정확히 얼마나 일치합니까? MVC 접근 방식의 예는 무엇입니까? 나는 MVC의 개념을 이해하지만 내 주말 두뇌 (절반 만 켜져있다!)에는 논리와 표현을 분리하기위한 PHP MVC 개념이 없다. –

    +0

    확장 된 답변 주셔서 감사합니다. 귀하의 추천은 [bobince] (http://stackoverflow.com/questions/3220655/preferred-way-to-combine-php-and-html/3220993#3220993)의 권장 사항과 유사합니다. –

    +0

    @bobince 예, 그렇습니다. 내 답변 동기 템플릿 시스템을 사용하여 경고하는 것입니다. 유용 할 수있는 상황이 있습니다. 프론트 엔드 전용 팀이 있다면 말하십시오. 그러나 PHP를 알고 있고 HTML (또는 백엔드 개발자가 많이 만져야하는 책임)에 대한 책임이 있다면 템플릿 시스템은 일반적으로 과잉이라고 생각합니다. 좋은 코딩 방법은 별도의 프로세싱 레이어 없이도 동일한 효과를 얻을 수 있습니다. –

    0

    대부분의 코드는 PHP 및 HTML 문자열로 시작하고 큰 재 작성 중에 템플릿 시스템으로 발전합니다. 콘텐츠를 로직과 구분하려면 팀 간의 설계, 계획 및 의사 소통이 필요합니다. 데이터 형식으로 PHP 배열 대신 XML 또는 JSON을 사용하면이 작업을 훨씬 쉽게 수행 할 수 있습니다.

    관련 문제