Behat for beginners functional REST API testing tutorial 016

안녕하세요, 아담 쿨프와 너는 해변가에있어 오늘 우리는 Behat을 사용하여 REST API 테스트하기 끝점

그래서 주위에 붙어, 우리는 바로 그거야 [음악] 자, 이제 우리 편집자가되어 우리는 Behat을 우리가 만들고있는 응용 프로그램 API 끝점을 사용하여 기능 테스트 및 Behat 경우 사용하지 마십시오 Behat 시도해주세요 이 비디오와 함께 따라 할 수도 있습니다 그것을 스스로 시험해보십시오

기억해 Beachcasts에 가입하고 싶습니다 아래의 비디오 또한, Behat와의 경험에 대한 의견 또는 테스트 경험, 그래서 다른 사람들이 그것을 볼 수 있습니다 그럼 앞으로 나아가 자 시작하다

이제 시작하려면 순서대로 물론 Behat을 사용하려면 가져와야합니다 그것은 우리 프로젝트에 포함됩니다 그래서 내가 그랬어 할 것입니다, 나는 터미널에서, 그리고 터미널에서 나는 Composer require 명령을 실행하십시오 Behat / Behat 및 버전 3

이상이 필요합니다 그리고 버전 3 범위의 어떤 것 그래서 나는 앞으로 가서 Enter를 치자 우리는 작곡가가 끝날 때까지 기다릴 것입니다 의존성을 알아 내고 그것을 설치하십시오

좋아, 이제 완료되었습니다 우리는 Behat을 가지고 있습니다 하나 내가 가지고 싶다 당연히 Guzzle입니다 우리는 될 것입니다

API 끝점을 테스트해야하므로 HTTP 전화를하기위한 망각 우리는 할 수 있었다 이를 위해 cURL 또는 다른 방법을 사용하지만 Guzzle을 예제에서 사용할 것입니다 우리가 여기서 줄거야 그래서 나는 말할 필요가있다

작곡가는 또한 Guzzle을 포함합니다 지금 내가 여기에 있음을 알게 될거야 Guzzle 63 * 및 그 이유는 다음과 같습니다

63 이상 버전이 필요합니다 적어도 63 범위 그리고 그 이유는 왜냐하면 PHP 7 버전 7

2를 사용하고 있기 때문입니다 PHP 71을 사용하고 있다면 이전 버전을 사용할 수 있습니다 버전을 사용하고 있지만 72를 사용하고 있기 때문에 6

3보다 큰 것을 필요로한다 사용에 몇 가지 문제가 있었기 때문에 와 함께 guzzle 72로 알았습니다 Guzzle의 더 낮은 버전 이제 우리는 설치가 완료 될 때까지 기다리십시오

좋아, 그럼 이제 완료되었습니다 Behat을 가져야하고 우리는 또한 목구멍 우리는 명령 작곡가 behat – V 우리는 우리가하는 것을 본다 실제로, 그것은 작곡가 버전입니다

우리는 Behat 버전을 원한다 vender / bin / behat -V 그리고 우리는 우리가 가지고있는 것을 본다 Behat 350

그래서, 우리는 Behat을 가지고있는 것이 좋습니다 설치된 우리는 모두 갈 준비가되어 있습니다 지금 비록 내가 프로젝트에서 그것을 가지고 있지만 우리는 그것을 초기화하고 싶습니다 그것은 무엇을하는지 초기화하는 것입니다 우리를위한 시작 구조를 만든다

사용하기 시작합니다 나는 앞으로 나아갈 것입니다 vender / bin / Behat 명령을 실행하십시오 우리는하고 싶은 일을하고 있습니다 – 이제는 새로운 우리를위한 디렉토리

Behat이 우리에게 말하고있다 / features 디렉토리가 있고 그것이 우리의 특징입니다 파일 / features / bootstrap이 있습니다 디렉토리 및 해당 기능 내부 부트 스트랩에는 FeatureContext

php가 있습니다 우리를 위해 창조 된 파일 우리가 이것을 확장한다면 우리는 그것을 볼 수 있습니다 지금 당장 그 FeaturesContextphp는 비어 있고 방금 시작이 있습니다

우리를 위해 거기에 클래스의 구조 시나리오 추가 시작 우리의 특징 첫째로, 나 가게하십시오 vendor / bin / behat를 호출하면 이제 내가 vendor / bin / behat를 호출하고 있음을 주목하라 실제로는 vendor / bin에서 실행 가능하다 Composer에 의해 Behat 작곡가 json이 지시했다

그것을 거기에 넣으려고 이제는 우리가 부를 수 있습니다 벤더 / 빈에서 곧바로 과 그러면 Behat을 어디서 찾을 지 알 수 있습니다 Composer 파일 구조 및 공급 업체 디렉토리 그리고 이것을 실행함으로써 물론 시나리오는 없습니다

현재 단계가 없으며 방법을 알려줍니다 빨리 달렸다 그래서 우리는 그것이 달리기, 실행 중입니다 우리가 기대할 수있는 것 지금 우리가하고 싶은 일로 시작하는 것이 우리가 원하는 것입니다

테스트를 시작하려면 Behat과 함께 기능을 만들어야합니다 권리? 그러니 계속 해보세요 그래서 새 파일을 만들겠습니다 그 파일을 호출 해 봅시다 이제 테스트하고 싶습니다

이 비디오에서 나는 공지 사항은 API의 기능을 나열하므로 공지 사항 목록을 만들고 싶습니다 우리는 이것을 feature라고 부르겠다 그건 관습이야 Behat 내의 대회

그래서 지금 우리는 파일을 만들었습니다 그것을 채우기 시작해야합니다 첫째, 우리는 우리의 기능이 어떻게 될지 말하고 싶다 해야 할 것 이제 내가 여기 입력하는대로 알게 될거야

PhpStorm은 자동 완성입니다 우리를 위해, 어떻게 다루는 지 알고 있기 때문에 비트 좋아, 그래서 우리는 우리의 특징 다음으로 우리는 레이아웃을 원합니다 우리의 시나리오와 우리는 PhpStorm의 시나리오를 요구하는 메시지

그리고 나는 원한다 공지 목록 괜찮아, 그래서 그것은 우리의 특징입니다, 공지 사항을 나열하려면 이 시나리오에서는 발표 목록을 얻으십시오 할 일 우리가 부부에 넣고 싶어하는이 다른 것들 먼저 우리는 나는 주어진다 인증되지 않은 사용자 그때 내가 목록을 요청하면 주소에서 발표 했어? 그래서 지금이 경우, 여기서 큰 따옴표를 사용하면 이것을 변수로 만드는 것이 옳은가요? 과 그것을 주입 할 수있는 변수로 만든다

우리의 방법에 인수로 그리고 지금 이 사건, 나는 그것을 지역에서하고있다 잘, Docker 컨테이너 내에서 로컬로 그래서 저는 localhost : 8080을 호출 할 것입니다 그게 내가 뛰고 있기 때문이야

그래서, 우리는 실제로 이것을 로컬로 포트 : 8080, 포트 8080 그런 식으로 도커가 요청을 만족시킨다 좋아요, 그 다음엔 우리는 우리가 얻을 수 있었던 것을 목록, 그리고 결과는 다음과 같아야한다 ID로 공지 사항을 포함시킨 다음 여기에 또 다른 변수를 넣을거야 우리가 할 일은, 내가 갈거야

내가 아는 ID를 포함 시키십시오 결과 세트에 들어가 겠지? 그래서, 그것은 단지 우리가 공지 목록을 얻지 만, 우리는 내가 볼 것으로 예상되는 발표> 그럼 제가 저를 끌어 올려 드리겠습니다 내가 할 일은, 내가 갈거야 여기에이 UUID를 가져 가세요 좋아

저것, 그리고 나는 그 UUID를 버릴거야 여기있어 그러면 시험 될거야 해당 UUID가 실제로 존재하는지 확인 우리가 돌아 오는 데이터 알았어, 그거 꽤 좋은 기능이야

내가 시험을 치면 시험 될거야 인증되지 않은 사용자, 실제로는 없습니다 거기에서 시험 할 물건 우리는 아마 사실대로 돌아올거야 우리가 실제로 할 수 있다고 테스트 할거야

연결, 공지 사항 목록을 가져오고, 그것을 확인하고 말할거야 이 발표는 진짜인가? 거기 있니? 뭔가 정말로 거기에 이제 우리는이 기능에 대해 설명했다 터미널에, 우리는 vendor / bin / behat를 다시 호출한다 그것은 할 것입니다

그걸 찾으면 찾을거야 시나리오 맞지? 찾는거야 그러나 시나리오는 모든 것이 정의되지 않았습니다 하나있어 시나리오가 정의되지 않았습니다

세 가지가 있습니다 시나리오 내의 단계 정의되지 않음 그리고 만약 우리가 이들에 대한 컨텍스트를 만들고 싶습니다 권리? 그래서 저는 앞으로 나아갈 것입니다 # 1을 선택하고 컨텍스트를 만들도록하십시오

나를 위해 그리고 여기에서 방법을 만들고 있습니다 내가 할 일은, 그냥 복사 할거야 이 메소드들을 붙이십시오 과 그들은 좋은 출발점이야, 그렇지? 그래서, 그 방법들을 복사해라, 나는에 갈 것이다

내 FeatureContext 파일과 나는 그걸 바로 붙여 넣으세요 그래서 이제 저는 그것들, 그들은 방법을 시작하고있다 이미 설정되어 있습니다 좋아, 이제 우리는 알다시피, Behat 더 이상 강조 표시되지 않습니다 기능이 실제로 존재합니다

알았어 이제이 기능에서 나도 여기에서하고 싶다 이러한 모든 메소드가 새로운 PendingException을 던집니다 잘 물론 PendingException이 아닙니다 그것을 찾지 못했기 때문에 추가되었습니다

지금 실행하면 우리는 오류가 발생하거나 그것이 발견되지 않기 때문에 예외 이러한 메서드 또는 이러한 메서드는 실제로 지금 아무 것도하지 않고있다 그냥 성장하고, 당신은 물론 PendingException은 아니다 채워진다 그래서 내가 할 일은 내가 계속해서 그 수입품을 가져갈거야 PendingException

그 이유는 왜냐하면 내가 원하기 때문에이 대신에 치명적인 오류가 발생하는 대신 그 방법들은 발견되지 않았다 대신, 나는 조금 더 유용한 것이 있습니다 과 이제는 PendingException이 발생했습니다 거기서 내가 이걸 다시 실행하면 우리가 볼거야 이것들은 이제 노란색으로 강조 표시됩니다

그리고 저에게 할 일을 해주고 있습니다 우리는 보류중인 정의를 작성해야합니다 좋아, 그렇게 부르기 때문에 PendingException 그것은 단지 그것을 알고있다 아무것도 아직 만들어지지 않았다

나는 필요하다 그것을 만들고, 물론 다음 커플은 같이 강조 표시됩니다 아쿠아 색이라도 달리지 않았기 때문에 그거 맞지? 일단 그것이 처음으로 명중하면 예외, 그것은 더 이상 가지 않았다 우리가 여기서 볼 수있는 것은 건너 뛰는 테스트, 맞죠? 그러니 가자 그리고 이들 중 일부를 시작합니다 먼저, 사용자가 우리가해야 할 일은 기본적으로 API를 호출합니다

우리가 응답을 받으면 우리는 으로 액세스 할 수있었습니다 인증되지 않은 사용자 그래서, 그렇게하자 계속해서 $ client = new를 만들고, 우리는 전화해서, 우리는 Guzzle에 전화 할거야 client (), 슬래시 제거하기 우리는 지구 공간에서 그것을 필요로하지 않습니다

과 클라이언트에서 우리는 시작할 것입니다 base_uri와 함께 base_uri는 localhost : 8080입니다 그러니 우리에게 전화 할 수 있어야합니다 Docker 컨테이너 안에있는 API 이제 우리는 응답을 보내고, 우리는 방금 만든 고객, 우리는 얻을 것이다 () 그리고이 경우 나는 단지 '/'로 갈 거지? 우리는 단지 알고 싶다

나는 응답을 얻는가? 인증되지 않은 사용자로 사용자가 HTTP 코드 200을 받고 있습니다 알았어, 내가 액세스 할 수 있음을 의미한다 인증되지 않은 사용자 맞지? 그래서 지금, 우리는 응답 코드를 넣을거야 예, 응답 코드를 얻고 우리가 사용할 응답 코드 응답을 보내고 상태를 사용합니다 응답의 코드 그게 우리에게 줄거야

상태 코드 및 우리에게 200 또는 400, 또는 무엇이든간에 경우가있을 수 있습니다 이제 우리는 이것을 검증하기를 원합니다 권리? 테스트이기 때문에 우리는 테스트를 원합니다 그것을 확인하십시오 그래서 내가 할 일은 내가 if 조건을 수행 할 것입니다

응답 인 경우 코드가 200과 같지 않으면 200을 의미합니다 성공했다, 그렇지? 그래서 평등하지 않으면 200으로, 그럼 우리는 새로운 던지기를 원한다 예외, 우리는 할 수 없다고 말할거야 액세스 좋아, 이제 우리가 할 수있다, 그렇다면 우리는 사실을 돌려주고 싶다

우리는 우리가 들어올 수 있었다는 것을 알고 있기 때문에 좋아, 거기에 우리의 방법이있다 전화가 걸려 오는 것을 확인하는 중입니다 응답 코드, 응답 코드는 200입니다 우리가 원하는 것, 그리고 그것이 모두 좋았다면 그러면 우리는 진실을 되 돌린다

그럼 나 좀 보내 줘 vendor / bin / behat 명령을 실행하십시오 그리고 확실히, 나는 하나의 성공을 얻는다, 그렇지? 따라서 인증되지 않은 사용자 인 경우 녹색이기 때문에 성공했습니다 우리는 여전히 여기에 노란색으로 뭔가가 있습니다 우리는에 요청을하려고합니다

공지 사항 목록이 구체적으로 표시됩니다 보류중인 정의라고 말하는거야, 그렇지? 이제 우리가 들어가서 그 정의를 다음 항목으로 그래서, 우리는 인증되지 않은 사용자를 완료했습니다 자, 목록 발표에 에서, 우리는 꽤 많이하고있다 우리가했던 것과 정확히 똑같은 인증되지 않은 사용자의 경우

그래서 내가 할 일은 내가 할거야 여기에 몇 가지 변경을하십시오 이제 의뢰인, 나는 먼저, 나는 갔다 그냥 복사하여 붙여 넣으십시오 내가 한 모든 것을 복사하여 붙여 넣을거야

이것에, 맞지? 그리고 이렇게, 좋습니다 우리는 지금 전화를 걸고 있습니다 우리가하고 싶지만 '/'하는 대신에 '/ 공지 사항 /' 우리가 원하기 때문에 끝점을 얻으려면 지금 또 다른 내가 할 수있는 건 내 base_uri 야 나는 이것에 대한 논쟁이 있음을 주목하라

기능, 맞죠? 그 논쟁은 우리가 우리의 목록 기능을 만들었습니다 우리가 지정한 여기 URI는 맞습니까? URI를 지정했습니다 이미 그래서 내가 할 일은, 어서 가서 그걸 대신 사용할거야 수동으로 넣은 URI 이전 함수

왜냐하면 $ arg1 우리가 넣는 URI를 포함해야한다 기능, 맞죠? 이제 우리는 그것을 URI를 입력하면 / 공지 사항 / 그 URI에서, 그리고 우리는 또한 상태 코드를 얻습니다 우리는 상태 코드 200 ok를 찾고, 우리는 조금하고 싶다 우리에게 예외 메시지 액세스 할 수없는 대신 예상 200을 넣고 싶지만 받은 상태 코드를 반환합니다 이번에는 그렇지 않다면 성공, 다른 상태 코드라면 200 년이 넘으면 우리는 그것이 무엇인지 알게 될 것입니다

예외 메시지 물론 모든 것이 작동한다면, 우리는 또한 사실로 돌아가고 있습니다 그렇게해서 우리는 우리가 목록을 얻을 수 있었다는 것을 알아라 공지 사항, 맞죠? 그럼 가자 앞으로 나아가서 이걸 다시 실행하면 지금 볼 수 있습니다 우리는 인증되지 않은 사용자 및 우리는 또한 목록에 대해 녹색을 얻었습니다

200 OK로 돌아온 공지 사항 그러나 우리가 실제로 우리가 어떻게 돌아 왔는지를 어떻게 알 수 있습니까? 목록 맞지? 그것은 단지 우리에게 200의 ok를 줬다 그것은 비어있을 수 있습니다 뭔가 다른 거 맞지? 우리는 그것을 모른다 물론

이것이 다음 항목이 들어오는 곳입니다 그리고 그것은 방법, 특징입니다 우리는 결과에 특정 발표, 그리고 우리는 데이터베이스에서 직접 UUID 그래서 우리가하고 싶은 것은 여기서 PendingException을 던지고, 우리는 원한다 그런 다음 API로 이동하여 공지 사항 및 그 전에,하지만 전에 나는 그렇게한다

두 번째 전화를하는 것이 합리적이다 이것, 맞지? 그것은 이해가되지 않는다 테스트를 위해 두 번째 전화를하십시오 왜 그렇게합니까? 전화하고 돌아 서서 다른 일을하십시오 정확히 같은 전화? 내가 알기로 공지 사항을 분석하십시오

그래서, 내가 뭐야? 할거야, 난 리팩터링 할거야 조금만 이 응답 여기, 나는 보호 된 수업 내 필드, 나는 갈거야 여기에 추가하여 다시 사용할 수 있습니다 그거야? 그래서 한 가지 방법으로 응답을 받고 그것을 얻으면 그것은 단지 그것을 저장할 것입니다

메서드는 그것을 사용할 수 있습니다 그래서 지금 즉, 우리는 약간의 일을 할 필요가있다 리팩터링을 여기에 저장하려고합니다 보호 된 분야에서, 그리고 나서 물론 우리는 거기에서 그것을 얻고 싶다 잘

좋아, 이제 그 방법은 리팩토링을 통해 우리는 반응을 얻었고 지금은 $ this-> response를 사용하고 있습니다 앞으로 가서 다시 실행하여 우리는 무언가를 깨뜨리지 않았다 그리고 확실하다 우린 아직 어 사실 나는 오류가 발생하면 지금 당장 새로운 예외가 생겼어

이것을 다시 실행하면 아직해야 할 일로 실패하고있다 그것은 비어있어 그것이 지나가는 것으로 간주했다, 그리고 지금, 우리의 다른 하나는 공지 사항 목록은 여전히 ​​녹색입니다 우리는 아직도 그것을 얻고 있기 때문에 성공 200 거기 그러나 다시, 이제 우리는 살이 준비가되어있다 우리는 객체의 일부로 응답을 얻었습니다

이제 우리가 여기서 할 수있는 것은 우리가 취할 수있는 것입니다 그거야? 그래서 우리는 먼저 발표는 그 결과에 있어야합니다 그래도 계속해서 변수는 일부 데이터를 빌드하고, 공지 사항 및 우리가하고 싶은 일은 우리는 그 결과를 원한다 이제 우리의 API이기 때문에 결과는 물론입니다 JSON에있을 것입니다

그래서 우리는 json_decode, json_decode, 우리는이 응답을 해독하고 싶습니다 우리가 원하는 응답에서 getBody () 우리가 연관 배열이 필요하지, 그렇지? 자 이제 JSON 디코딩입니다 결과는 인기가 있었다 $ 공지 사항에 포함시켜야합니다 알았어, 이제 우리는 공지 사항, 맞죠? 그래서 우리는 반복하고 싶다

$ 발표를 통해, 그러나 효과가 없을 것이라는 발표 정말 깨끗합니다 그것은 다차원 적이었다 돌아 오는 대상 JSON 그리고 그곳에는 내부 공고 이제 어레이는 임베디드 서브 어레이 (embedded sub-array) 권리? 그리고 나서 또한있을거야 내에서 발표 그거야? 이제 우리는 그것을 얻었고 우리는 그것을 발표로 넣고 싶습니다

좋아요 조금만 봅시다 그래서 내가 다시 목록을 작성한다면, 그렇지? 그냥 정규 HTTP 호출 및 결과 이제 우리는 이것이 참으로 다차원일까요? 그래서 우리는 이 첫 번째 레벨에 항목을 포함하며 _embedded도 포함합니다 그럼, _embedded 내에, 우리는 발표를하고 마침내 우리는 개별 발표로 그래서 그게 우리 배열이 될 이유입니다

똑같은 방식으로, 맞지? 나는 어디로 가야 할까? 실제 공지 사항은 나는 여기서 지정하고있다 그것들 각각을 반복 해 봅시다 _embedded 공지 사항 좋아, 그럼 이제 우리는 그것을 얻었습니다

어떻게 가야하니? 그거 사용 해? 그럼 우리가 어떻게 할 것인가? 우리가 반복 할 때마다 반복됩니다 발표 ID라면 맞습니까? 때문에 수표를 발행하고 있습니다 ID에 대한 유효성 검사가 다시 같음 우리가 여기서 논쟁하는 거지, 그렇지? 우리는 논쟁과 우리는 그것을 전달했다 따옴표 안에, 기억 나니? 우리는 우리 UUID를 넣습니다 여기서 따옴표 안에, Behat는 저것을 있있다, 좋아, 그게 될거야

될 수있는 변수 바꿀 수 있겠지? 괜찮아 그래서 우리는 발표 ID가 $ arg1 인 경우 퍼팅 그러면 우리는 사실로 돌아갈 것입니다 그렇지 않으면 반환하지 않으면 사실, 우리는 Exception ()을 던지고 싶습니다 new Exception () 그 Exception () 우리는 여기에 메시지를 넣을거야, 좋은거야

의미있는 메시지, 우리는 발표 및 번호 찾기, 그때 우리는 편지를 쓰지 않았습니다 좋아, 지금 우리는 그것을 fleshed 가지고 있고 지금 나는 할 수있다 이것을 다시 실행하면 이제 모든 것이 성공적으로 다시 돌아옵니다 우리는 세 가지 테스트를 거쳤습니다

시나리오, 세 단계가 모두 지나가고 우리는 우리가 그 아이디를 찾고 있다는 것을 알아라 우리는 구조 내에서 찾고 있습니다 그렇지 않으면, 성공, 그래서 그것이 어떻게 얻는 지 시험 이제 내가 추가 한 것은 조금만 보여주고 싶었습니다 의 물론, 우리는이 FeatureContext를 가지고 있습니다, 권리? 대부분의 응용 프로그램에서 많은 테스트를 만들고 그것은 정말로 얻을 것이다

잠시 후에 위압감을 느낀다 유지 이 FeatureContext 내부의 모든 것, 그래서 Behat에서 우리가 할 수있는 것은 우리입니다 우리는 Behat를 만들 수 있습니다 구성 파일 실례합니다

그래서 앞으로 가서 그렇게 할거야 그래서 우리는 새로운 파일을 만들거야 우리는 그것을 행동이라고 부릅니다 우리는 그것을 우리의 뿌리에 프로젝트, 우리의 작곡가 JSON 과 yml 파일 우리가 할 일 거기에, 우리는 구조 많은 다른 것을 지정하는 Behat의 구성

너는 넣을 수 있었다 사용자 이름에서 사용할 암호 애플리케이션 전반에 걸쳐 저것, 그래서 어떻게 우리가 이것을 만드는가? 꽤 쉽지만, 우리는 만들거야 우리가 스위트를보고있는 디폴트를 가지고있다 우리는 우리의 스위트 룸에, 우리는 컨텍스트를 넣을거야 거기, 그리고 그것은 틀렸어

콜론 좋아, 문맥에서 우리는 할 수있다 문맥을 분리하다 말할 수있다 우리는 문맥을 분리 할 수있다

그래서 우리는 다른 파일을 가질 수 있습니다 각 하나, 맞죠? 그래서 처음에, 무엇을 우리는 이미 만들었습니다 우리의 FeatureContext,하지만 내가 원한다면, 나는 다른 하나를 만들어서 인스턴스 AnnouncementContext, 맞습니까? 과 그렇다면, 내가 할 수있는 것은, 나는 여기에 다른 파일을 만들 수 있습니다 부트 스트랩 안쪽에, 나는 그것을 부를 수 있었다 AnnouncementsContext

php 그리고 나서, 나는 거기에 모든 방법을 넣을 수 있습니다 AnnouncementsContext와 관련이 있습니다 나는 할 수있다 FeatureContext에서, 나는 있을 수있는 일반적인 항목 다른 것들의 무리에 걸쳐 사용, 그것을 yml 파일에 넣음으로써 이 방법으로, 그것들은 각각 그것들을 실행할 것입니다

그래서 만약 내가 여러개의 모듈을 가지고 있다면, 예를 들어 신청서 발표가있다 모듈, 은행 모듈, 지사 기준 치수 나는 문맥을 만들고 싶을지도 모른다 그 각각에 대한 파일을 넣을 수 있습니다 Behat

yml 파일에있는 파일들 그들 밖으로 이게 내가 가진 전부 야 에피소드, 소개, 소개, Behat에 대한 간략한 소개와 그걸 셋업해라 우리는 통과했고 우리는 다음을 기반으로 몇 가지 샘플 테스트를 만들었습니다 API

API 테스트가 정말 쉽습니다 당신은 그것을 자동화 할 수 있습니다 다시, 기능 테스트는 단위 테스트와 매우 다릅니다 과 단위 테스트 코드, 기능 테스트 테스트 기능을 테스트, 당신도 알다시피, 다소 외부 적으로는 API 이걸 찾았 으면 좋겠어

도움이되는 그랬다면,에 가입하십시오 아직 구독하지 않았다면 Beachcasts 아래의 비디오와 마찬가지로, 몇 가지 의견을 남기고 경험을 테스트합니다 너 이미해라

Behat을 사용합니까? 대신에 무엇을 사용할 수 있을까요? 너에게 대안이 있니? 알아 거기에 다른 어느 쪽이 당신을하는 프레임 워크인가? 용도? 와 주셔서 감사합니다

PHP-Training mit PHPUnit und der Funktastatur bei Flyeralarm mit dem Codeception Framework

안녕하세요 여러분, Flyeralarm에서 우리는 오늘 롤랜드에서 교육을 받았고 우리와 함께했습니다 사실상 모든 것을 처음부터 끝까지 테스트 한 코드 작성, 우리에게 주셨다

그리고 그것은 정말로 좋은 물건이었습니다 Roland의 교육에 대해 정말 멋진 점은 실제로 매번 코덴이옵니다 무선 키보드가 내 손에 들어올 때마다 나는 다시 그것을 할 것입니다 안녕하세요, 테스트를 위해 PHP 교육을 받고 싶다면 여기를 살펴보십시오 아래 동영상 설명을 참조하십시오

거기에 그것은 훈련에 대한 블로그 게시물로 이동합니다 동영상을 좋아했습니다 채널을 따르십시오

How to generate CRUD code for PHP frameworks :- Codeigniter, Laravel, CakePHP, Core PHP

1 단계 : – 방문 : – wwwPHPcodeBuilder

com Step2 : – CRUD를 생성하고자하는 Framework를 선택합니다 Step3 : – 여기에 테이블 구조를 추가합니다 참고 : – 기본적으로 ID 및 상태 필드가 추가됩니다 여기에 추가 할 필요가 없습니다 Step4 : – 첫 번째 테이블 이름을 추가 한 다음 필드 이름을 추가합니다

Step4 : – 추가 된 필드 당 입력 유형을 선택하십시오 Step4 : – 사용자 이름에 대해 이메일을 사용하기 때문에 이메일로 유형을 선택했습니다 Step4 : – 비밀번호를 입력 할 때 비밀번호를 입력 했으므로 입력 한 텍스트는 마스크 처리됩니다 Step4 : – 연령에 따라 사용자가 숫자 값을 입력하기를 원하므로 숫자를 숫자로 선택하십시오 Step4 : – 라디오 버튼을 선택한 후 텍스트 상자에 표시 할 값을 쉼표로 구분하여 입력하십시오

– Male, Female Step4 : – 성별로 남성 또는 여성 이메일을 옵션으로 선택하여 유형을 라디오 버튼으로 선택합니다 Step4 : 다음으로 우리는 사용자의 취미를 포착하여 다음 필드 유형을 select로 선택합니다 Step4 : – 선택 드롭 다운에 표시 할 여러 옵션을 쉼표로 구분하여 입력합니다 Step4 : 이제 사용자에게 교육 자격을 알리고 사용자가 여러 옵션을 선택하기를 원합니다 4 단계 : – 확인란을 선택하고 쉼표로 구분 된 여러 자격을 입력하십시오

Step4 : 다음으로 우리는 사용자가 자신의 개인 정보를 입력하여 사용자가 간단한 정보를 입력 할 수있는 Textarea로 유형을 선택하게합니다 Step4 : – 마지막으로 사용자가 자신의 프로필 이미지를 업로드하길 원합니다 Step5 : – 일단 테이블 구조가 완성되면 Famework 드롭 다운에서 프레임 작업이 올바르게 선택되었는지 확인하십시오 Step6 : – 올바른 프레임 워크를 선택한 후 Create CRUD Code를 클릭합니다 최종 결과는 사용할 수있는 코드입니다

코드의 첫 번째 부분은 PHPMY ADMIN >> SQL Console에서 복사하여 실행할 수있는 SQL 쿼리입니다 그 후 테이블 이름이있는 폴더를 만들고 결과 페이지에있는 프레임 워크 지침에 따라 자세한 파일을 만듭니다 코드를 각각의 파일에 복사하고 코드를 실행하여 CRUD 작업이 전문 코더와 같은 코드로 작동하는지 확인하십시오 업로드 된 파일을 저장하려면 프로젝트 루트 폴더에 "uploads / << fieldname >>"폴더를 만드십시오

Cara Memahami Konsep MVC Framework Laravel #2

성전환 마차 와가 라 카투 bismillah hirohman nirohim 나랑 다시 만날거야 이전 튜토리얼에서 나는 가지고있다

laravel의 설치 방법 설명 구성 설명해 드리겠습니다 보일 방법 이 공개 글쎄,이게 어때? 래벨 페이지의 표시 이것은 나타난다 그런 다음 공용 폴더에서이 파일을 봅니다 우리는 Xampp로 돌아갑니다 여기 Xampp 이 대중에 잘 그런 다음이 내용을 다음과 같이 엽니 다

이게 맘에 든다 잘하지 못한 사람들을 위해 그래서 당신은 처음에 laravel을 배웠지 않습니다 어디서부터 혼란 스러울 것인가? 이 견해는 그럼 Laravel입니다 MVC PHP 프레임 워크 사용자 요청에 따라 디스플레이를 설정합니다 컨트롤러의 작업입니다 컨트롤이 잘 빠져 나갔다

혼자 일하지 않고 하나의 구성 요소, 라우터 Laravel 라우터 있다 여기에 라우터는 여기에있다 루트의 루트 잘 여기 webphp 그래서 뿌리는 것입니다 ~처럼 인생에서의 교통 또는 방향 예 바로 거기에 집에서의 행동 또는 홈페이지 예 주요 산업 이것은 단지 선택 (/)입니다 여기에 돌려 보내질거야

보기 환영 인사보기 잘 오신 것을 환영합니다 이것은 파일의 이름입니다 이것은 파일 이름입니다 laravel은 스캐닝을 사용합니다 파일 이름이 블레이드가되도록 웹 페이지의 모양과 관련하여 블레이드 접미사를 얻습니다 우리는 여기를 본다 보기는 어디 있습니까? 그 견해 자원 잘 여기 viw 리소스보기 여기에 우리가 봐

독특한 네 아니오는 없습니다 내가 그것을 볼 때 거기에 없다

칼날은 환영 받지만 그는 자동으로 끝났다 칼날 읽은 이것 뒤에 칼날을 읽다 자동으로 ralaver 그래서 뷰를 호출 할 때 너는 이제 더 이상 필요 없어 manambahblade

php 필요 없음 그냥 환영하고 laravel 이미, laravel bladephp를 읽을 수 있습니다 좋아, 이제 네가 어디 있는지 이해할거야 전시하다 이 즐거운 화면은 이 이걸 좋아해, 그냥 열어 보자

내가 궁금하지 않아 우물 또는 우리는 존재 한 단어를 보았는가? 여기 홈 로그인 laravel mvc의 문서화 이것은 laracaats의 문서입니다 링크가 여기에 있습니다 그럼 이것이 도착한 이유입니다 아직 만들지 않았으므로 다음 튜토리얼에서 나중에 설명하겠다

우리는 이것을 보여줄 것이다 그가 루트 로그인을했기 때문에 좋은 이해해 주길 바래요 잘 더 많거나 적은 유감 다음은 다음 비디오 wassalamu alaikum 와 로카 마라 히 와바로 카투

Getting Started with the Google Data PHP Client Library

안녕하세요, 제 이름은 Trevor Johns입니다 저는 Google Data API 팀의 소프트웨어 엔지니어입니다

Google Data API를 사용하면 프로그래밍 방식으로 다양한 Google 서비스, Blogger, Google 캘린더, Gmail 연락처 목록 또는 YouTube 나는 오늘 당신이 상호 작용을 시작할 수 있도록 돕기 위해 왔습니다 PHP 애플리케이션 내에서 이러한 API를 사용할 수 있습니다 이 비디오는 당신이 이미 친숙하다고 가정합니다 웹 개발과 PHP의 기초를 다룹니다

과거 경험이 있다면 도움이 될 것입니다 웹 서비스 작업, 이것이 꼭 필요한 것은 아니지만 시작하기 전에 세 가지가 필요합니다 HTTP 서버, PHP, 및 PHP Google 데이터 클라이언트 라이브러리 나는이 각각을 간단히 살펴볼 것입니다

대부분의 호스팅 제공 업체는 이미 HTTP 서버와 PHP를 제공하고 있으며, 그러나 아직 그렇게하지 않았다면, 로컬로 사본을 설치하는 것이 좋습니다 개발 목적으로 모든 HTTP 서버가 수행합니다 PHP 스크립트 실행을 지원해야합니다 Apache HTTP Server를 사용하는 것이 좋습니다

httpdapacheorg에서 다운로드 할 수 있습니다 HTTP 서버가 설치되면, 당신은 phpnet에서 PHP를 다운로드 할 수 있습니다

OS 별 설치 지침 각 사이트에 게시됩니다 아파치와 PHP를 설치하는 동안 이 비디오의 범위를 벗어나는 경우, 빨리 확인하는 방법을 보여 드리겠습니다 설치가 제대로 설정된 경우 이 두 줄이 포함 된 파일을 만들기 만하면됩니다 첫 번째는 표준 PHP 시작 태그입니다

두 번째는 PHP 정보 함수입니다 이전에 PHP 개발을 해본 적이 있다면, 정보가 표시되고 표시된다는 것을 알 수 있습니다 귀하의 PHP 환경에 대해 웹 루트에 저장하면 infophp라고

그런 다음 브라우저에서로드하십시오 PHP 설치에 대한 정보를 보여 주어야합니다 버전, 사용했던 빌드 명령어, 포함 경로가 무엇인지

이 페이지를 얻지 못했을 때 방금 저장 한 infophp 파일의 내용, 문제가 있다는 것을 알고 있으면 문제를 해결해야합니다 HTTP 서버가 설치되면 PHP 지원으로 실행하고, 이제 PHP Google 데이터 클라이언트 라이브러리를 다운로드 할 차례입니다 배포 됨 Zend Framework 오픈 소스 프로젝트의 일환으로, frameworkzend

com에서 다운로드 할 수 있습니다 Zend Framework에는 많은 구성 요소가 포함되어 있습니다 Google 데이터 API에 액세스하는 데 필요한 것 외에도 Zend Framework의 모든 오버 헤드를 원하지 않는다면 이미 다른 웹 개발 툴킷을 사용하고 있거나, 경량의 Google 전용 버전을 다운로드 할 수 있습니다 젠드 프레임 워크 frameworkzend

com/ download / gdata로 이동하십시오 시범을 보이기 위해 나는 젠드 프레임 워크 설치 프로세스 이제 브라우저를 열어 보겠습니다 frameworkzend

com/ download / gdata로 이동하십시오 최신 릴리스에서 tarball을 가져옵니다 일단 다운로드가 완료되면, 나는 그냥 가서 추출 할거야 이 작업이 완료되면 결과 폴더 안전하고 웹 서버에 액세스 할 수있는 곳 내 시스템에서, 아파치와 PHP 모두 opt / local에 설치되어 있으며, 나는 앞으로 나아가서 그것을 놓을거야

당신의 시스템에서, 당신은 아마 그것을 다른 곳에 넣길 원할 것입니다 마지막으로, PHP에게 Zend Framework를 어디에서 찾을 지 알려줄 필요가있다 가장 좋은 방법은 phpini 파일을 수정하는 것입니다 내 시스템에서 이것은 opt / local / etc에있다

opt / local에 PHP를 설치했기 때문입니다 그러나 PHP 설치 방법에 따라, 그것은 다른 위치에있을 수 있으며, 사용자 / 지역 / 등 Windows의 경우 C : PHP 그래서 저는 Text Editor에서 이것을 열어 볼 것입니다 괜찮아? 그리고 "include_path"로 시작하는 줄을 찾으십시오 괜찮아? 콜론으로 구분 된 다양한 디렉토리 목록입니다

PHP가 라이브러리를 검색 할 때 검색 할 것입니다 나 그냥 갈거야 Zend Gdata를 저장 한 경로를 추가하십시오 따라서 / local / ZendGdata 다음에 / library가옵니다 이제 php

ini 파일을 업데이트했습니다 난 아파치를 다시 시작하면된다 그래서 PHP는 새로운 변경 사항을 선택할 수 있습니다 그래서 저는 Apache Control을 다시 시작하기 만 할 것입니다 그리고 나서 그것은 좋은 것이어야합니다

그래서 나는 그냥 가서 php-a를로드 할 것입니다 대화 형 PHP 세션을 얻으려면, Zend Framework에서 파일을로드하려고합니다 Zend / Loaderphp를로드 할 예정입니다 거기에 있어야합니다

오류가 발생하지 않으면 모든 것이 좋습니다 그렇지 않은 경우 문제를 해결해야한다는 것을 알고 있습니다 이런 일이 발생하면 점검 할 좋은 곳, 앞에서 작성한 infophp 파일을 살펴 보는 것입니다 이것은 당신에게 보여줄 것입니다

포함 경로가 현재 적용됩니다 따라서, 이것이 틀린 경우에, 올바른 phpini 파일을 편집했는지 확인하십시오 나열된 경로가 실제로 올바른지 확인하십시오 호스팅을 관리하기 위해 배포하는 경우, php

ini 파일에 직접 액세스 할 수 있습니다 호스팅 제공 업체가 허용 한 경우 호스팅 제공 업체가 mod-php와 함께 Apache를 사용하고 있다면, PHP의 구성 설정을 대신 설정할 수 있습니다 htaccess 파일을 사용합니다 이렇게하려면 새 파일을 만들어야합니다 그런 다음 "php_value include_path"행을 입력하십시오

괄호 안의 Zend Gdata 폴더 경로 / library가 뒤 따른다 그런 다음 htaccess로 웹 루트에 저장하십시오 그것을 저장하십시오 나는 실제로 그것을 저장하지 않을거야

이미 phpini 파일을 편집했기 때문에, 그렇지 않으면이 방법이 효과적입니다 Zend Framework가 설치되었으므로, 클라이언트 라이브러리에 대해 간단히 살펴 보겠습니다 이에 대한 유용한 페이지는 Zend Framework API 참조 문서입니다 framework

zendcom/apidoc/core에서 구할 수 있습니다 가자 좋아요, 오른쪽 상단의 Zend_Gdata를 클릭하십시오 -로 전환하면 활성 패키지가됩니다

왼쪽에는 수업 목록이 있습니다 Zend Gdata 내에서 5 가지 주요 유형의 수업이 있습니다 너는 보통 상호 작용할거야 – 서비스 클래스, 쿼리 클래스, 피드, 항목 및 확장 요소 Zend Gdata는 서비스 클래스의 예입니다 서비스 클래스는 클라이언트 라이브러리의 핵심입니다

액세스를 관리하는 역할을합니다 네트워크를 통해 Google 서비스에 전송할 수 있습니다 Zend Gdata는 Blogger에 사용되는 일반적인 서비스 클래스입니다 대부분의 서비스에는 전용 서비스 클래스가 있으며, 유튜브 젠드 다다 (Zend Gdata) 쿼리 클래스에는 지식이 포함되어 있습니다

다양한 서비스에 사용되는 주소 체계에 대해 URL을 형성하는 데 도움이됩니다 쿼리 개체에서 URL을 만들도록 허용하거나, 또는 URL을 쿼리에 직접 전달할 수도 있습니다 이전과 마찬가지로 Zend Gdata Query는 일반 쿼리 클래스이며, 많은 서비스가 특수한 쿼리 클래스를 가지고 있지만, 젠드 Gdata 유튜브와 같은 피드는 서비스 클래스에 의해 반환됩니다 네트워크 요청에 응답하여, 종종 쿼리의 도움을 사용합니다

피드는 단순히 엔트리 객체의 집합이며, 소량의 메타 데이터와 함께 컬렉션을 설명합니다 젠드 Gdata 피드는 이것의 예입니다 다양한 서비스에 사용되는 하위 클래스가 많이 있습니다 엔트리는 이름에서 알 수 있듯이, 어떤 것에 관한 논리적 인 데이터 모음을 나타냅니다 블로그 게시물 일 수 있습니다

또는 연락처 또는 캘린더 이벤트 Zend Gdata Entry, Zend Gdata 피드와 마찬가지로, 각 서비스에서 사용하는 많은 하위 클래스가 있습니다 마지막으로 엔트리와 피드 내부에 확장 요소 개별 데이터 조각을 나타내는 데 사용됩니다 예를 들어, 블로그의 소유자 일 수 있습니다 게시물의 제목 또는 달력 이벤트의 날짜

이들은 서브 클래스로 표현됩니다 Zend Gdata 앱 확장 프로그램 이제는 도서관에 익숙해졌습니다 우리는 간단한 프로그램을 작성하려고합니다 Blogger 용 게시물을 만들고 표시 할 수 있습니다 시작하자

그래서, 시작하겠습니다 새로운 HTML 파일 나는 이것을 "Blogger PHP 데모"라고 부를 것이다 그리고 나서 페이지 상단에 멋진 제목을 붙이겠습니다 괜찮아? 그리고 나서 나는 그냥 가서 bloggerphp로 저장하겠습니다

내 웹 루트 내부 맨 위에는 PHP 코드 블록을 삽입하겠습니다 Zend Gdata 라이브러리에로드합니다 가장 먼저로드해야하는 사항 Zend Framework를 사용할 때 Zend / Loaderphp입니다

Zend Loader를 사용할 수 있습니다 보유하고있는 다른 종속성에서로드하십시오 이 경우 Zend Gdata를 사용하고 있습니다 젠드 Gdata 쿼리 및 젠드 Gdata ClientLogin Zend Gdata와 Zend Gdata 질문 이전에 논의했습니다

Zend Gdata ClientLogin Blogger에 가서 인증하는 데 사용됩니다 그래서, 그 자리에 일단 내가 몸에 내려 가서, PHP 코드의 또 다른 블록을 만들고, Blogger에 인증 할 수 있습니다 다시 한번 우리는 ClientLogin을 사용하고 있습니다 실제로 인증합니다 다른 옵션을 여기에서 사용하고 싶을 수도 있습니다

당신이 가서 로그인 할 수있는 auth 70 auth입니다 실제로 사용자의 비밀번호를 보지 않고도 정말 웹 애플 리케이션을위한 훌륭한, 이는 사용자의 보안을 보호하기 때문입니다 완료되면 인스턴스를 만듭니다 Zend Gdata 서비스 클래스의 이름을 Blogger 서비스라고합니다

거기에서 우리는 앞으로 나아갈 것입니다 모든 사용자의 현재 블로그 목록을 가져옵니다 그래서 우리는 새로운 쿼리를 생성합니다 음,이 URL은 Blogger 메타 피드 일뿐입니다 이는 사용자가 사용할 수있는 모든 블로그를 나열합니다

이 내용은 codegooglecom에 설명되어 있습니다 그런 다음 Blogger 서비스를 사용합니다 가서 그 사료를 가져와

거기에서 우리는 첫 번째 블로그로 이동하여 추출합니다 그게 우리가 지금 당장 걱정하는 것이기 때문에, 우리는 제목, 블로그의 URL, 해당 블로그에 대한 피드의 URL 여기서 주목해야 할 것은 제목, 일반적으로 문자열로 생각하는 반면, 실제로 XML 요소입니다 따라서 다양한 속성을 가질 수 있습니다 그래서 당신은 확신해야합니다 실제로 제목의 텍스트를 요청하려면 거기에있을 수있는 다른 것과는 대조적입니다

그리고 이것은 다른 확장 요소에도 적용됩니다 괜찮아? 그리고 나서 우리는 앞으로 나아가서 이것을 인쇄 할 것입니다 우리 브라우저에서 이것을로드하면 첫 번째 블로그를 성공적으로 가져 왔음을 알 수 있습니다 그리고로드하면 인덱스 페이지가 있습니다 그리고 그것은 좋아 보인다 그러니 가자 그리고 좀 더 흥미로운 것을하십시오

가자 실제로 가져와 이 블로그에서 사용할 수있는 모든 블로그 게시물 다시 말해, 우리는 새로운 쿼리를 생성합니다 이전에 추출한 블로그 피드 URL을 사용합니다

그런 다음 다시이 서비스를 사용하여이 피드를 가져옵니다 그런 다음이 피드의 모든 항목을 반복합니다 여기에서 모든 항목은 블로그 게시물을 나타냅니다 각 블로그 게시물에 대해, 우리는 가서 블로그 게시물의 URL을 추출합니다 제목 목록에 화면에 표시 할 수 있습니다

다시 페이지를 새로 고침하면 성공적으로 가져온 것을 볼 수 있습니다 모든 블로그 게시물을 사용할 수 있습니다 괜찮아? 그래서 이제 끝났습니다 블로그에 새로운 글을 삽입 해 보겠습니다 그래서 나는 여기로 가서 양식을 만들거야

이것은 단지 일반적인 게시물입니다 우리가 지금하고있는 것과 똑같은 페이지로 그것은 두 개의 입력을 가지고 있습니다 – "title"이라는 이름의 텍스트 필드 "body"라는 텍스트 영역이 있습니다 그리고 바로 여기에서 볼 수 있습니다 지금은 아직 아무 것도하지 않고 있습니다 그러니 그걸 수정합시다

그래서, 우리가 첫 번째 블로그를 가져온 직후, 우리는 포럼에 아무것도 있는지 확인합니다 포럼이 완전히 비어 있다면, 우리는 아무 것도하지 않을 것입니다 그러나 포럼에 사물이 있다면, 우리는 갈 것이고, 어, 새 항목을 만들 것입니다 제목과 내용을 채운다 제목 및 내용 확장 요소 사용 그런 다음 게시물에서 제목과 본문을 가져옵니다

블로그에 서비스 클래스를 삽입하고, 삽입 항목을 사용합니다 한 번 더 저장하면 그런 다음 브라우저로 다시 전환하십시오 나는 여기에 제목을 입력한다 그래서, "안녕, 세상 이것은 내 샘플 게시물입니다

" 그리고 계속 누르십시오 게시물이 목록에 표시됩니다 블로그 색인을 다시로드하면 거기 나타납니다 그리고 내가 여기의 지위를 클릭하면, 우리는 그 게시물 전용 페이지로 이동합니다 더 많은 것을 배우고 싶다면, PHP 시작하기 가이드를 확인하십시오

이 동영상과 함께 제공됩니다 URL이 화면에 표시됩니다 젠드 프레임 워크 매뉴얼은 심층적 인 정보를 담고있다 Zend Framework 모듈로 작업하는 방법, 이 것을 포함하여 framework

zendcom/manual에서 찾을 수 있습니다 마지막으로, 필자가 앞서 언급 한 젠드 프레임 워크 API 참조, frameworkzendcom/apidoc/core에서 구할 수 있습니다

시작하는 법을 알기를 바랍니다 지켜보고 행복하게 코딩 해 주셔서 감사합니다

Rasmus Lerdorf: "PHP Frameworks suck!"

안녕, 라스무스 – 안녕하세요

안녕하세요 우리의 주제는 프레임 워크의 날입니다 예 프레임 워크에 대한 의견을 말씀해 주시겠습니까? 고맙습니다 그들은 모두 빤다

그래서 그들은 모두 빨기도하지만 모두가 틀을 필요로합니다 모두가 필요로하지 않는 것은 범용 프레임 워크입니다 아무도 일반적인 문제가 없습니다 모두가 해결하려고하는 매우 구체적인 문제가 있습니다

범용 프레임 워크는 해결할 수 있지만, 그것은 보통 당신이 필요로하지 않는 많은 다른 것들을 얻는 방식으로 그것을 해결합니다 모든 요청에 ​​대해 끝납니다 사용중인 데이터베이스를 확인하는 프레임 워크가 있습니다 그래서, 당신은 요청을했습니다 : "이봐, 어떤 데이터베이스를 사용하고 있니?" "MySQL" 자,이 일을로드하는 MySQL 클래스를로드 해 봅시다

그런 다음 ORM을 초기화하고이 데이터베이스를 사용하도록 지시하는 것을로드합니다 2 밀리 초 후에 다음 요청이옵니다 "이봐, 우리가 사용하는 데이터베이스는 무엇입니까?" "아직도 MySQL", 맞죠? 그리고 매 요청마다 우리는이 모든 질문에 이러한 모든 질문을하고 있습니다 이 모든 것들, 매 요청마다 만들어야 할 동적 인 결정, 한 요청에서 다음 요청으로 바뀌지 않습니다 이 특정 후크를 API에 연결하지 않은 경우, 당신은 그것을 2 밀리 초 또는 그 후 2 밀리 초에 연결하지 않았습니다

그래서 대개 대기업, 회사가 성장하고 범용 프레임 워크로 시작한 경우, 그들은 물건을 찢어서 물건을 최적화하기 시작합니다 그리고 그들은 프레임 워크를 찢어 버리고, 그들이 업그레이드 할 수없는 지점까지 따라서 프레임 워크의 새 버전이 있으면 실제로 중요하지 않습니다 그들이 망할 프레임 워크를 너무 많이 수정했기 때문에 그들이 현재 사용중인 버전에 머물러 있기 때문입니다 그리고 그것은 큰 문제라고 생각합니다

그래서 저는 프레임 워크 사람들, 프로덕션 푸시를 수행 할 수있는 몇 가지 방법을 제공합니다 "보세요, 저는 오프 모듈을 사용하고 있습니다

나는 항상 MySQL을 사용하고 있습니다" "나는이 특별한 물건과이 특별한 물건을 사용하고있다 그리고 프레임 워크는 "Push this, 필요한 구성 요소를 프로덕션 서버에만 푸시하십시오 " 따라서 다른 런타임 결정 중 어떤 것도 만들어지지 않습니다 물론 돌아가서 물건을 바꿀 수 있습니다

"이제이 고리를 사용하고 싶습니다" 그런 다음 코드를 프로덕션 서버로 푸시합니다 하지만 dev 환경과 생산 환경이 같은 경우에는 안된다 왜냐하면 그것은 스크립팅 언어이기 때문입니다 런타임에 발생하는 많은 것들이 있습니다

런 타임에 그런 일이 있어서는 안된다 그래서, 그것이 내가 많이 볼 수있는 한 가지입니다 사람들은 범용 프레임 워크를 사용하고 그것을 제거합니다 내가 보는 또 다른 것은 프레임 워크가없는 사람들입니다 모듈러 프레임 워크 조각을 추가하고, 프레임 워크의 한 부분을 꺼내서 사용하면됩니다

어쩌면 다른 프레임 워크의 다른 부분을 꺼내서 사용하는 것일 수도 있습니다 그러나 많은 프레임 워크가 있습니다 우리는 한 조각을 꺼내서 모든 것이 "Bghhh "라고합니다 권리? 여러분이 물건을 끌어 올 수있는 충분한 모듈성을 가진 몇 가지 프레임 워크가 있습니다 하지만 많은 프레임 워크는 상호 연결되어 작동하지 않습니다 일반적으로 사람들에게 목표로 삼은 프레임 워크를 찾아 보라고합니다 그래서, 당신이 많이 닮은 문제가 있다면 : 블로깅 문제, 어쩌면 WordPress가 프레임 워크 여야합니다

맞습니까? 훌륭한 프레임 워크는 아니지만 만약 문제가된다면 문제가 아주 가깝다면 WordPress에서 처리 할 수있는 것, WordPress의 대부분을 사용할 가능성이 있습니다 당신이 만지지 않을 일반적인 목적의 것들이 전부는 없을 것입니다

그리고 당신은 더 나은 타겟 프레임 워크를 가지고 있습니다 그리고 당신은 워드 프레스 업그레이드로 업그레이드 할 수 있습니다 또는, 당신은 Drupal과 같은 것을 사용할 것입니다, 드루팔 (Drupal)의 집안에 더 많은 콘텐츠 관리 기능을 제공한다면, 아마도 드루팔 (Drupal은 더 나은 프레임 워크입니다 왜냐하면 그것은 범용 프레임 워크보다 더 목표이기 때문입니다

2.Обзор и настройка Nova Framework

인사말 우리가 노바에서 더 많은 것을 보자

루트 디렉토리에는 모든 요청이 '공개'디렉토리에서 처리되고있다는 "htaccess"파일이 있습니다 그 direcory에는 "htaccess"가 하나 더 있습니다 이 파일은 index

php에 대한 모든 요청을 처리합니다 그래서 우리는 하나의 진입 점을 가지고 있습니다 Configs를 보자 Appphp : url, 이메일이 이미 변경되었습니다

사이트 이름, 현재 로케일 및 시간대를 변경해 보겠습니다 해당 URL로 키를 변경할 수 있습니다 나중에 콘솔에서 변경하는 방법을 보여 드리겠습니다 또한 해당 파일에는 공급자 및 별칭이 포함되어 있습니다 Database

php를 봅시다 : 여기에 DB 커넥터가 있습니다 이제 MYSQL 데이터베이스와 사용자를 생성하십시오 관리자 측에서 필요로하며 구성 저장에 사용합니다 우리는 파일 app Configphp의 테이블에 대해 PREFIX를 변경할 수 있습니다

Config 스토리지를위한 스토리지를 변경할 수 있다는 것 Mailphp : 메일 서비스와 함께 작동하도록 구성된 구성이 파일에 포함되어 있습니다 "척"은 이메일 전송을 에뮬레이트하기 위해 사용합니다 Profiler

php : 그 파일은 디버그 콘솔을 처리하고 있습니다 이 콘솔은 개발자에게 유용한 정보를 보여줍니다 콘솔을 보자 어 메인 페이지에서 볼 수 있습니다 두 cfg를 모두 "true"로 변경하십시오 구성 저장소를 "데이터베이스"로 변경했으나 테이블을 만들지 않아서 오류가 발생했습니다 그것을 수정합시다 "scripts"폴더에는 MYSQL 요청 (모든 테이블 + 데모 ​​데이터)이 들어있는 "nova_testing

sql"이라는 파일이 있습니다 해당 파일을 phpMyAdmin으로 가져옵니다 오 이전 MYSQL 요청은 PREFIX = "nova_"인 테이블을 만들었으므로 PREFIX를 "nova_"로 다시 변경해야합니다

이제 콘솔을 볼 수 있습니다 거기에 : 로딩 시간; DB 쿼리, 사용 된 메모리, 포함 된 파일 및 크기 관리자 쪽을 확인해 봅시다 기본 쌍은 admin / admin입니다 Admin-part는 잘 동작하지만, 거기에 언어 상수에 대한 몇 가지 문제점을 볼 수 있습니다 그것이 고정 될 수 있습니다 🙂 이제 모든 설정은 DB에 저장됩니다 (코드에서 이전에 변경 한 매개 변수) 우리는 사용자와 그들의 역할 (사용자 그룹) 다른 파일들은 나중에 논의 될 것입니다

Nova에는 "Forge"라는 유용한 명령 행 인터페이스가 있습니다 해 보자 자 모든 명령을보기위한 명령 모든 명령은 블록으로 그룹화됩니다 필자는 PhpStorm IDE에서 작업했기 때문에 Forge를 사용하고 싶습니다 이제 IDE를 구성 할 것입니다 Well

IDE에서 Forge를 시도해보십시오 이제 우리는 Forge로 새로운 앱 키를 생성 할 수 있습니다 성공 또한 Composer 용 IDE를 구성 할 것입니다 추신 : "ProgramData"숨겨진 direcory입니다

"작곡가 업데이트"를 통해 작곡가를 확인하십시오 업데이트 완료 파일 작곡가 json 열기 Nova에는 PSR-4 자동 로딩 사양이 있습니다 이제 IDE (자동 또는 수동) 용으로 디렉토리를 구성 해 보겠습니다 계속합시다

"부팅"디렉토리에서 환경을 관리 할 수 ​​있습니다 Forge Forge에 대한 명령을 내릴 수 있습니까? 기본적으로 CMF에는 "Welcome"컨트롤러가 있습니다 여기서 우리는 키로 언어 파일에서 언어 상수를 얻는 함수를 볼 수 있습니다 그런 다음 데이터가 포함 된보기를 만듭니다 기본적으로 Nova에는 두 개의 템플릿이 있습니다

AdminLTE는 Boostrap 3 기반의 관리자 측에서 사용합니다 Frontend 용 "기본"템플릿 각 템플릿에는 모든 모듈과 같은 언어 파일이 있습니다 귀하의 행동을 관리하는 파일 Routesphp (url => controller @ action) 시작 페이지 => 컨트롤러 : 환영; 방법 : 색인 하위 페이지 => 컨트롤러 : 환영; 방법 : 서브 페이지 자, 확인해 봐 메소드 "색인" 메소드 "서브 페이지" 기본적으로 프레임 워크에는 두 가지 모델이 포함됩니다

사용자 및 역할은 인증에 사용됩니다 기본적으로 여기에는 모듈의 예가 있습니다 다음 비디오에서는 모듈을 만드는 것에 대해 이야기 할 것입니다

Custom Configuration Files, Keys, and env Variables – Become a Master in Laravel – 06

이 강연에서 우리는 구성 파일 사용, 키 및 env 파일 그래서 이것이 우리의 프로젝트입니다

여기 우리는 우리의 길을 가지고있다 안녕과 이드 나는이 ID를 더 이상 사용하지 않을 것이다 그래서이 이드를 제거하십시오 이 파일 저장 과 우리는 또한 여기에서이 ID를 삭제합니다 이제 우리는 새로운 변수 데이터를 생성 할 것입니다

그리고 우리는 데이터를 저장할 것입니다 그리고 우리는이 데이터를 여기에 전달할 것입니다 우리의 뷰 파일 나는 이것을 제거 할 것이다 이 모든 것 그리고 우리는이 데이터를 사용할 것입니다 이처럼 승인 이제 그게 다야

이것들은 내가 지금까지 만들었던 변화들입니다 이 프로젝트에서 파일을 저장하고 확인해 봅니다 우리 파일이 작동 중입니다 구성 파일은 구성 폴더에 있습니다 config 폴더는 어디에 있습니까? 다음은 config 폴더입니다

Laravel은 다양한 구성 파일을 제공하여 데이터베이스 드라이버, 서비스 등을 쉽게 수행 할 수 있습니다 이것은 우리의 응용 프로그램입니다 파일 앱 (점) PHP 그리고 여기에서 그것은 배열을 반환합니다 authphp가 표시되면 또한 배열을 리턴하고있다 만약에 다른 것을 보면 Broadcasting

php 그것은 또한 배열을 반환하고있다 즉, 모든 구성 파일 배열 반환 중입니다 그래서 우리는 그것을 사용할 수 있습니다 열쇠가 있다고 가정 해 봅시다 내가 말하다 나는 관리자가있다

그리고 우리는 배열을 만든다 그리고 말하자 그 admin@admincom 이 파일 저장 우리는이 관리자가 있습니다 지금 우리는 우리의 컨트롤러에 간다

과 우리의 컨트롤러로 이동 우리는 이렇게 사용합니다 구성 과 appadmin 따라서 덤프 및 죽거나 죽어서 데이터를 덤프하십시오 이것을 확인하자 하나의 배열을 볼 수 있습니다

admin@admincom 그래서 우리도 이것을 할 수 있습니다 데이터 배열 값이 하나뿐이기 때문에 하나의 배열 값 과 색인이 0 임 우리는 이러한 변화를 만들었습니다 이것을 확인하자 예 이제 우리는 우리 열쇠에 접근 할 수있다

그것이 우리가 키를 사용하는 방법입니다 구성 파일 우리는 또한 자신의 구성 파일 새 파일을 만들어 보겠습니다 이 구성 폴더에 새로운 파일 그것을 말해 보자 관리자 (도트) PHP 그래서 우리는이 admin (dot) PHP 파일을 만들었습니다 및 관리자 (점) PHP 파일 우리는 무엇을 할 것인가? 우리는 우리는 단순히 배열을 리턴 할것이다

그게 다야 그리고 배열에서 우리는 우리가 여기에있는 것 이 줄들을 여기에서 자르십시오 여기에 붙여 넣으세요 이 파일 저장 앱 (점) PHP 파일 닫기 그리고 우리의 컨트롤러 파일 우리는 관리자 인 우리 파일로 이동하십시오 관리자 점 관리 우리 열쇠는 관리자이기 때문에 파일 이름도 admin입니다

이제 이것을 확인해 보겠습니다 그리고 우리는 결과가 있습니다 이것이 우리가 어떻게 사용하는지입니다 구성 파일 이제 (점) env 파일 사용 env 파일에는 많은 것들이 있습니다 키와 값이 너무 많습니다

만들어 보자 앱 관리자 우리는이 응용 프로그램 관리자가 컨트롤러에서도 사용할 수 있습니다 이처럼 나는 이것을 논평하고있다 또한이 점을 주석으로 달기 데이터는 env와 같으며이 값은 그리고 우리가 이것을 확인하십시오 이제 우리는이 가치를 가지고 있습니다

그러나 이것은 잘못된 것이다 제발 env를 사용하지 마십시오 직접 파일에 컨트롤러 또는보기 이런 식으로 사용하지 마십시오 env 값을 사용하려면 항상 당신의 집에서 사용하십시오 구성 파일 이처럼 이것을 사용하지 마십시오 때문에 이것들은 당신의 신청을 늦출 것입니다

사실이 설정 폴더는 Laravel의 캐시 임 이렇게 사용하십시오 이 이제 확인해 보겠습니다 그것은 구성의 사용입니다 파일, 키 및 env 파일 정말 고마워 이 강연을 보면서 나는 다음에 너를 볼거야

돌보기

Should I Learn Zend Framework?

Zend Framework를 배워야합니까? Zend Framework를 사용하려면 Zen Framework에 대해 알아야 할 필요가 있다고 들었습니다 많은 프로그래밍 언어를 배우는 것이 더 어렵습니다

나는 배우기도 어렵다고 들었다 어려움에 처한 CakePHP와 비슷합니다 그러나 소스 코드의 API는 일관성이 없습니다 알아 내기가 더 어려워졌습니다 그렇다면 누구는 왜 그것을 사용합니까? 표준 디자인 패턴을 사용하기 때문에 일단 프레임 워크 코드를 읽으면, 당신은 무슨 일이 일어나고 있는지 이해합니다

나는 누가 코드 리뷰어를 제외하고 그것을 사용 했는가? MVC 응용 프로그램을 처리하는 데 사용하는 Java Struts Spring 프로그래머가 있습니다 그들은 좋아한다 응용 프로그램을 확장하거나 사용자 정의하기 위해 인터페이스 코드를 작성할 필요가 없기 때문입니다 루틴으로 인해 작업하기가 어렵다고 들었습니다 누군가를 특정 URL로 라우트하는 데 필요한 9 줄의 코드라고 생각했습니다

누군가 Zend가 경쟁자보다 더 안전하다고 말했습니다 MySQL 주입에 대한 보호 기능을 설정하지 않으면 해킹 될 수 있습니다 적어도 젠드 프레임 워크를 배울 경우 필자는 프로그래머로서 좋은 임금을받을 수 있습니다 Zend는 프로그래밍 프레임 워크 일 뿐이며 프로그래밍 언어가 아닙니다 에이 많은 젠드 프레임 워크 사용자가 PHP 또는 Java로 코딩하고 있습니다

Zend는 어떤 장점을 가지고 있습니까? 그것은 정말 좋은 검증 구성 요소를 가지고 있습니다 그렇다면 다시 한번, 복잡성을 감안할 때, 좋은 검증 구성 요소를 가지고 있거나 사람들이 첫 번째 시도를 찾은 후에 포기할 것입니다 버그 그것이 나를 위해 충분하지 않습니다 젠드 프레임 워크는 객체 지향 코드를보다 재사용 가능하게 만듭니다

첫 번째 글을 쓰는 것은 고통입니다 시간은 있지만 나중에 재사용하기 쉽습니다 한 번 고뇌하지만 나중에는 아프다 웃긴 나는 그 다른 MVC 프로그래밍을 듣지 못했다 방법론은 고통 스러웠습니다

Zend에는 모델 구현이 없습니다 따라서 MVC는 VC가됩니다 PC 프로그래밍에 인기가 없다는 것은 당연합니다