작고 간단한 프로젝트의 경우 다음으로 구성됩니다.
SEKELETON MVC는 이름이 제안한대로 MVC 아키텍처를 사용합니다. MVC는 Model-View-Controller를 나타냅니다. Model-View-Controller-Wikipedia
Model:
The central component of the pattern. It is the application's dynamic data structure, independent of the user interface. It directly manages the data, logic and rules of the application.
View:
Any representation of information such as a chart, diagram or table. Multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants.
Controller:
Accepts input and converts it to commands for the model or view.
example.com/shop/show-shoes/index.php 파일로 전송됩니다index.php 파일에는 AutoRoad (Composer) 및 Global Helpers가 필요합니다 (나중에 자세한 내용).index.php in index.php sendResponse ()는 $ 앱 인스턴스에서 호출되어 브라우저로 다시 전송되는 컨텐츠와 함께 적절한 헤더 및 상태 코드를 보냅니다.이제 프레임 워크 가이 모든 것을 어떻게 처리하는지 이해합니다. 아래는 각 수업에 대한 문서이며 개발을 시작하기위한 몇 가지 예입니다.
YourAppApp : 코드Controllers : 모든 컨트롤러Model : 모든 모델View : 모든보기Config.php : 사용자 구성 클래스Core : 프레임 워크 코드public : 웹에 노출되었습니다index.php : 앱의 시작점.htaccess : reroutes 모든 index.php에 대한 요청assets : CSS/JS와 같은 모든 정적 자산은 여기에 살고 있습니다storage : 컴파일 된 뷰, 업로드 된 문서 등vendor : Composer의 필수 라이브러리 다운로드 Altough 대부분의 프레임 워크는 DB 매개 변수 및 뷰 경로 등에 대한 구성에 대한 통신을 따릅니다.
사용자 구성은 구성 클래스의 앱 디렉토리 내부에 있습니다. 이 파일을 열면 config 클래스가 skeleton에서 내부적으로 정의되는 baseconfig ( core config)를 확장합니다. 대부분의 구성 중 일부는 const parmas입니다. 일부는 정적 방법 일 수 있습니다.
이 클래스는 주석을 통해 문서화되므로 확인하면 모든 구성을 직접 파악할 수 있습니다.
라우팅 컨벤션의 경우 EX :에 대한 구성을 통해 사용됩니다.
3 ID 경로의 게시물을 보여주고 싶다고 상상해보십시오.
example.com/user-post/show-photos/3/paris
위의 예는 있습니다
따라서 컨트롤러 클래스 이상은 모양이 될 것입니다
<?php
namespace App Controllers ;
use Core Request ;
class UserPost {
public function showPhotos ( Request $ request , $ id , $ location ) {
# $id= 3 and $location= paris
return view ( ' photos.show ' , [
' id ' => $ id ,
' location ' => ' paris '
]);
}
}그러나 당신은 /, /about 등에 대해 어떻게 물어볼 수 있습니까?
이 경로는 기본적으로 자동으로 라우팅됩니다 (구성에서 변경 될 수 있음) 기본값은 SiteController이고 / 작업은 Config에서 변경할 수있는 색인 메소드의 기본값입니다.
CoreRequest Object가 항상 첫 번째 인수로 전달되는 것을 알 수 있습니다. 요청에 대한 다양한 도우미가 포함되어 있습니다 (요청 섹션의 추가 정보).
요청은 객체로 취급됩니다. 첫 번째 인수와 다른 매개 변수는 순서 후에 전달 될 때 모든 컨트롤러의 방법에 대해 BEAGAULT에 의해 전달됩니다. 전:
url example.com/user-post/show-photos/3/paris 용
<?php
namespace App Controllers ;
use Core Request ;
class UserPost {
public function showPhotos ( Request $ request , $ id , $ location ) {
# $id= 3 and $location= paris
return view ( ' photos.show ' , [
' id ' => $ id ,
' location ' => ' paris '
]);
}
}다음은 귀하에게 요청 객체가 제공하는 편리한 방법입니다.
/* Check Method of request */
$ request -> isGet ();
$ request -> isPost ();
/*
How to get superglobals
These methods if provided returns specific field or entire array if no parameters are passed.
If field does not exits null is returned
*/
$ request -> query ( ' field ' ); // For GET
$ request -> input ( ' field ' ); // For POST
$ request -> server ( ' field ' ); // For SERVER
$ request -> files ( ' field ' ); // For FILES
$ request -> all (); // For FILES and POST merged 브라우저로 전송 해야하는 응답은 달성 할 수 있습니다.
view ( ' viewpath ' , $ data = []); // viewpath ex. phtots.show for Views/photos/show.php
view ([ ' header ' , ' content1 ' , ' content2 ' , ' footer ' ], $ data = []); // array alternative
json ( $ data = [], $ options , $ depth = 512 ); // Same as setting header("Contetnt-Type: text/json"); and using json_encode() 유효성 검사는 Laravel에서 영감을 얻었으며 기본적이고 가장 많이 사용되는 규칙이 거의 제공되지 않습니다.
$ errorMsgs = Core Validator:: validate ( $ request -> all (), [
" name " => [ " required " , " max:30 " ],
" mobile " => [ " required " , " digits:10 " ],
" photo " => [ " required " , " image:image/jpeg " , " max:100 " ],
]);프레임 워크에 의해 생성 된 메시지는 간단하며 내부 구성 파일을 사용자 정의 할 수 있습니다. 전.
public static function getMessage ( $ rule , $ field , $ params , $ messages = [])
{
$ messages = [
" required " => " Hmm... plz get the $ field filled :) "
];
return parent :: getMessage ( $ rule , $ field , $ params , $ messages );
}위의 예에서 필수 메시지는 사용자 정의 메시지가됩니다.
PHP의 빈 () 함수에 따라 필드가 비어 있으면 실패합니다.
문자열 값이어야합니다.
주어진 크기의 숫자 또는 숫자 문자열 값이어야합니다. 주어지지 않은 경우 단순히 숫자 값으로 확인하십시오.
그렇습니다
요청 데이터에는 _confirmation 접미사와 동일한 이름의 필드가 포함되어야합니다. 예 : 비밀번호에 사용되는 경우 Password_Confirmation 필드를 확인합니다.
유효한 이메일 ID인지 여부.
유효한 업로드 된 파일인지 확인하십시오
유효한 이미지인지 아닌지 확인하십시오. 기본적으로 허용 유형 : Image/JPEG, Image/GIF, Image/PNG, Image/Webp, Image/SVG+XML, Image/BMP.
strtotime () 함수를 통해 전달 된 유효한 날짜 여부
두 날짜가 모두 같는지 확인하십시오
주어진 사람 이후 사용자 날짜가 오는지 확인하십시오.
사용자 날짜가 주어진 것보다 먼저 오는지 확인하십시오.
유효성 검사하에있는 필드 및 주어진 하나는 다른 값을 가져야합니다.
유효성 검사하에 필드와 주어진 하나는 동일한 값을 가져야합니다.
유효성 검사하에있는 필드는 존재해야합니다.
최대 크기 규칙. 을 위한
숫자 : 숫자는 크기보다 작거나 동일해야합니다.
문자열 : 길이는 크기보다 작거나 동일해야합니다.
배열 : 요소 수는 크기보다 작거나 동일해야합니다.
업로드 된 파일 : Filesize는 크기보다 작거나 동일해야합니다.
최소 크기 규칙. 최대와 동일한 제약 조건 : 크기 규칙.
구성 파일에서 데이터베이스 자격 증명 및 DB 유형을 설정하십시오. 그런 다음 언제든지 호출하여 연결을 얻을 수 있습니다.
$ conn = Core Database:: getConnection (); // PDO instance 모델은 비즈니스에 상주하는 곳이며, 여기에는 DB 관련 논리도 포함됩니다. 그렇기 때문에 편리한 방법이 거의 제공되지 않습니다.
// suppose
class User extends Model { /* Empty */ }
$ user = new App Models User ();
$ user -> find ( $ id , columns = [ ' * ' ], $ fetchStyle = PDO :: FETCH_BOTH ); // Get single row
$ user -> all (columns = [ ' * ' ], $ fetchStyle = PDO :: FETCH_BOTH ); // get all rows
$ user -> insert ( $ data ); // As associative array of column name and values
$ user -> update ( $ id , $ data ); // $id to be updated with $data
$ user -> delete ( $ id ); // Row to delete with $id 모델은 테이블의 이름을 snake_case 클래스 이름의 복수 형태로 추론합니다. 따라서 위의 경우 사용자 클래스의 경우 AppData가 APP_DATA가 될 수있는 방식과 갤러리가 갤러리가 될 수 있습니다. $table 속성을 재정의하여 자신의 이름을 정의 할 수 있습니다. $id 기본 기본 키로 간주되며 재정의 할 수 있습니다.
class User extends Model
{
protected $ table = " my_table " ;
protected $ id = " tbl_id " ;
}이것보다 복잡한 것은 당신이 혼자서 쿼리해야합니다. 전:
use Core Model ;
use Core Database ;
class User extends Model
{
public function deleteByName ( $ name )
{
$ sql = " DELETE FROM $ this -> table WHERE name=? " ;
return Database:: getConnection ()
-> prepare ( $ sql )
-> execute ([ $ name ]);
}
} 또한 Last Insert ID를 얻으려면 Database::getConnection()->lastInsertId() 수행 할 수 있습니다.