小規模でシンプルなプロジェクトの場合、次のことで構成されています。
Sekeleton MVCは、名前が示すようにMVCアーキテクチャを使用しています。 MVCは、モデルビューコントローラーの略です。 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ファイルには、autoload(Composer)およびGlobal Helpersが必要です(詳細については、後で詳しく説明します)。index.php sendResponse()は、ブラウザに送信されるコンテンツとともに適切なヘッダーとステータスコードを送信する$ APPインスタンスで呼び出されます。これで、フレームワークがこれをすべて処理する方法を理解しました。以下は、各クラスのドキュメントと、開発を開始するためのいくつかの例です。
YourAppApp :あなたのコードControllers :すべてのコントローラーModel :すべてのモデルView :すべてのビューConfig.php :ユーザーconfigクラスCore :フレームワークのコードpublic :ウェブにさらされますindex.php :アプリの出発点.htaccess :index.phpへのすべてのリクエストを再ルーティングしますassets :CSS/JSのようなすべての静的資産はここに住んでいますstorage :コンパイルされたビュー、アップロードされたドキュメントなど。vendor :作曲家の必要なライブラリのダウンロードaltoughのほとんどのフレームワークは、db params and View Pathなどに必要な構成上の整合に従います。
ユーザー構成は、configクラスのアプリディレクトリ内に存在します。このファイルを開く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 '
]);
}
}しかし、あなたは /、 /andなどを尋ねるかもしれません。
これらのルートは、default_controller(configで変更できます)に自動的にルーティングされますdefaultはsitecontrollerであり、 /アクションはデフォルトでindexメソッドを設定で変更できます。
また、 CoreRequestオブジェクトが常に最初の引数として渡されていることに気付くこともできます。リクエスト用のさまざまなヘルパーが含まれています(リクエストセクションの詳細)。
リクエストはオブジェクトとして扱われます。最初の引数として、すべてのコントローラーの方法にdeafaultによって渡され、他のパラマはシーケンスで渡されます。元:
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 );
}上記の例では、必要なメッセージはカスタム1になります。
PHPのempty()関数に従ってフィールドが空のままになっている場合に失敗します。
文字列値である必要があります。
サイズが与えられていない場合は、数値として確認されていない場合は、指定されたサイズの数値または数値文字列値である必要があります
はい、いいえ、はい、いいえ、true、false、0、1それ以外の場合はfalse
要求データには、_confirmationサフィックスを使用して同じ名前のフィールドを含める必要があります。例:パスワードで使用すると、Password_Confirmationフィールドがチェックされます
有効な電子メールIDであるかどうか。
有効なアップロードされたファイルかどうかを確認してください
有効な画像かどうかを確認してください。デフォルトで許可されたタイプ:画像/jpeg、image/gif、image/png、webp、image/svg+xml、image/bmp。
それがstrtotime()関数を通過した有効な日付であるかどうか
両方の日付が等しいかどうかを確認してください
ユーザーの日付が与えられたものの後に来るかどうかを確認してください。
ユーザーの日付が指定されたものの前に来るかどうかを確認してください。
検証中および指定されたフィールドは、異なる値を持たなければなりません。
検証中および指定されたフィールドは、同じ値を持っている必要があります。
検証中のフィールドが存在する必要があります。
最大サイズルール。のために
番号:番号は、サイズよりも少ないか、または等しい必要があります。
文字列:長さは、サイズよりも少ないか、または等しい必要があります。
配列:要素のカウントは、サイズよりも少ないか等しくなければなりません。
アップロードされたファイル:Filesizeは、サイズよりも少ないか、または等しい必要があります。
最小サイズルール。 MAXと同じ制約:サイズルール。
構成ファイルでデータベースの資格情報と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 ]);
}
}また、最後の挿入IDを取得するにはDatabase::getConnection()->lastInsertId()実行できます。