[세미나] [코 하나 : 경량 PHP 프레임 워크] [브랜든 리우] [하버드 대학] [이 CS50입니다.] [CS50.TV] 안녕하세요 여러분. 내 이름은 브랜든입니다. 나는 대학 일 컴퓨터 과학에서 여기에 주니어입니다 오늘 우리가 얘기하는거야 PHP 웹 개발 프레임 워크입니다 코 하나. 오늘은 라이브 코딩 세미나가 될 것입니다, 그래서 기본적으로, 코 하나가 무엇인지 설명하는 5 분에서 10 분 소요거야 다음 말 그대로 슈퍼 간단한 블로그를 만들거야 여기 말 그대로 처음부터 당신을 위해. 우리는 코 하나의 웹 사이트에서 코드를 다운로드거야 그리고, 우리는 블로그를 구축 시작하는거야, 희망 매우 유익 할 것이다 당신은 아마 어쩌면 볼 수 있기 때문에 몇 가지 실수를 할 수 있습니다, 당신은 나를 그들로부터 회복 될 수 있습니다, 나는이 블로그를 통해 구축 또는 당신은 나의 사고 과정을 볼 수 있습니다, 그 사이에, 당신은 또한 프레임 워크 자체에 익숙해 있습니다. 바라건대 그것은 매우 유익한 운동이 될 것입니다. 먼저, 프레임 워크가 정확히 무엇입니까? 지금까지 CS50을 복용 한 적이 있다면, 당신은 정말 어떤으로 근무 한 적이없는 프레임 워크 아직, 그리고 일이 있습니다. 당신은 아마 이미 1 웹 개발 PSET을 수행 한 과의 당신이 웹 사이트를 구축하고 웹 사이트 구축을 계속 유지 해 봅시다. 당신은 몇 가지를 통지 시작합니다. 당신이 가장 먼저 알 수있는 것은 당신이 아마 같은 일을하고있는 것입니다 또 다시 모든 시간, 사용자가 입력 한 데이터를 청소 같은 것들, 특정 방식으로 파일을 정리 같은 것들. 당신은 또한 아마 알 수 있습니다 다른 것은입니다 코드 매우, 매우 성가신 될 수 시작할 수 있습니다, 당신은 지저분한두고 그냥 아주 힘든 시간을 유지하는 경우가 있습니다 만, 또는 당신은 당신의 코드를 구성하기 시작하고 모듈하고있다 더 유지 보수 할 수있는 특정 방법으로. 웹 프레임 워크는 기본적으로 들어온 곳 >>입니다 많은 웹 사이트를 구축했다이 사람들은, 그들은 말했다, "우리는 우리가 웹 사이트를 구축 매번 다시 할 필요가 없습니다." "왜 우리는 당신을 위해 모든 일을 수행하는 패키지를하지 않는다 매번 당신은 웹 사이트를 구축하고 싶어? " 그리고 당신이 새로운 웹 사이트를 만들 때, 당신은 정확히 특정 웹 사이트에 대해 무엇인지에 초점을 맞 춥니 다. 당신은 모든 다양한 구성을 반복 할 필요가 없습니다 과 코드의 분리 및 재 작성 코드 당신은 자주 당신이 웹 사이트를 만들거나, 할 필요가있다. 아이디어는 프레임 워크는 높은 수준의 코드를 작성할 수 있다는 것입니다 낮은 수준의 세부 사항에 대해 걱정하지 않고. 낮은 수준의 세부 사항과 같은 수 있습니다 사용자 입력 데이터를 청소 다루는. 즉, 당신이 정말로 걱정 할 필요가 없습니다 뭔가. 당신은 당신의 웹 할당에 대해 실제로 무엇에 집중해야합니다. 이 상용구 코드를 많이 제거합니다. 그것은 당신의 프로젝트를위한 아키텍처입니다. 가장 인기있는 하나의 모델 - 뷰 - 컨트롤러가 될 것입니다 나는 두 번째에 대해 이야기하는거야. 및 시간이 많이 이러한 프레임 워크는 일련의 절차를 구체화 귀하가 사용하는 규칙 및 우수 사례 그 그래서 당신은 웹 프레임 워크를 채택 할 때 당신은 어떤 방식으로 코드를 작성해야 그것은 일반적 원칙들에 합의 된 것 일반적으로 허용되는 사회의 코드를 작성하는 좋은 방법. 그것은 더 유용, 코드를 더욱 유지 관리합니다 등등 등등. 그리고 마지막으로, 내가 원하는 것은 프레임 워크에 대한 강조 라이브러리 대 제어의 반전에 대한이 생각은, 그리고 일이 있습니다. 라이브러리와 프레임 워크의 차이는 그 라이브러리 당신은 여전히​​ 주요 프로그램을 작성하는, 당신은 종류의 라이브러리를 호출하고 당신을 위해 뭔가를 도서관에 전화. 라이브러리와 프레임 워크의 차이 프레임 워크가 제어로 시작한다는 것입니다, 그리고 그것은 당신의 코드를 호출 그래서 당신은 그것을 생각할 수있는 -이 프레임 워크라는 이유입니다 - 프레임 워크는 코드의이 프레임 구조를 제공한다, 당신은 구멍을 채우 이것은 제에서보다 명백해질 것이다 당신이 볼 때 프레임 워크의 컨텍스트 내에서 코드를 작성하기 시작합니다. 내가 격차를 작성하고 있습니다 것을 알 수 있습니다, 그리고 프레임 워크는 종류의, 모든 움직이는 조각을 제어하는 나는 적당한 장소에 조각을 넣어해야합니다. 오늘 우리는 코 하나에 대해 이야기 할 것입니다, 이는 많은 PHP 프레임 워크 중 하나입니다. , 웹 프레임 워크가있다, 그리고 사람은 거의 모든 하나의 언어가있다 코 하나는 틀림없이 때문에 나는 코 하나를 따기 해요 일반적으로 픽업 할 수있는 가장 쉬운 PHP 프레임 워크로 인식. 그것은 가장 가벼운입니다. 많은, 더 많은 기능을 함께 거기에 다른 사람이있다 그러나 픽업하기 어려운 경향이있다. 그리고 마지막으로, 코 하나는 MVC 아키텍처를 사용합니다. 우리가 말 그대로 프로젝트를 빌드 할 수있을만큼 경량의 여기 바로 눈 앞에서, 당신은 꽤 많은 수 아주 쉽게 따라 따릅니다. MVC 아키텍처는 무엇입니까? 그것은, 모델 - 뷰 - 컨트롤러를 의미합니다 당신이 코드를 생각하면 어쩌면 당신은 지금까지 쓰고있어 웹 개발하여 pset의 일부 당신이 쓰기를 시작할 때 일반적으로이 중 일부를 볼 수있을 수 있지만, 더 복잡한 웹 응용 프로그램, 이 3 개의 세그먼트 사이의 구분은 점점 더 분명해진다. 나는 종류의 스택 여기에 MVC를 배치 종종 당신은 사람들이 웹 개발에 스택에 대해 이야기 듣게 될 것입니다, 이것은 아이디어를 설명하는 것을 각 층은, 각 구성 요소는 실제로 단지 통신을 시도 2 다른 구성 요소 사이. 누군가가 클라이언트 또는 브라우저로 웹 사이트에 액세스합니다. 그들은 뷰 코드를 통해 프로그램과 상호 작용합니다. 뷰 코드는 컨트롤러와 상호 작용합니다. 제어기는, 모델과 상호 작용 그리고 모델은 SQL 데이터베이스와 상호 작용합니다. 당신이 적절하게 코드를 작성하는 경우 사이에 호핑가 없습니다. 이런 일들은 어떻게해야합니까? 이 모델은 기본적으로 데이터를 다루는 코드의 조각이다. 당신이 저장하는 객체, 데이터베이스를 다루는 아무거나 또는 데이터베이스에서 해당 개체를 검색, 이 모든 모델에 의해 처리하고. 어쩌면 당신은 당신의 데이터베이스의 개체가 있습니다. 우리는 글과 함께 할 필요 모델을 만들 것입니다, 그래서 포스트는 몇 가지 특성을 가지고있다. 당신은 그 글을 저장하거나 게시물을 검색하는 주위에 함수가있을 수 있습니다 또는 등등 등등 게시물을 필터링, 그리고 그 모델에 의해 처리하고 모든 코드입니다. 컨트롤러는 애플리케이션 로직의 일종이며, 다른 많은 것들을 응용 프로그램 논리에 갈 수 있습니다. 당신은 다른 API로 이야기하는 경우, 응용 프로그램 로직을 처리하는 곳이 될 수있다. 여러 다른 모델에서 데이터를 반입 할하려는 경우 종종 컨트롤러에 의해 처리 될 수있는 몇 가지 방법을 결합해야합니다. 예를 들어, 페이스 북에, 당신의 친구 사람의 경우, 그 관계를 수립 한 다음, 아마도 그 행위 컨트롤러에 의해 수행 할 수 있습니다. 그리고 마지막으로,보기는 당신이 실제로 무엇을보고 만들어 줄 코드입니다. 많은 시간 나는 CS50의 psets를 생각 그들은 정말이 3 가지를 분리하는 너희들을 권장하지 않습니다. 당신은 아마 상단에 위치이 큰, 긴 파일이 있습니다 일부 SQL 쿼리를하고 어쩌면 일부 처리에게 할 데이터는 데이터베이스에서 검색 그리고 당신은 바닥에 모든 HTML이있다. 당신이 더 많은 페이지를 만들 때 그리고 당신은 그것을 찾을 수 있습니다 당신은 또한 몇 가지 코드의 반복을해야 할 것,하고 있다는 것을, 것은 당신의 파일이 정말 크고 긴 얻고 있습니다 및 관리 다루기됩니다. MVC는 잘 받고있는 이유 여러 가지 이유입니다. 우선은의 분리 뭔가를 호출 이는 당신이 가지고있는 생각입니다 - 코드 이상적으로 1 개 조각, 1 일을 정말 잘해야 당신은 다른 일을 할 코드의 조각을 결합하지 않아야합니다. 예를 들어, 코드 및 모델 코드를 볼 그들은 정말 관련이있을 필요가 없습니다. 만약, 그것들을 분리 할 때 동일 파일에 있어야하므로 않는다 그래서 그것을 유지하기 쉽습니다. 다른 것은 코드 재사용이다. 당신은 자신이 같은 SQL 쿼리를 작성하거나 일을 찾을 수 있습니다 1 함수로 추상화 될 수있는 유사한 쿼리, 그리고 그 아이디어 모델과 컨트롤러 뒤에 프로젝트에서 다른 장소에서 재사용 할 수있는 별도의 기능에 필요. 그리고 마지막으로, 즉, 코드를 건조에 묶여 나 자신을 반복하지, 자신을 반복하지 않는다. 이것은 개발에서 매우 이해할 수 있습니다. 당신이, 당신은 당신이 자신을 반복하는 경우 때문에, 자신을 반복하지 않으려 할 수 있습니다 때마다,  그것은 훨씬 더 비용이 많이 드는 유지하기 위해의. 당신이 한 일을 변경하려는 경우에는, 사방에 그것을 변경해야 해당 버그에 이르게하고, 끔찍한입니다. 좋아요. 지금까지 코 하나에 대한 질문은 전혀? 좋아요. 이제 우리는 라이브 코딩 세션에 뛰어들 것입니다, 잘하면 모든 것이 잘 어울린다. 나는 기본적으로이 웹 사이트를 구축 할 예정 내 원격 서버 중 하나, 너희들도 할 수있는 방법에 웹 사이트를 확인하고 웹 사이트에 액세스, 또한 환경, 내 원격 시스템보다 더 나은 구성 대신 OS X의 리눅스를 실행 때문 우리는 말 그대로 시작하는 것입니다. KohanaFramework.org. 나는 웹 사이트에서 코드를 다운로드하는거야. 나는 링크 주소를 복사거야, 내 서버로 이동, 그것을 다운로드 나는 그것을 추출하는거야. [학생] 텍스트를 만들 수있는 가장 큰은 무엇입니까? [브랜든 리우 즉 더 나은가요? [학생] [브랜든 리우] 네, 괜찮아요 것을 행할? >>입니다. 나는, ZIP 파일을 다운로드 및 코 하나라는 디렉토리에 그 압축을 해제 그리고 우리는 그 CS50-코 하나의 이름을 바꿀거야 하고 들어가요 신난다. 여기에 다른 파일들을 참조하십시오. 당신의 대부분은 무시할 수 있습니다 - 여기에서의 모든 단일 파일을 통해 갈 수 없습니다라는 거예요 우리의 시간 제약 때문에, 그러나 일반적으로는 코 하나, 당신이 제일 먼저 설치하는 경우 당신이 디렉토리로 이동하고, 당신은 기본적으로 일부 환경 테스트 및 이것 저것을 할 것이다 확인 환경이 제대로 코 하나를 실행하도록 설정되어 모든 것이 괜찮아 있는지 확인하십시오. 당신은 대부분의 일들이 전달 볼 수 있지만, 일반적으로 당신은 항상 1이 문제로 실행 그것은, 어떤 디렉토리에 쓰기 권한이 없습니다 뿌려 곳 그 때문에 약간의 사용 권한입니다. 나는 너희들이 CS50에있는 파일 사용 권한에 대해 배운 얼마나 몰라 당신이 웹 개발을 할 경우에, 당신은이 문제에 많이 실행하는 것입니다. 나는 그것이 가능한 만들려고 해요 우리가 갈이 - 난에 나는 또한이 생각합니다. 자, 이제 당신이 모든 것을 통과 볼 수 있습니다, 지금은 설치 install.php 파일의 이름을 알려줍니다. 나는 installed.php에 설치 install.php 파일을 이동하는거야, 지금은, 새로 고치면 그것은 나에게 약간의 오류를 제공하고, 디버깅이 들어오는 곳이다 당신이 실제로 무슨 일이 일어날 지 볼 수있는 곳이다. 문제는 기본적으로 코 하나는 가정이다 프로젝트는, 도메인의 루트 디렉토리에 있습니다 그래서 당신이 demo.brandonkliu.com에있을 것으로 예상하고 있어요. 우리는 하위 폴더에 실제로 있다고 그것을 말해야한다. 그것은 CS50 코 하나라는 하위 폴더에 있습니다. 점은 CS50-코 하나를 잘못 해석하​​는 것입니다 나는 두 번째에 당신에게 설명 할 것 다른 것뿐. 하지만 그 예상 할 수있는 무언가의 당신을 말해야한다. 우리가하려고하는 것은, 우리가 bootstrap.php이라는 폴더로 갈거야입니다 이는 다른 많은 것들을이 설정되어있는 구성 폴더입니다. 나는 그것을 엽니 다. 어쩌면 내가 가장 먼저 것들 중 하나는 시간대를 변경합니다. 그리고 나서 보자. 아하! 바로 여기. 다른 구성 말의 무리가 여기에 있습니다, 하지만 내가 찾는 사람은, 기본 URL이라는 것입니다 기본적으로 나는 그것이 코 하나에 설정하세요 하지만, CS50-코 하나에 그 변경거야 나는 그 문제를 해결할한다고 생각합니다. 그래, 좋아. 기본적으로, 그것은 말한다 작동하고 있음을 볼 수 있습니다에 "Hello World." 그 어디에서 왔는가? 우리는 어떻게 안녕하세요에 도착 했습니까? 정확히 어디서 실제로 쓴 코드는? 그것을 이해하기 위해, 라우팅이라는 개념을 소개한다. 거의 모든 웹 프레임 워크, 라우팅이라는 개념이 특정 URL을 매핑 할 소프트웨어의 조각입니다 당신의 프레임 워크 내에서 특정 코드에. 당신은 어떤 URL을 가지고 예를 들어, 당신은 같은 foo.com / 블로그 / 모두가 어떤 URL로 이동 다음 어떤 프레임 워크를 할 것입니다 - 적어도 어떤 코 하나 할 것입니다 - 그것은 컨트롤러 블로그라는 클래스를 찾을려고합니다 그것은 모든 기능이라는 작업을 실행하는 것입니다. 나는 클래스와 기능에 대해 얘기하는 거에요 알고, 나는 너희들이 클래스와 함수를 포함하지 않은 알고 아직 CS50에있는,하지만 지금은, 당신은 기능의 단지 그룹으로 클래스를 생각할 수있는, 함께 기능을 그룹화 방법. 정말 당신이 알 필요가 전부입니다. 이제 우리는 우리의 폴더 구조를 보면, 응용 프로그램 폴더 안에 클래스라는 또 다른 폴더가있다 다른 폴더는 컨트롤러와 모델이라고합니다. 당신이 컨트롤러의 폴더 안에 보면, 우리는 오신 것을 환영합니다라는 파일이 있는지 확인 당신은 여기를 참조 컨트롤러에 오신 것을 환영합니다라는 클래스입니다 수 있습니다 및 액션 인덱스라는 함수가있다 어떤이 수행하는 것은여보세요 세계로 응답의 본문을 설정합니다. 코드가 기록되는 곳이다. 다른 질문은, 음, 나는 가지 않았다된다 어쩌구 저쩌구, / 환영 / 인덱스. 내가 어떻게 여기까지 갔니? 글쎄, 그건 간단하기 때문에의 여기에 우리의 부트 스트랩 파일의 맨 아래에 우리는 우리의 경로를 설정 위치 당신은 그들이 당신을 위해 몇 가지 기본값을 설정할 것을 볼 수 있습니다. 기본 컨트롤러에 오신 것을 환영합니다. 기본 동작은 인덱스입니다. 우리가 거​​기에 아무것도 넣지 때 자동으로 시작 컨트롤러에 갔다 이유 인덱스 작업. 모든 것은 지금까지 이해? 지금, 당신은 컨트롤러로 이동보다 더 많은 작업을 수행 할 수 있습니다 특정 행동. 또한 컨트롤러에 매개 변수를 전달할 수 있습니다. 단지 예로서, 난 당신을 보여주기 위해이 컨트롤러에 다른 작업을 추가하는거야. 당신이 그것을 줄 당신이 무엇을 말하려고 때문의는, 에코이 작업을 부르 자, 그래서 나는 기본적으로 잡아 갈거야 라우팅 프로그램에 저를 통해 전송 될 것 매개 변수, 당신은 여기에서 볼 수 있듯이, 여기이 선, 당신은 그것을 볼 수 있습니다 이것은 기본적으로 당신이 컨트롤러가, 당신은 /을 의미 그리고, 당신은 행동을 가지고 있고, 다른 /이 그 매개 변수가 될 것, 그리고있어 우리는이 이름의 ID를 가지고 있기 때문에 꺾쇠 괄호 내에서, 즉 우리가이 매개 변수 ID의 이름을 지정하는 것을 의미한다. 나중에 내 컨트롤러 코드에서 내가 그 매개 변수를 꽉 잡아하려는 경우, 나는 ID라는 이름의 매개 변수를 찾아, 내가 쓴 코드를 사용할 수 있습니다. 그게 내가 여기에 무슨 짓을했는지, 나는 돌아가 말을하려고 해요, 그 "당신은 말했다". 그리고 지금은, 우리의 웹 사이트로 이동하는 경우 나는 cs50-kohana/welcome/echo/Helloooo--로 이동 아, 맞아. I는 생략 1 단계가있다. 이 라이브 코딩 아이디어의 일부입니다. 다음은 1 일입니다. 보자. 그래서 일반적으로 이러한 웹 응용 프로그램의 많은 기본적으로 당신은 당신의 URL이 index.php를 일을 포함해야합니다, 아이디어는 index.php를 진입 점의 일종 때문에 응용 프로그램,하지만 물론, 그 종류의 짜증나는 건데. 당신은 index.php 파일이 URL에 표시하고 싶지 않아 그리고 상자 밖으로 거의 모든 웹 프레임 워크 이 index.php를 문제가, 그래서 당신은 그것을 제거 할 수있는 몇 가지 조치를 취할 수있다. 그리고이 경우, 우리가 무엇을 할 거 야 우리가. htaccess로라는 파일을 사용하려고하고있다, 이것은, 아파치 웹 서버에 특정한 무언가입니다 그것은 재 작성 URL을 같은 일을 할 수있다 등 등 URL 및 리디렉션 그리고 코 하나는 우리가 사용할 수있는 템플릿. htaccess 파일을 제공 할 정도로 좋은 것입니다. 당신이 볼 수 있듯이 example.htaccess라는이 파일이 우리는. htaccess로 해당를 복사 할 것입니다. 나는이를 열고 편집 할거야, 기본적으로는 여러 가지 무리를 않습니다. 당신이보고 할 수 있습니다 키 라인 바로 여기에있다. 아이디어는이라는 규칙을 설정하는 것입니다 "그래, 당신이 무엇을 그에게 앞에 추가 index.php 파일을 입력합니다." 당신은 그것을 볼 수 있습니다. . *는 아무것도 일치, 무엇을 의미 다음 두 번째 부분은 index.php를 / $ 0이다 그리고 $ 0 이전에 일치 된 무엇을 의미합니다. 그 의미가 있습니까? 하지만 변경할 정말 중요한 것은,이 재 작성의 기본을 변경합니다 이는 URL의 기본입니다. 당신이에서 작업하는 곳은 일종의 가정합니다. 나는 그에게 CS50 코 하나를 추가 할거야, 그 방법은 지금은 index.php 파일을 제거하면, 그것을 작동합니다, 나는 몇 가지 숫자를 추가하는거야 그것은 참으로 일을 한 사실을 표시합니다. 좋은 소리. 지금까지 질문? [학생] 어떻게 123하게 알고 있었나요? 그게 인자인가? 정확히. 당신은 인수처럼 생각할 수 있습니다. 그러나 이상한 것은, 비록입니다 코 하나는 그것을 수행하는 방법 그들은 정확하게 인수처럼하지 않습니다됩니다. 이처럼 잡아해야합니다. 당신은 요청 개체를 잡아 ID라는 것 매개 변수를 요청해야합니다, 그 이름 ID는 부트 스트랩 파일에서 온다 나는 이전였으며, 이름 ID는 해당 꺾쇠 괄호 있다는 그것은 당신이 그 매개 변수를 잡아 방법입니다. 신난다. 다른 질문? 내가 말했듯이, 컨트롤러, 그들은, 애플리케이션 로직을 처리 그래서 당신은 도대체를 볼 수 있습니다 1 인스턴스의 - , 매우 기본적인, 그러나 여전히 애플리케이션 로직의 정보 매개 변수를 잡아 새로운 문자열을 만드는 아이디어 "당신은 바보스런 일을했다"라고 한 다음에 그것을 다시 침이. 일반적으로 당신이 할 일은 당신이 다른 컨트롤러를 만드는 것입니다. 당신은 당신의 웹 사이트의 다른 부분에 대한 별도의 컨트롤러를 만들 수 있습니다. 오늘 우리는 아주 간단한 웹 사이트를 만들 것입니다, 그것은 매우 기본적인 블로그가 될 것. 우리는 단지 블로그에 게시물을 새 컨트롤러를 만들 것입니다. 하지만 그때, 또한 블로그 게시물에 댓글을 추가 할 수 있다면 아마도 난 그 의견에 대한 새로운 컨트롤러를 만들고 싶어합니다. I 사용자를 추가하고 싶었다면, 나는 아마 그 사용자를위한 새로운 컨트롤러를 추가 할 것입니다, 그리고 일반적으로, 아이디어는 당신이 새로운 모델을 할 때마다, 당신이 상대하고있는 새로운 데이터 객체, 해당 데이터 개체에 대한 하나의 컨트롤러가 있습니다. 오늘 우리는 1 데이터 객체로 작업하는 것입니다, 그리고 그 글이 될 것, 또한 당신은 테이블에 대응하는 등의 데이터 개체로 생각할 수 있습니다. 일반적으로 각 테이블은 데이터 객체의 한 유형에 해당하는, 그래서 포스트 표는, 1 개의 게시물 모델을해야합니다 에 대응 한 후 컨트롤러가있는 것이다, 와 코멘트, 등등 등등 사용자를위한 동일과에 대한 동일합니다. 그리고는 엄지 손가락의 일반적인 규칙입니다. 당신이 다를 수 있습니다 특별한 경우가있을거야, 그러나 당신이 일을 할거야 무슨 시간의 90 % 그리고 나는 그것이 오늘날 우리가 일을 할 것입니다 무슨 당신에게 보여줄 것이다. 1 우리가 코드에 다이빙을하기 전에 더 많은 개념, 객체 관계 맵핑의 생각. 너희들은 이미 웹 개발 PSET을했다, 당신은, 당신은 SQL 쿼리를 만드는 것을 본 적이 그리고 그것이 당신에게 반환 어떤 행이 있습니다. 당신은 몇 가지 이름을 이러한 행을 얻고, 당신 인덱스 열 및 테이블의 이름 그것은 당신이 그것을 작동 방법 그것은 조금 번거로울 수 있습니다. 그러나 또한, 당신은 당신의 데이터베이스 내에서 관계가있는 경우, 같은 예를 들어 나는 의견과 게시물이있는 경우 어쩌면 나는 주석의 부모 게시물을 잡고 싶어요. 내가 SQL 단지 행을 사용하는 경우, 다음 내가 할 수있는 모든 ID입니다 상위 게시물의 아닌 실제 게시물 자체. 우리가 코딩 할 때 그러나, 우리가 실제로 원하는 것은 실제로 잡아하는 것입니다  부모는 때때로 자신을 게시합니다. 관계형 매핑이되어 무엇을 객체 그것은 데이터베이스 쿼리의 결과를 취 와 함께 일하기 매우 좋네요 당신을 위해 개체에 넣 일반 배열과 행보다. 예를 들어, 지금은 아마도 주석이있을 때 나는 부모의 게시물을 잡고 싶어 나는 어쩌면 화살표 게시물을 주석 않습니다, 다음은 실제로 나에게 포스트 객체를 제공합니다 실제 부모의 게시물에 해당하는 일부 ID뿐만 아니라, 어떤 I 그렇지 않으면 게시물을 잡기 위해 다른 SQL 쿼리를 사용하게 할 것입니다, 복잡하고 불필요한이다. 그리고 또한, 개체에 모든 데이터 행을 매핑하여, 당신은 또한 객체에 더 많은 기능을 첨부 할 수 있습니다, 그래서 예를 들어, I 클래스는 기본적으로 기능을 그룹화하는 방법에 대한 이야기​​. 당신은 그런 식으로 생각할 수 있습니다. 예를 들어, 어쩌면이 게시물 개체가, 어쩌면 나는에 연결된 함수의 일종을 가지고 싶습니다 즉, 기본적으로 날이 최근에 게시 한 이야기​​? 그것은 참 또는 거짓, 지난 주 내에 게시 한? 그리고 그게 내가 그 객체에 첨부 할 수 있습니다 함수의, 그리고, 동일한 장소에 가지고 정말 편리 당신이 만들 수있는 다른 기능의 호스트가있다 이러한 개체에 대한, 그리고 클래스에 장착 할 수있는 정말 좋은 데요, 개체에, 당신은 당신의 데이터베이스에서 나오는 행이 있다면 반면에, 당신은 정말 어떤 기능을 첨부 할 수 없습니다. 그것은 말 그대로 그냥 데이터입니다. 전혀 그것에 대해 질문? ORM들을 매우 일반적인 웹 개발이다, 와 ORM들을 다른 유형이 많이 있습니다, 그리고 코 하나는 자신의 ORM 있습니다. 그것은 아주 기본적인,하지만 당신은 어떻게 생겼는지의 맛을 얻을 수 있습니다. >>의 우리의 블로그 게시물에 대한 모델을 만들어 보자, 우리가 분명히해야 할 첫 번째 일은 실제 테이블을 만드는 것입니다 우리의 데이터베이스에 실제로 그 게시물에 대한 우리의 데이터를 저장하는 데 사용됩니다. 내가 할거야 먼저 phpMyAdmin을로 이동합니다. 너희들은 전에 phpMyAdmin을 사용 했습니까? 좋아요, 최고, 그래서 너희들은 이미이 무엇인지, 나는 코 하나의 게시물라는 새 테이블을 만들거야, 그것은 정말 간단 할 것입니다. 나는 다시 로그인해야합니다 우리가 오늘 할 거 야 모든 저자와 몸을 가지고있다, 그냥 간단하게 유지합니다. 그 테이블을 만들거야, 지금 우리는 단지 우리의 게시물을 나타내는 테이블이 우리의 작가와 우리의 몸에 2 필드. 내가 지금 뭘합니까 다른 것입니다 는 데이터베이스에 연결하는 방법을 알 수 있도록 내 웹 응용 프로그램을 구성, 이것은, 다시, 당신은 모든 웹 응용 프로그램으로해야 할 것이다 무언가이다. 당신은 그것을 사용자 이름과 암호를 말해야 및 데이터베이스의 이름 등등 등등 실제로 데이터베이스에 연결하는 방법을 알아낼 수 있습니다. 코 하나, 우리는 데이터베이스 모듈라고 뭔가를 및 구성 폴더에 우리는 데이터베이스이라는 폴더가 당신이 볼 수있는 바와 같이, 여기에서 설정해야 할 설정의 무리가 있습니다 사용자 이름과 암호의이 무엇인지 데이터베이스에 대한 그래서 실제로 연결할 수 있습니다. 그리고 난 너희들이 실제로 알고 싶어하지 않기 때문에 사용자 이름과 내 데이터베이스의 암호 나는 이미 모든 설정 파일을 가지고, 나는 복사를 통해 붙여거야. 신난다. 좋아요. 그게 내가해야 할 모든 구성의 생각, 그러나 보자. 뭔가 충돌이 있다면, 우리는 그것에서 작업을 계속하고 있습니다 우리는 문제를 해결할 수 있습니다. 지금 내가 할거야 것은 내가 새로운 컨트롤러를 만드는거야입니다. 아니면 실제로, 죄송합니다. 우선 새로운 모델을 만들어야합니다. 나는 Post.php라는 새로운 모델을 만들 수 있습니다 우리가 무엇을 할 거 야 우리가 클래스 Model_Post를 호출하는거야입니다. 일부 구문에 대한 강조 얻을, 그래서 내가 말을 할 때, 그 기본적이다 "ORM은 확장" 좀 더 객체 지향 프로그래밍 어떤 불행하게도 너희들은 아직 CS50에서 배운하지 않은, 하지만 데리러 매우 쉽습니다. 그것은 저에게이 ORM 패키지로 제공이 모든 추가 기능을 제공합니다 그리고 나는, 추가 기능을 무료로 이것 저것 잔뜩 얻을 당신은 두 번째에서의 비트를 볼 수있다. 지금 실제로 내가 할 필요가있는이 클래스를 만드는 것입니다. 난 어떤 함수 나 아무것도 할 필요가 없습니다, 하지만 테이블을 나타내는 클래스를 만들었습니다, 나는이 ORM 클래스를 확장했습니다 때문에, 난 공짜로 물건을 잔뜩, 그래서 지금 당신은 아무것도 더 많은 위로를 설정할 필요가 없습니다. 그리고 지금 내가 할거야 것은 내가 새로운 컨트롤러를 만드는거야입니다, 이는 내가 blog.php 이름을거야, 나는 시작 컨트롤러에 복사하는거야 그래서 몇 가지 물건을 다시 입력 할 필요가 없습니다, 지금은이 이름을 변경해야합니다. 이제 내가 모든 것이 밖으로 작동하기 위해 테스트하는 할거야 것은, 내 데이터베이스의 첫 번째 게시물을 잡아 갈거야 화면의 게시물의 본문을 인쇄 할 수 있습니다. 내가 먼저 할거야 것은 내가 게시물을 저장하는거야 것을 수행하려면 변수에 그래서 우리가 무엇을 할 거 야하는 것입니다 - 코 하나에 당신이 할 일은 포스트 개체를 잡아하는 것입니다 , 좀 복잡하지만 당신은 ORM이라는 것 :: 공장을 할 필요가 그리고 당신은 당신이 원하는 모델의 이름을 전달, 그리고 그 모델을 나타내는 ORM 개체를 반환합니다. 그리고, 같은 나는, 우리는 ORM 객체를 확장 할 때, 말 우리는 무료로 모든 방법을, 그래서 예를 들면, 우리는 호출이 새로운 기능은 "모두 찾기"얻을 이는 자동으로 데이터베이스에있는 모든 단일 포스트를 반환 이는 매우 편리합니다. 그리고 지금 몸에서 나는 돌아 갈거야 첫 번째 게시물과 몸을 반환합니다. 그리고 물론, 내가 게시물을 작성해야합니다, 그래서 새로운 포스트를 삽입 할 수 있습니다. 나는, "브랜든, 내 첫 번째 게시물을."라고 말할 수 있습니다 신난다. 그리고 지금 우리의 블로그에 가서 모든 것이 잘 작동하는 경우와 - 아,이 또 다른 바보 파일 권한 것입니다. 일초에 개최. 그것은 종류의 터무니없는. 거기 우리는 간다. 좋아요. 그 권한 문제를 해결했습니다. 그것은 몇 가지 파일과 일부 로그를 만들려고했다, 와 권한, 다시 제대로 설정되지 않은, 그래서 그것을 만든 그래서 그 파일은 쓰기와 실행했다 그래서 실제로 볼거리에 로그온 할 수 있습니다. 지금은 "클래스 ORM 찾을 수 없습니다"나에게 또 다른 예외 말을주고 내가 다른 단계를 잊었 때문에 그건. 즉, 너무 나쁘다. 부트 스트랩 폴더 파일에서, 여기에이 모듈이 있습니다, 활성화 또는 비활성화 할 수있다. 이들은 당신이 사용하도록 선택할 수있는 다양한 기능들을 수 있습니다 종류의 좋은 코 하나, 내. 예를 들면, 그들은 인증 모듈을 가지고 당신은 어느 사용자를 인증 할 수 있습니다. 구현하려는 경우 그들은 캐싱 모듈이 응용 프로그램 작업을 신속하고 이것 저것 할 말을 다시 캐시의 일종. 우리는 데이터베이스와 ORM 모듈을 사용하도록 설정해야합니다, 같은 내가 말했기 때문에, 우리는 분명히 데이터베이스를 사용하는 그리고 우리는 또한 ORM 모듈을 사용하도록 설정해야합니다, 우리가 가지고 기쁜 추가 기능을 가지고 싶습니다 때문입니다. 내가 할 일은, 그 2 줄의 주석입니다 내가 새로 고치면 지금, 나에게 또 다른 오류를 주었다. 그것은 "클래스 Model_Post를 찾을 수 없습니다"라고 말한다. 지금이해야하는 것이 문제입니다. 보자. 그것은 공개합니다. 번호 기다려. 오, 이런. 는 것을 발견 할 수없는 이유를 모르겠어요. 정말 이상하다. 바로 여기에이 클래스가있다. 오 - 내가가있을 수 있습니다 같아요. 난 너무 바보입니다. 나는 PHP 태그를 추가하는 것을 잊었다. 그 이유입니다. 지금은 1 변화는 그냥 한 것을 취소해야합니다. 좋아요. 거기 우리는 간다. 정말 바보였다. 내가 여는 PHP 태그가 없습니다. 당신이 볼 수 있듯이, 지금은 바로, 제대로 작동하는거야? 우리는 1 개의 게시물이 있습니다. 우리는 첫 번째 게시물을 잡고, 그리고 지금 우리의 몸을 인쇄. 좋아요. 환상적인. 질문 지금까지? 아니? 질문? 좋아, 그래서 우리는 그냥 아주 기본적인 포스트 모델을 생성 우리는 이후에 일부 기능을 추가하는 것입니다. 우리는 검증 및 필터링을 추가 할 수 있습니다. 검증은 것들 중 하나입니다 프레임 워크는 정말 잘, 정말 당신을 해결하는 것이, 나는 너희들이 CS50의 PSET에 대해이 작업을 수행 할 수 있다고 생각하지 않습니다, 하지만 당신은 당신의 마지막 프로젝트에 웹 개발을 할 경우, 당신은 가능성이 검증의 일종을 수행 할 것입니다, 같은 빈 사용자 이름을 가지고 있지, 아마 적어도 일부 길이의 암호를 가지고, 그런 것. 그리고 우리 자신에 의해 이러한 것들을 구현하기 위해 정말 귀찮은 일 그리고 거의 모든 단일 웹 프레임 워크는 당신을 위해 그것을 않습니다 당신은 매우 깨끗한 방법으로 그것을 할 수 있습니다. 당신은 일반적으로 그 유효성 검사 규칙을 표현하는 장소와 모델이며, 이 모델이 유효한지 여부를 검증하는 것 때문입니다. >>하지만 지금, 우리는 나중에 때까지 넣어거야 그리고 지금 우리는 또 다른 부분에서 작동하는 것입니다, 그리고 우리는 새보기를 시도하고 만들거야 그 모든 게시물을 나열합니다. 모든 게시물 목록에 대한 새로운 액션을 만들기에 참여하는 단계 모든 게시물의 목록을 잡아입니다 다음 뷰를 통해 모든 글의리스트를 렌더링. 바로 여기, 다행히만큼, 우리는 이미 모든 게시물을 잡고 이 첫 번째 라인을 사용하여 모든 기능을 찾을 수 지금 우리가 할거야 지금까지입니다 I는 직접 응답의 본문을 설정 봤는데 문자열을 전달하지만, 지금은 뷰를 사용하고자 원으로, 바로이 일을보기와의 차이 보기와 나는 좋은, 큰 HTML 템플릿을 가질 수있다, 무엇을 내가 할 수있는 것은 특정 변수를 전달한다 다음 뷰가 자동으로 템플릿을 채우는있다 이 변수를 사용하여. 내가 할 거 야하는 것은, 내가 새보기를 만들 것입니다 나는 "블로그 / 인덱스"와 같은보기 무언가의 이름을 수 있습니다 저는 기본적으로이 바인딩거야 - 오, 내가 무엇을 쓰고 있어요? 나의 뇌는 다른 곳입니다. 내가보기에 변수 게시물을 바인딩하는거야 그래서 그 방법은보기이 게시물 변수에 액세스 할 수 있습니다. 그래서 지금은이보기를 작성해야합니다, 그래서 여기에 우리가 '보기'이라는 폴더가 먼저, 그 호출에 새 폴더를 만들거야 "블로그." 이것은 좋은 것입니다. 그런 식으로 우리는 우리의 견해에 대한 좋은 계층 구조를 가질 수있다. 그리고 나서 전화가있는 다른 파일을 만들거야 "index.php 파일을." 신난다. 사실, 여기서 둘 다하자. 뷰 파일을 만드는 것은 아마 모든이의 가장 간단한 부분입니다, 이들은 아마 당신은 이미 익숙한 것들입니다. 우리는 정말 간단 뭔가를 할거야 말을 시작 "블로그 게시물의 내​​ 목록입니다." 그럼 우리가 통과 할 수 있습니다, 우리는 게시물의 배열을 반복 할 수 있습니다, 매일 게시물을 잡고 같은 말 - 어쩌면 라인을 추가 다음 작가와 몸을 인쇄 할 수 있습니다. 즉, 지금까지 이해? 그리고 그것은 작동하는지 보자. 아무 일도하지 않습니다. 그 이유를 궁금해. 아, 1 단계를 놓쳤다. 나를 아주 바보. 내가보기를 생성,하지만 난 응답으로 뷰를 설정하지 않은, 그래서 당신은 하나 더 많은 일을해야합니다. 당신은 "이 응답의 몸"을 수행하고보기로 설정해야합니다. 거기 우리는 간다. 우리는 우리의 제목을 가지고 있고, 우리는 포스트를 가지고, 그냥 재미로,의 다른 게시물을 삽입 할 그래서 우리는 목록을 볼 수 있습니다. 그리고이 2 게시물을 삽입, 지금은 페이지를 새로 고칠 경우, 우리는 여기에서 모든 게시물을 참조하십시오. >>이 지금까지 의미가 있습니까? 네, 질문? 좋아, 오. 당신이 볼 수 있듯이, 우리는 밖으로 모든 코드를 분리 할 수​​있었습니다 다른 부분으로, 다음은 뷰 코드를 가장 분명 볼 수 있습니다. 이 관점을 나타냅니다 여기에서 파일, 그것은 단지 데이터를 표시하는 데이터를 나타내는 대해 관심. 그것은 데이터의 일종 전달됩니다 그리고 그것이 모두 당신에게 보여 있습니다. 코드의 다른 부분에서, 당신은 그 중 하나에 대해 걱정할 필요가 없습니다, 마찬가지로, 뷰 코드에 대해 아무것도 걱정하지 않습니다 데이터베이스에 액세스하고 등등 등등,하는 방법 이는 정말 좋은 당신의 코드가 더 많은 유지 관리합니다. 내가 말했듯이, 뷰, 그들은 그 동적입니다 그것은 1 파일,하지만 그것은 다른 관점을 생성합니다 실제로 전달할 변수에 따라, 더 나아가, 다른 도우미 기능이 많이 있습니다 당신은 당신이 빠른 코드를 작성하는 데 사용할 수있는 난 그냥 초에 보여주지있다. 그래. [학생] 그래서 0달러 오른쪽 컨트롤러? 즉, 두 번째 것은. 문제는 0달러 컨트롤러입니다? 0달러 내가 바로 여기에 생성 된 변수입니다. 먼저 뷰를 만들었습니다. 나는 약간의 변수에 할당. 그런 다음이 함수에 전달 응답의 본문으로 설정합니다. 그 의미가 있습니까? [학생] 그래서보기 :: 공장, 클래스 모양의보기이다 또는 도서관 [들림] 공장 기능? 문제는,보기 :: 공장 기능에 관한 것입니다 기본적으로 이것은 본질적으로 좀 더 객체 지향 프로그래밍입니다. "공장"보기 뷰 클래스이며,라는 방법을 가지고 그리고 그 이름이있어 개체를 잡기 위해 방법 "블로그 / 인덱스를." 그리고 좀 더 객체 지향 프로그래밍 물건의 너무 많이 여기에 갈 아니에요. 이제 분명히, 우리는 새로운 게시물을 작성하려면, 그러나 우리는 데이터베이스를 통해 그것을 할 싶지 않아, 그래서 우리는 새 게시물을 작성하기위한 새로운 액션을 만들려고하고, 우리가해야 할 물건이 많이있다. 우리가 할 겁니다 가장 먼저하는 일이 -의 이러한 것들을 하나 하나를 해결 할 수 있습니다. 우리가 할 첫 번째 것은 우리가 양식을 만들 수있어입니다 새 게시물을 삽입하기위한, 그러나 나는 또한, 먼저 새 작업을 추가하는거야 그래서 새로운 액션을 추가하는 것만큼이나 간단합니다 컨트롤러에 새로운 기능을 추가, 그리고 지금 나는 매우 기본적인 무언가를 할거야 다만이보기를 잡아 게시, 당신을 위해 표시합니다. 그리고 지금은 새로운 뷰 파일을 만들거야, 나는 몇 가지 물건을 쓰기 시작하겠습니다. 어떤 코 하나에 대한 좋은 것은 서로 다른 도우미 기능을 많이 제공하는 것입니다 당신은 더 쉽게보기 코드를 작성하기 위해 그 도우미 함수 또는 도우미 모듈 1 주위에 양식을 쓰고있다. 양식을 작성하기위한, 정말 직접 HTML 나 자신을 작성할 필요가 없습니다. 너희들은 HTML 양식을 작성했습니다. 당신은 정말, 정말 고통스러운 양식을 작성하는 성가신 될 수있는 방법을 알고있다. 그것은 다행히, 재미 아니다 우리는 기본적으로 코 하나의를 사용하여 양식을 작성할 수 있습니다 우리를 위해 그것을하는 도우미 함수를 형성한다. 우리는 기본적으로 우리가 매일 매일 일을 위해 필드를해야 할 것입니다 그래서 저자에 대한 하나의 몸에 대한 한. 우리는 레이블을해야 할 것입니다, 우리는 입력을해야 할 것입니다. 그리고 마지막으로, 우리는 제출해야 할 것입니다. 그리고 당신이 볼 수 있듯이,이는 작성하기가 훨씬 깨끗하다 종류의 좋은 모든 지저분한 HTML보다. 설령, 그것보다 훨씬 청소기가 다른 웹 프레임 워크가있다, 하지만 적어도이 HTML을 직접 작성하는 것보다 낫다. 멋진, 그래서 이것은 당신이 무엇을보고있다. 즉, 좀 지저분 그래서 나는 거기에 줄 바꿈을 추가 할거야 그 조금 더 멋진 보이게. 음, 물론, 아직 정말, 정말 나쁜 보이지만, 우리는 단지 집중된다 미학에 지금하지 않는 기능에. 모든 일을 할 시간이 없습니다. 당신이 볼 수 있듯이, 지금 우리는 매우 기본적인 형태를 가지고, 어떤 종류의 좋은 것입니다. 나는이 말을이 코드는 자신을 형성 HTML을 작성하는 것보다 청소기, 그래서 좋다. 다음은? 이제 우리는 행동으로 일을해야합니다. 당신이 HTML 양식을 작성할 때 일반적으로, 당신은에 양식을 제출 어디로 가는지를 말해야한다. 대부분의 웹 프레임 워크에서 기본적으로 그것은 동일한 URL에 제출, 그래서 것입니다 당신은에 / 블로그 / 새로운 GET 요청을 보내는 경우 그것은 당신에게 폼을 표시한다, 그러나 당신이 POST 요청을 보내는 경우에 / 블로그 / 데이터와 새, 실제로 해당 게시물을 저장하려고한다 그것으로 작업을 수행합니다. 우리가하려고하는 것은 기본적으로 모든 우리는 POST 요청 또는 GET 요청의 여부를 확인해야 설정할 수있는 POST 변수가 무엇인지 확인하는 것입니다. 포스트 변수가 설정되어 있다면, 우리는 시도하고 새 게시물을 작성하는 것입니다. 다시 말하지만, 우리는 그냥 이렇게, 그리고 그 새 게시물을 작성하고, 우리는 문자 그대로거야 이 같은 자사의 필드를 설정, 그리고, 우리는 그것을 저장하는 것입니다. 그리고 나서 재거야 인덱스 페이지에 그래서 그들은 게시물의 우리의 목록을 다시 볼 수 있습니다. 의 그 해보자. 나는 "브랜든"라고 말할 수 있습니다 그리고, 다음 게시물을 제출, 모두가 잘되면 당신이 볼 수 있듯이, 인덱스 페이지에 저를 재 나는 아래로 스크롤 경우에, 우리는 새로 삽입 된 게시물이 있습니다. 야호! 네, 질문입니다. [학생] 당신은 무엇을 정확히 똑같은 일을 입력 한 경우 당신은 이전에 입력? 그것은 당신이 중복되지 않은 확인하십시오 않습니​​다 같은 제출? 기본값으로, 아니, 때문에 기본적으로 - 양식에서 동일한 데이터를 입력하면 죄송합니다, 질문은 그리고, 당신이 중복 된 개체를 삽입 할 수 있도록, 그 제출 본질적으로, 항목을 중복? 지금, 그래, 당신이 그렇게 할 수 있도록, 데이터베이스에 완전히 중복 행이 완벽하게 유효하기 때문에, 즉 문제가되는 경우에, 당신은 예를 들어, 유효성 검사를 추가 할 수 있습니다, 이것은 이미 존재하는 무언가와 정확히 동일한 경우 있는지 확인하기 위해, 다음은 유효하지 않은 객체의 말, 그리고 당신은 당신의 오류 메시지를 지정할 수 있습니다 "이 이미 존재하기 때문에 잘못된"또는 그런 뭔가 말. 그러나이 경우, 난 그냥 중복 무언가를 만들 수 있습니다. 이제 해보자 일부 유효성 검사를 추가합니다. 이 문제는 바로 지금입니다 말 그대로 완전히 빈 포스트를 제출할 수 있습니다. 지금은이 버튼을 클릭 할 수 있고, 거기에 우리가 간다. 당신은 정말 그것을 볼 수 없지만 여기 여분의 줄 말 그대로 새 게시물이 있음을 나타냅니다. 그냥 빈 작가와 빈 몸이, 우리는 사람들이 그 작업을 수행 할 수 싶지 않아요. 검증이 필요한 이유는 바로 여기입니다 내 모델 개체에 갈 수있다, 지금은 지정하는 새로운 기능을 추가 할 수 있습니다 나는이 모델에 추가해야하는 유효성 검사 규칙 이 유효한지 확인하거나 지정할 것을 그것은 유효한 포스트 일을 의미 하는가? 그리고 그것은 단지 유효한 포스트의 말을 할 경우 저자 몸도 빈 아니고, 이것은 당신이 코 하나에 그것을 할 방법입니다. 당신은 "규칙"이라는 새로운 함수를 만들 다음은 기본적으로 연관 배열을 반환 즉,이 개체에 대한 유효성 검사 규칙을 정의합니다. 우리는 배열을 반환하려고하고 우리가 할거야 것은입니다 말을 "저자,"이것은 배열에 간다, 이는라는 또 다른 배열에 간다 "비어 있지." 그리고 내가 말할거야 "몸을." 이를 위해 좋아하고,이 구문 및 구조 조금 복잡하고 조금 복잡한 보일 수 있습니다. 당신이 문서를 읽을 경우, 파악하기 매우 간단합니다 그러나 기본적으로 이것은 당신이 지정 할 필요가있다 일부 유효성 검사 규칙과 다른 규칙이 많이 있습니다 당신이 말하는 규칙을 추가 할 수 있습니다처럼 코 하나는 무료로 당신을 줄 것이다 그것은이 길이 이상이어야합니다. 아마 숫자이어야합니다. 아마 알파 숫자이어야합니다. 아마 등등 등등 대부분에이 길이이어야한다. 코 하나가 당신을 위해 제공하는 다른 많은 규칙이있다 당신은, 문서를보고, 자신의 웹 사이트에 갈 수 있습니다 당신은 당신이 할 수있는 모든 다른 것들을 볼 수 있습니다. >>하지만 내가해야 할 모든 것입니다, 지금의 일이 무엇인지 살펴 보자 나는 빈 포스트를 제출합니다. 무슨 일이 일어날? 아, 아니, 난 오류가 발생합니다. 나는 유효성 검사 예외를 얻을. 음, 좋아. 내 모델이 무효라고 나에게 말했다, 하지만 예외를 표시하지 않으 내 사용자에게 그들이 바로, 잘못된 무언가를 제출하려고 할 때? 나는 그들에게 친숙한 오류 메시지가 어떤 종류의를 제공 할 뭔가 잘못되면. 우리가하려고하는 것은 우리가가는거야입니다 시도 캐치 루프에서 모든 것을 감싸줍니다. 사실,이 또한 아직 배운하지 않은 무언가 생각 CS50에 있기 때문에 C, 프로그래밍 언어 C, 거의 매일 다른 언어에게 예외를 가지고 있지만하지 않습니다 그래서 정말, 정말 간단하게 예외를이 예외 코드의 조각이 할 수있는 무언가이다 뭔가가 잘못되면, 예외를 발생 최대하지만 어쩌면 다른 코드 조각은 높은 그 예외를 catch하고 그것으로 뭔가를 할 수 있습니다. 예를 들어,이 경우, 모델을 저장하려고 코드의 조각, "좋아,이 모델이 유효하지 않습니다"는 모델의 유효성을 검사하고 말한다면, 예외를 던지는 것, 이것은에 해당하는 종류입니다 C에서 당신은 -1 또는 그런 식으로 뭔가를 반환 할 수 있습니다. 그리고 나를 위해,이 기능, 내 코드 높은 수준에서, 그 예외를 시도하고 잡을 수 있습니다 기본적으로 "좋아, 난 예외를 잡을 경우, 내가 뭘합니까?"라고 아니면 내가 그 예외를 잡을 최대 누군가가 더 높은 가지 않도록 선택할 수 예외를 catch하거나, 아무도 그것을 잡는다없는 경우, 다음 전체 프로그램은 충돌 말한다 "무슨 문제가, 나는 그것을 처리 할 수​​ 없습니다." >>하지만 우리가 할 것은, 당신이 try 블록의 코드 조각을 포장하다 다음은 또한, catch 블록이라는 것을 추가 하는 시도가 발생할 수 있습니다 예외를 catch하는 코드의 일종이다. 그래서 나는이 예외를 잡을 경우 또는 무효 예외는 다음 내가 할거야 것은 나는 오류를 설정하는거야 - 그게 내가 그것을 어떻게 생각 - 나는 어떤 객체에 오류를 설정하는거야. 는이 예외를 안타 그리고 내가 할거야 것은, 이 리디렉션하지 않는 경우는, 리디렉션하는 것, 그리고 것 그것은 경우 블로그에서 나오는 것 그리고 내가하고 싶은하고자하는,이 블로그 / 새로운 기록했다. 오류가 발생하면, 그때의 모습으로 되돌아 가고 싶어 그 오류를 표시합니다. 지금 내가 원하는 내가 그 오류를 전달하고 싶다 볼 수 있습니다. 좋아, 내가 여기 전망이 생각 기본적으로 나는 그들이 존재하는 경우 그 오류를 표시합니다. 나는 그의 HTML을 작성하기 전에, 나는 정말 빨리 갈거야 이 오류의 구조 변수 외모가 좋아하는 무엇을 보여, 이것은 일반적으로 좋은 방법입니다. 많은 시간 당신은 다시 몇 가지 방법에서 뭔가를 얻을 수 웹 프레임 워크의 일부 기능, 당신은, 변수가 어떻게 생겼는지 몰라 그래서 당신은 그것을 작동하는 방법을 모르겠어요. 나는 기본적으로 그것을 밖으로 인쇄하는 인쇄 R 방법을 사용하도록하겠습니다. 당신이 볼 수있는 >>, 그것은, 그것은 연관 배열 알려줍니다 당신은이 문자열로 키, 저자, 포인트가 저자는 비어 있어야하고, 다른 키, 몸, 안 다른 문자열, 몸에 점은 비워 둘 수 없습니다. 쿨, 좋아, 같이 해요. 그런 다음 배열을 반복하고 모든 단일 메시지를 인쇄 할 수 있습니다. 그것은 메시지의 무리와 함께 연관 배열처럼 기본적이다. 내가 할거야 것은 "만약 오류"입니다 나는 순서가없는 목록을 만들거야, 나는 모든 오류를 반복하는거야. 그리고 이것은, 지금은, 다시 제출하려고하는거야 그리고 이제 우리가 무엇을 얻을 보자. 이제 우리는 오류이 좋은 목록을 얻을, 그리고, 이것은 여전히​​ 매우 추한 있습니다 만, 이것은 분명 좋은보고 포맷 할 수 있습니다 그러나 기본 개념은 단지 몇 줄의 코드에 우리는 우리의 모델의 유효성을 검증 할 수 있었다, 특정 필드가 비어 없다는 사실을 확인, 뭔가 잘못되었을 경우, 다음 오류 메시지가 어떤 종류의 반환 그런 다음 사용자에게 다시 제공 할 수 있습니다. 또한 유효성 검사를 사용자 정의 할 수 있습니다 실제로 오류 메시지가있을 수있다 그래서 즉, 응용 프로그램 또는 그런 일에 더 유용하게 이용 될 수 있습니다. 모두는 일반적으로 사용자 정의 할 수 있습니다. 불행하게도, 우리는 시간이 없어 그래서 나는 여기에 라이브 코딩 세션을 차단해야 할거야. 내가 당신을 위해 입증 할 다른 기능의 무리가 있습니다 이 예에서. 예를 들어, 귀하의 사이트에 템플릿을 추가 할 수 있습니다, 그래서 아마 적용 할 HTML 코드의 일종이있다 귀하의 사이트에있는 모든 단일 페이지, 대신 붙여 넣기의 모든 단일 뷰 파일에서 당신은 분명히 나쁜 관행 될 것이라고,이 당신은 기본적으로 이러한 템플릿을 정의 할 수 있습니다, 다음 컨트롤러에 "좋아, 난이 템플릿을 사용하고 있습니다."라고 "내 모든 뷰는이 템플릿을 사용합니다." 그리고 나뿐만 아니라 당신에게 입증 할 마지막 일 우리는 크로스 사이트 스크립팅입니다 시간이 없어 기본적으로 난 너희들은 아마 CS50에서 볼 수 있다고 생각 - 데이비드 마란 아마 당신은 일반적으로 주입 할 수있는 방법에 대해 이야기 생각 에 자바 스크립트 코드는 - 당신이에 대해 얘기? 어쩌면? 아마? 그러나 많은 시간 당신은 악의적 인 자바 스크립트 코드를 삽입 할 수 있습니다 누군가의 데이터베이스에, 그리고 제대로 그 탈출하지 않는 경우, 그 후에는 다시 사용자에게 데이터를 제시 할 때, 다음 오류가 발생하는하지 않는 임의의 자바 스크립트 코드의 일종을 실행할 수 있습니다, 그리고 당신이 코 하나 내에서 그렇게 할 것입니다 방법을 보여주기 위해 가고 있었다. 사실은 정말, 정말 간단합니다. 말 그대로 이초에 지금 그것을 할 수 있습니다. 당신이 할 수있는 일은 기본적으로이 일을 포장한다 이 일에 HTML 엔티티를했다. 그리고 자동으로 적절하게 모든 문자를 이스케이프합니다 당신은이 문제를 얻을하지 않습니다 있는지 확인하십시오. [학생] 당신은 잘못 첫 번째 테스트를 철자. [브랜든 리우] 죄송합니다, 오. 좋아, 내가 오늘 당신과 함께 공유했다 전부입니다. 이 슬라이드를 게시하려고하지만, 이들은 일반적으로 유일한 자원은 정말 코 하나를 시작해야한다. 당신은 웹 사이트로 이동할 수 있습니다. 그들은 사용자 가이드를 가지고 있고, 그들은 또한 API 탐색기가 있습니다. 우리는 그들이 당신을 위해 가지고있는 모든 다른 기능과 도우미 기능을 탐색 할 수 있습니다. 그들은 일반적으로 웹 사이트에 대한 충분한 정보를 가지고 당신은 시작하고 코 하나와 함께 성장 사용할 수있다. 많은 튜토리얼은 외부, 코 하나, 나는 생각이 없습니다 그들이 여기에 웹 사이트에있다, 그래서하면이는 아마 당신의 최선의 방법이다. 하지만 당신은 웹 프레임 워크로 이동하려면 당신은 새로운 언어를 데리러 싶지 않아, 당신은 상대적으로 가볍고 쉬운 학습 곡선을 가지고 뭔가를 할 확실히 코 하나를 제안했다. 그건 아마위한 최선의 제안입니다. 우리는 루비 온 레일즈를 사용한다면 재미있는 것은, 그러나,이다, 우리는 우리가 무슨 짓을 복제 한 수 아마 3 분 미만에 더 많은입니다. 농담은,하지만 루비 온 레일즈를 배우는 것은 훨씬 더 긴지지 않습니다 그것은 코 하나를 배울 걸릴 것보다. 그것은 당신이 배우를 선택하려는 작업에 기본적으로 당신의 선택 하지만 당신이 신속하게 실행하는 데하려는 경우, 코 하나는 확실히 아주 좋은 선택입니다. 우리는 결국 모든 마지막 질문하기 전에? 예. [학생] 우리는 어떻게하는 것이 통합 것 당신이 지시했을 때 사용했던 같은 CSS 프레임 워크? 문제는 우리가 어떻게 CSS 프레임 워크를 통합하는 것입니까? 우리가 아마 할 것입니다 우리가 아마 포함 할 것입니다 우리는 우리의 CSS 파일을 덤프 할 새 폴더, 그리고, 우리는 또한 새로운 템플릿을 추가 할 것입니다. 템플릿에서 우리는 그 CSS 파일을 포함 할 것 그들은 모든 단일 페이지에 참조 된 것을 확인하고, 다음은 실제로 HTML을 작성하는 경우, 당신은 적절한 클래스와 이것 저것을 추가, 예를 들어, 폼 같은 것을 사용하는 도우미 기능, 당신은 나중에 더 많은 매개 변수를 추가 할 수 있습니다 당신은 여러 가지에 첨부 할 원하는 클래스 지정 그래서 그들은 제대로 스타일을 할 수 있고, 그것은 당신이 이동하는 방법을 기본적으로합니다. 다른 질문? 신난다. 시간 내 주셔서 감사합니다,와 주셔서 감사합니다. 나는 매우 다른 추가하지 않을했다 하지만 1 정말 빠른 것은 우리가 링크가없는 것입니다 양식. 정말 바보. 의은을 추가하자 - 실제로보기, 블로그, 인덱스, 새 페이지로가는 링크를 추가 정말 빨리하자, 우리는 새로운 포스트를 삽입 할 수있는 페이지. 우리는이 작업을 수행하는 것입니다. 어떤 좋은 것은 HTML 도우미 기능이 전체 그룹이있다 당신을위한 다른 일을 할, 그래서 당신은 이미 실체를보고하는 "앵커"여기에 작동하지만, 그들은 또한라는 기능이 당신은 블로그 / 새로운 입력 할 수있는 와 "포스트는 새 블로그."라고 그리고 그것은 당신을 위해 해당 링크를 만드는 것입니다 그리고,이 할 정말 사소한 것,하지만이 좋은 당신은 1 개의 도메인에서 다른 웹 사이트를 이동하는 것을 가정하기 때문이다. 그리고 당신은 URL을 직접 썼다면, 당신은 모든 URL을 변경해야합니다. 아니면 다른 하위 폴더에 하위 폴더 1에서 움직였다. 당신은 모든 해당 URL을 직접 변경해야 할 것입니다 그리고 그 재미 없다. 당신은 바로 여기에이 앵커를 사용할 수 있습니다 당신은 도메인 또는 하위 폴더 접두사를 변경할 수 있습니다 일단 구성 파일 그리고, 그때는 그 사방에 적용되며, 이는 다시이며 의 좋은 예는 코드를 건조, 자신을 반복하지 않는다. 당신이 자신을 반복하는 곳, 시도 및 구성 파일의 어떤 종류에서 추출 또는 다른 기능을하고 당신을 위해 그것을 처리했다. 그리고 난 당신을 보여주고 싶었다 매우 마지막 일이었다 우리는이 게시물에 돌아와서, 나는 정말 긴 에세이를 구성했다 가정, 하지만 난 내 저자를 포함하는 것을 잊었다. 지금은 "포스트를 제출"을 클릭하면 난 그냥 모든 것을 잃었다. 안돼! 정말 슬픈 일. 그렇다면 당신은 그 처리합니까? 이것은 우리가하는 일입니다. 우리가 할 일은 이러한 입력 텍스트 영역 기능을 여기에, 우리는 두 번째 매개 변수가 두 번째 매개 변수의 다음 값을 포함하는 경우 필드가 처음으로 채울 수 무슨 일이 될 것입니다. 우리가 할 수있는 것은 우리의 블로그 컨트롤러에, 우리는 또 다른 변수를 바인딩 할 수 있습니다. 어쩌면 그것은 "가치"를 호출합니다. 그리고 말 그대로 포스트 배열을 전달합니다. 즉, 검증이 실패하면 것을 의미한다 나에게 나는 마지막 요청에서 제출 한 포스트 배열을 전달, 그 방법은 내 마지막 제출의 값을 사용할 수 있습니다 필드를 다시 채워야합니다. 지금은 값의 저자과 같은 작업을 수행 할 수 있습니다 내가 어떤 임의의 물건을 할 경우 지금 몸, 그 방법을 값 후가 유지 ", 우편 제출"을 클릭합니다. 그러나 우리는 또 다른 문제로 실행하는 것입니다. 나는 페이지에 처음으로 갈 경우 즉, 작동하지만, 그것은 충돌 것, 그리고 그건 난생 처음보기 때문에 우리는 페이지로 이동,이 게시물 변수는 아직 정의되지 않았습니다. 널 (null)입니다. 그것은 존재하지 않습니다. 이 키가 존재하는 경우 그리고 우리가 말하고 싶은 것은,이다 다음이 배열의 값을 반환 키가 존재하지 않으면, 그때 빈 문자열을 반환. 즉, 우리가 여기에 원하는 기능입니다. 우리는 키가 배열에 액세스하기 전에 있는지 확인하려면, 다행히만큼, 코 하나는 우리에게 그것을위한 도우미 기능을 제공합니다. 그들은 기능이 모든 제품군이 이름 ARR에서, 짧은 배열, 그들은 "GET"라고 한 기능을 가지고 있습니다 당신은 배열에 통과 할 수있다, 당신은 키의 이름으로 전달할 수 있습니다. 그런 다음 기본적으로 무엇을 할 것인가하는 것은 해당 키를 얻기 위해 노력할 것입니다, 하지만 키 배열에 없으면 , 저는 믿습니다, 그것은 빈 반환하거나, 우리는 또한 기본값을 지정할 수 있습니다 어떤 좋은 것입니다. 이제 우리는 다시 같은 일을 할 경우, 당신은, 그 주위에 처음 작동 현재 참조 다시, 우리는 어떤 임의의 물건에 입력하면 후가 유지 시도하고 제출합니다. 그리고 나는 방법도 정말 빨리 템플릿을 추가하는 방법을 보여줄 수있는 것 같아요. 우리가 먼저 할 수있는 무엇인가 우리는 "template.php"라는 새보기를 추가 할 수 있습니다 뷰 폴더 내에서, 그리고 내가 할거야하는 것은 "내용"나는라고 뭔가를 인쇄 할거야입니다 나의 주된 내용이 될 것이다. 그리고 어쩌면 맨 아래에 나는, 말, 추가거야 저작권. [들리지 학생 질문] [브랜든 리우] 어쩌면 이것은 내가 사용하고 싶은 초 기본 템플릿입니다. 나는 모든 단일 페이지 내 저작권이있는 폴더를 갖고 싶어, 지금은 내 컨트롤러 내에서 할거야 대신 말의 지금, "컨트롤러는 확장" 나는 "Controller_Template를 확장"라고 말할거야 대신 말의 지금, "응답 본문이보기와 같다" 내가 말할거야 "이 템플릿의 내용은 -" 내가 생각 - 나는 등호를 배치해야합니까? 잊지. 그래, 나도 그렇게 생각. 지금은 내용 변수보기를 동일하게한다는 설정. 나는 여기에 동일한 작업을 수행 할 수 있습니다. 내가 새로 고치면 그리고 지금, 당신은이 저작권을가 추가됩니다 지금 볼 수 있습니다 그냥 어떤 임의의 게시물을 확인, 다음, 다시, 당신은 저작권 페이지의 맨 아래에있는 것을 볼 수 있습니다. 좋아요. 그게 내가 너희들을 보여주고 싶었다 전부입니다. [박수] 질문? [CS50.TV]