모든 PHP가 실행 된 후 데이터를 출력하는 방법은 무엇입니까?

샤리 코프 블라디슬라프

내 간단한 사이트에서 이동 경로를 만들고 있습니다.

헬퍼 클래스가 있습니다. 다음과 같이 사용합니다 (예제).

$Breadcrumbs = new Breadcrumbs();
$Breadcrumbs->add(new Breadcrumb("/", "page1"));
$Breadcrumbs->add(new Breadcrumb("/", "page2"));
$Breadcrumbs->add(new Breadcrumb("/", "page3"));

$breadcrumb->show(); 다음을 반환합니다.

<ol class="breadcrumb">
 <li><a href="/">page1</a></li>
 <li><a href="/">page2</a></li>
 <li class="active">page3</li>
</ol>

그래서 내 프로젝트 switch-case에는 파일을 포함하는 몇 가지 구성이 있습니다. 이 파일에서는 $breadcrumbs->add(...). 이 코드 :

<div class="container body">
    <? $Breadcrumbs->show();?>
    <?
        $page = isset($_GET['page']) ? $_GET['page'] : null;
        switch($page):
            case "suppliers":
                require_once($DOCUMENT_ROOT."/modules/suppliers.php");
            break;
            default:
                require_once($DOCUMENT_ROOT."/modules/default.php");
            break;
        endswitch;
    ?>
    <? $Breadcrumbs->show();?>
</div>

이 결과를 제공합니다.

여기에 이미지 설명 입력

음, 작동해야하는 것처럼 작동합니다. 내가 사용하고 $breadcrumbs->add(...)내가 전화 한 후 파일을 필요에 $breadcrumb->show()왜 첫번째 호출이 반환 빈 결과 처음 이잖아. 두 번째 호출은 show()모든 이동 경로가 추가 된 후이므로 좋은 결과를 반환합니다.

문제는 switch블록 이전 에 올바른 콘텐츠로 이동 경로를 출력하는 방법 입니다. 버퍼 나 idk가 필요할까요?

IMSoP

이것은 논리를 프리젠 테이션에서 분리하는 것이 좋은 이유에 대한 좋은 예입니다. 부스러기 링크에 대한 멋진 추상화가 있지만 다른 코드가 작동하는 대신 진행되는대로 출력되기 때문에 제대로 사용할 수 없습니다. 추상적 인 데이터로.

당연히 현재 구조를 버리고 로직과 디스플레이를 새로운 프레임 워크로 직접 이식 할 수 있지만, 현재 위치에서 마이그레이션하려는 경우 한 가지 접근 방식이 있습니다.

  1. 호출되는 모듈의 "결과"를 나타내는 개체 또는 배열을 만듭니다. echo또는의 모든 현재 사용 ?>을와 같은 문자열에 대한 연결로 바꿉니다 $results['generic_output']. 이는 출력을 버퍼링하는 것과 실질적으로 같 $breadcrumbs으며 언제든지 기존 추상화를 사용할 수있을만큼 충분합니다 . 이 단계에서 "템플릿"은 대부분 echo $results['generic_output'], 그리고 이미 한곳에 수집 된 상용구 머리글 및 바닥 글로 구성됩니다 .
  2. 출력을 섹션으로 나누기 시작합니다. 특히 여러 페이지에서 유사한 섹션을 찾으십시오. 예를 들어, 각 페이지에 내용이 다르지만 스타일이 비슷한 "사이드 바"가있는 경우 해당 사이드 바 $results['sidebar_content']내용 만으로를 만드십시오 . 레이아웃을위한 상용구는 템플릿에 들어갈 수 있으며 코드 중복의 양을 줄였습니다.
  3. 궁극적으로 템플릿 외부에 HTML이 없도록하는 것을 목표로 템플릿에 전달하는 데이터를 점점 더 추상적으로 만듭니다. 예를 들어 사이드 바가 패널로 구성되어있을 수 있습니다. 각 패널에 하나씩 HTML 블록 배열로 시작한 다음 템플릿 집합을 사용하여 표시되는 실제 데이터 (예 : 특별 제안 또는 고객의 현재 바구니)를 기반으로 개체 배열로 변환 할 수 있습니다. 다양한 종류의 패널을 처리합니다. 결국, 원래 모듈없이 템플릿 레이어 만 변경하여 HTML없이 사이트의 일반 텍스트 버전을 구축하는 것이 이론적으로 가능해야합니다.
  4. 마지막 단계는 무엇 을 보여줄지 에 대한 결정과 무엇해야할지대한 결정을 분리 하는 입니다. 내 가상의 사이드 바를 계속 사용하면 템플릿은 "사이드 바 항목 1"이 아닌 페이지 어딘가에 사용하기위한 일반 변수로 현재 바구니를 항상 수신 할 수 있습니다. 이를 통해 결과적으로 결과가 나오는 출력에서 ​​페이지로 이어진 작업을 완전히 분리 할 수 ​​있습니다.

이것이 완벽한 프레임 워크로가는 길이나 상황에 대한 확실한 해결책이 아니라 기존 코드 (및 기존 사고)를 올바른 방향으로 구성하는 한 가지 방법이라는 점을 강조하고 싶습니다.

위의 "템플릿"은 출력을 생성 ?>하거나 사용하는 PHP 파일 세트 echo일 수도 있고 Smarty 또는 Twig와 같은 전용 템플릿 시스템 일 수도 있습니다. 실제로 분리의 요점은 나중에 그 앞에서 마음을 바꿀 수 있다는 것입니다. 코드 모듈의 결과는 Smarty 또는 Twig가 입력으로 필요한 데이터 배열이 될 것이기 때문입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

모든 구성 요소가 렌더링 된 후 Angular2에서 TypeScript 코드를 실행하는 방법은 무엇입니까?

분류에서Dev

PHP를 사용하여 쉘 cmd (파이썬)를 실행하고 지속적으로 업데이트 된 모든 출력을 인쇄하는 방법은 무엇입니까?

분류에서Dev

모든 지연이 jQuery를 사용하여 해결 된 후에 만 함수를 실행하는 방법은 무엇입니까?

분류에서Dev

페이드 아웃 효과가 완료된 후 .remove ()를 실행하는 방법은 무엇입니까?

분류에서Dev

그룹화 된 행의 모든 열 데이터를 연결하는 방법은 무엇입니까?

분류에서Dev

현재 위젯로드가 완료된 후 메서드를 실행하는 방법은 무엇입니까?

분류에서Dev

생성자가 실행 된 후 CreateParams를 설정하는 방법은 무엇입니까?

분류에서Dev

복구 된 모든 데이터를 가져오고 표시하는 방법은 무엇입니까?

분류에서Dev

rm 실행 후 데이터를 복원하는 방법은 무엇입니까?

분류에서Dev

오이 : 각 시나리오 후 실행 된 단계 목록을 가져 오는 방법은 무엇입니까?

분류에서Dev

이미 SqlTransaction으로 실행 된 모든 SqlCommand를 롤백하는 방법은 무엇입니까?

분류에서Dev

모든 데이터를 Snowflake의 개체 배열로 분할 된 행으로 가져 오는 방법은 무엇입니까?

분류에서Dev

특정 명령이 실행 된 후 명령 / 스크립트를 실행하는 방법은 무엇입니까?

분류에서Dev

모든 매크로가 실행 된 경우에만 정의 된 모듈에서 함수를 만들 수있는 방법은 무엇입니까?

분류에서Dev

모달 오픈 후 함수를 실행하는 방법은 무엇입니까?

분류에서Dev

가져온 후 트리거를 실행하는 방법은 무엇입니까?

분류에서Dev

Cypress에서 행의 모든 데이터를 개체로 가져 오는 방법은 무엇입니까?

분류에서Dev

모든 중첩 관계가 즉시로드 된 후 where () 메서드가 SQL 쿼리를 실행하는 이유는 무엇입니까?

분류에서Dev

설치된 모든 독립 실행 형 패키지를 찾는 방법은 무엇입니까?

분류에서Dev

(모든 변형) 입력 된 명령으로 특정 명령을 실행하는 방법은 무엇입니까?

분류에서Dev

Firebase : 모든 초기 "child_added"호출 후 콜백을 실행하는 방법은 무엇입니까?

분류에서Dev

특정 서버에서 실행 된 모든 데이터베이스 SQL을 검색하는 방법은 무엇입니까?

분류에서Dev

데이터베이스에서 대량 가져 오기를 수행 한 후 데이터를 저장하는 방법은 무엇입니까? PHP

분류에서Dev

지정된 xpath와 일치하는 모든 요소를 찾은 후 인덱싱을 사용하여 가져 오는 방법은 무엇입니까?

분류에서Dev

GAS 기능이 실제로 종료 된 후 기능을 실행하는 방법은 무엇입니까?

분류에서Dev

localStorage에서 추가 한 후 표시된 html에서 div 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

명령 실행이 완료된 후 사운드를 재생하는 방법은 무엇입니까?

분류에서Dev

쉘 스크립트-mysql이 준비된 후 스크립트를 실행하는 방법은 무엇입니까?

분류에서Dev

휴면 명령이 실행 된 후 명령 프롬프트를 종료하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    모든 구성 요소가 렌더링 된 후 Angular2에서 TypeScript 코드를 실행하는 방법은 무엇입니까?

  2. 2

    PHP를 사용하여 쉘 cmd (파이썬)를 실행하고 지속적으로 업데이트 된 모든 출력을 인쇄하는 방법은 무엇입니까?

  3. 3

    모든 지연이 jQuery를 사용하여 해결 된 후에 만 함수를 실행하는 방법은 무엇입니까?

  4. 4

    페이드 아웃 효과가 완료된 후 .remove ()를 실행하는 방법은 무엇입니까?

  5. 5

    그룹화 된 행의 모든 열 데이터를 연결하는 방법은 무엇입니까?

  6. 6

    현재 위젯로드가 완료된 후 메서드를 실행하는 방법은 무엇입니까?

  7. 7

    생성자가 실행 된 후 CreateParams를 설정하는 방법은 무엇입니까?

  8. 8

    복구 된 모든 데이터를 가져오고 표시하는 방법은 무엇입니까?

  9. 9

    rm 실행 후 데이터를 복원하는 방법은 무엇입니까?

  10. 10

    오이 : 각 시나리오 후 실행 된 단계 목록을 가져 오는 방법은 무엇입니까?

  11. 11

    이미 SqlTransaction으로 실행 된 모든 SqlCommand를 롤백하는 방법은 무엇입니까?

  12. 12

    모든 데이터를 Snowflake의 개체 배열로 분할 된 행으로 가져 오는 방법은 무엇입니까?

  13. 13

    특정 명령이 실행 된 후 명령 / 스크립트를 실행하는 방법은 무엇입니까?

  14. 14

    모든 매크로가 실행 된 경우에만 정의 된 모듈에서 함수를 만들 수있는 방법은 무엇입니까?

  15. 15

    모달 오픈 후 함수를 실행하는 방법은 무엇입니까?

  16. 16

    가져온 후 트리거를 실행하는 방법은 무엇입니까?

  17. 17

    Cypress에서 행의 모든 데이터를 개체로 가져 오는 방법은 무엇입니까?

  18. 18

    모든 중첩 관계가 즉시로드 된 후 where () 메서드가 SQL 쿼리를 실행하는 이유는 무엇입니까?

  19. 19

    설치된 모든 독립 실행 형 패키지를 찾는 방법은 무엇입니까?

  20. 20

    (모든 변형) 입력 된 명령으로 특정 명령을 실행하는 방법은 무엇입니까?

  21. 21

    Firebase : 모든 초기 "child_added"호출 후 콜백을 실행하는 방법은 무엇입니까?

  22. 22

    특정 서버에서 실행 된 모든 데이터베이스 SQL을 검색하는 방법은 무엇입니까?

  23. 23

    데이터베이스에서 대량 가져 오기를 수행 한 후 데이터를 저장하는 방법은 무엇입니까? PHP

  24. 24

    지정된 xpath와 일치하는 모든 요소를 찾은 후 인덱싱을 사용하여 가져 오는 방법은 무엇입니까?

  25. 25

    GAS 기능이 실제로 종료 된 후 기능을 실행하는 방법은 무엇입니까?

  26. 26

    localStorage에서 추가 한 후 표시된 html에서 div 데이터를 얻는 방법은 무엇입니까?

  27. 27

    명령 실행이 완료된 후 사운드를 재생하는 방법은 무엇입니까?

  28. 28

    쉘 스크립트-mysql이 준비된 후 스크립트를 실행하는 방법은 무엇입니까?

  29. 29

    휴면 명령이 실행 된 후 명령 프롬프트를 종료하는 방법은 무엇입니까?

뜨겁다태그

보관