Para proyectos pequeños y simples, consisten en:
Sekeleton MVC utiliza la arquitectura MVC como sugiere el nombre. MVC significa Model-View-Controller. Modelo-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.phpindex.php requieren autoload (compositor) y ayudantes globales (más sobre esto más adelante).index.php sendResponse () se llama a la instancia de $ App que envía encabezados y código de estado apropiados junto con el contenido que se envía de vuelta al navegador.Ahora comprende cómo el marco maneja todo esto. A continuación se presentan documentación para cada clase y algunos ejemplos para comenzar el desarrollo.
YourAppApp : su códigoControllers : todos los controladoresModel : todos los modelosView : todas las vistasConfig.php : clase de configuración de usuarioCore : Código de Frameworkpublic : expuesto a la webindex.php : punto de partida de la aplicación.htaccess : redirige todas las solicitudes a index.phpassets : Todos los activos estáticos como CSS/JS viven aquístorage : vistas compiladas, documentos cargados, etc.vendor : descarga del compositor de las bibliotecas requeridas Sin embargo, la mayoría de los marco siguen la convección sobre la configuración de la configuración del usuario es necesario para los parámetros de DB y la ruta de la vista, etc.
La configuración del usuario vive dentro de su directorio de aplicaciones en la clase de configuración. Abrir este archivo que verá la clase de configuración extiende BASECONFIG ( Core config) que se define internamente en Skeleton. La mayoría de las configuraciones son parmas constantes, algunos podrían ser métodos estáticos.
Esta clase se documenta a través de los comentarios, así que verifíquelo y podrá descubrir toda la configuración usted mismo.
Para las convenciones de enrutamiento se utilizan sobre configuraciones para Ej:.
Imagina que quiero mostrar la publicación de la ruta de 3 id se vería algo así
example.com/user-post/show-photos/3/paris
El ejemplo anterior tiene
Entonces, la clase de controlador arriba se verá como
<?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 '
]);
}
}Pero puede preguntar de qué /, /, en rutas, etc.
Estas rutas se enrutan automáticamente a default_controller (se pueden cambiar en config) el valor predeterminado es siteController y / la acción es predeterminado al método de índice que también se puede cambiar en config.
También puede notar que el objeto CoreRequest que se pasa como primer argumento siempre. Contiene varios ayudantes para la solicitud (más información en la sección de solicitud).
La solicitud se trata como objeto. Pasará por Deafault al método de cada controlador como primer argumento y otros parámetros se pasarán después de él en la secuencia. ex:
Para 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 '
]);
}
}Aquí hay algunos métodos útiles proporcionados por el objeto de solicitud a usted.
/* 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 La respuesta que debe enviarse al navegador puede lograrse mediante
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() La validación se inspira en Laravel y se proporcionan pocas reglas básicas y más utilizadas.
$ errorMsgs = Core Validator:: validate ( $ request -> all (), [
" name " => [ " required " , " max:30 " ],
" mobile " => [ " required " , " digits:10 " ],
" photo " => [ " required " , " image:image/jpeg " , " max:100 " ],
]);Los mensajes generados por Framework son simples y puede personalizar esos archivos de configuración internos. Ex.
public static function getMessage ( $ rule , $ field , $ params , $ messages = [])
{
$ messages = [
" required " => " Hmm... plz get the $ field filled :) "
];
return parent :: getMessage ( $ rule , $ field , $ params , $ messages );
}En el ejemplo anterior, el mensaje requerido será personalizado.
Falla si el campo se deja vacío según la función vacía () de PHP.
Debe ser un valor de cadena.
Debe ser un valor de cadena numérica o numérica con un tamaño dado, si el tamaño no dado simplemente verifique como valor numérico
Verdadero para sí, no, sí, no, verdadero, falso, 0, 1 de lo contrario falso
Los datos de solicitud deben contener el campo con el mismo nombre con _confirmation sufijo. Ej: si se usa en la contraseña, verificaría el campo de contraseña_confirmación
Si se trata de una identificación de correo electrónico válida o no.
Verifique si se trata de un archivo cargado válido o no
Verifique si es una imagen válida o no. Tipos permitidos de forma predeterminada: Image/JPEG, Image/GIF, Image/PNG, Image/WebP, Image/SVG+XML, Image/BMP.
Si es o no una fecha válida pasada por la función strTotime ()
Verifique si ambas fecha son iguales o no
Compruebe si la fecha del usuario llega después de la determinada.
Compruebe si la fecha del usuario llega antes de la determinada.
Campo bajo validación y dado que uno debe tener valores diferentes.
Campo bajo validación y dado uno debe tener los mismos valores.
El campo bajo validación debe estar presente puede ser nulo o vacío.
Regla de tamaño máximo. Para
Número : el número debe ser menor o igual al tamaño.
Cadena : la longitud debe ser menor o igual al tamaño.
Matriz : el recuento de elementos debe ser menor o igual al tamaño.
Archivo cargado : el tamaño de archivos debe ser menor o igual al tamaño.
Regla de tamaño mínimo. Restricción igual que max: regla de tamaño .
Establezca las credenciales de su base de datos y el tipo de DB en el archivo de configuración. Entonces siempre puedes obtener la conexión llamando:
$ conn = Core Database:: getConnection (); // PDO instance El modelo es donde residiría su negocio, que también incluye la lógica relacionada con DB. Por eso se proporcionan pocos métodos útiles:
// 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 El modelo inferirá el nombre de la tabla como forma plural de Snake_Case de su nombre de clase. Entonces, en el caso anterior para la clase de usuario, sería usuarios de la misma manera que AppData sería APP_DATA y la galería sería galerías. Puede definir su propio nombre anulando la propiedad $table , la misma forma en que $id se considera la clave primaria predeterminada y también puede ser anulada.
class User extends Model
{
protected $ table = " my_table " ;
protected $ id = " tbl_id " ;
}Cualquier cosa compleja que esto tienes que hacer consultas solo. Ex:
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 ]);
}
} También para obtener la última ID de inserción puede hacer Database::getConnection()->lastInsertId() .