Para projetos pequenos e simples, consistem em:
Sekeleton MVC usa a arquitetura MVC como o nome sugestão. MVC significa 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.phpindex.php requerem automóveis de automóveis automáticos (compositor) e globais (mais sobre isso posteriormente).index.php sendResponse () é chamado na instância do $ app, que envia cabeçalhos apropriados e código de status junto com o conteúdo que é enviado de volta ao navegador.Agora você entende como a estrutura lida com isso tudo. Abaixo está a documentação de cada classe e alguns exemplos para você começar o desenvolvimento.
YourAppApp : Seu códigoControllers : todos os controladoresModel : todos os modelosView : todas as visualizaçõesConfig.php : classe de configuração do usuárioCore : código da estruturapublic : exposto à webindex.php : ponto de partida do aplicativo.htaccess : redirecionar todas as solicitações para index.phpassets : todos os ativos estáticos como CSS/JS vive aquistorage : vistas compiladas, documentos carregados, etc.vendor : Download do compositor das bibliotecas necessárias Ao longo de, a maioria das estruturas segue a convicção sobre a configuração da configuração do usuário é necessária para parâmetros de banco de dados e caminho de visualização, etc.
A configuração do usuário vive dentro do seu diretório de aplicativos na classe Config. Abrindo este arquivo que você verá a classe Config estende o Baseconfig ( Core config), que é definido internamente no esqueleto. Acima de tudo, a configuração é const parmas, alguns podem ser métodos estáticos.
Esta classe está documentada por meio de comentários, então verifique e você poderá descobrir toda a configuração por si mesmo.
Para convenções de roteamento, são usadas em configurações para ex:.
Imagine querer mostrar post de 3 rota de identificação seria algo assim
example.com/user-post/show-photos/3/paris
Exemplo acima tem
Então, a classe do controlador acima será 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 '
]);
}
}Mas você pode perguntar o que tal /, /sobre etc. rotas?
Essas rotas são roteadas automaticamente para o padrão Default_Controller (podem ser alteradas no Config) é o sitecontroller e / ação é padrão para o método de índice que também pode ser alterado na configuração.
Você também pode observar o objeto CoreRequest que está sendo aprovado como primeiro argumento sempre. Ele contém vários ajudantes para solicitação (mais informações na seção de solicitação).
A solicitação é tratada como objeto. Ele passará por Surfault para o método de todos os controladores, pois o primeiro argumento e outros parâmetros serão passados após ele na sequência. 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 '
]);
}
}Aqui estão alguns métodos úteis fornecidos pelo objeto de solicitação a você.
/* 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 A resposta que precisa ser enviada ao navegador pode ser alcançada por
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() A validação é inspirada no Laravel e poucas regras básicas e mais usadas são fornecidas.
$ errorMsgs = Core Validator:: validate ( $ request -> all (), [
" name " => [ " required " , " max:30 " ],
" mobile " => [ " required " , " digits:10 " ],
" photo " => [ " required " , " image:image/jpeg " , " max:100 " ],
]);As mensagens geradas pela estrutura são simples e você pode personalizar o arquivo de configuração interno. Ex.
public static function getMessage ( $ rule , $ field , $ params , $ messages = [])
{
$ messages = [
" required " => " Hmm... plz get the $ field filled :) "
];
return parent :: getMessage ( $ rule , $ field , $ params , $ messages );
}No exemplo acima, a mensagem necessária será personalizada.
Falha se o campo for deixado vazio conforme a função vazia () do PHP.
Deve ser um valor de string.
Deve ser um valor numérico ou numérico da string com tamanho determinado, se o tamanho não é dado, basta verificar como valor numérico
Verdadeiro para sim, não, sim, não, verdadeiro, falso, 0, 1, caso contrário, falsa
Os dados de solicitação devem conter o campo com o mesmo nome com o sufixo _confirmation. Ex: Se usado na senha, ele veria o campo de senha_confirmação
Seja um ID de email válido ou não.
Verifique se é um arquivo carregado válido ou não
Verifique se é uma imagem válida ou não. Tipos permitidos por padrão: imagem/jpeg, imagem/gif, imagem/png, imagem/webp, imagem/svg+xml, imagem/bmp.
Se é a data válida ou não passada pela função strtotime ()
Verifique se as duas data são iguais ou não
Verifique se a data do usuário vem após a determinada.
Verifique se a data do usuário vem antes da dada.
Campo sob validação e, dado que um deve ter valores diferentes.
Campo sob validação e, dado que é preciso ter os mesmos valores.
O campo sob validação deve estar presente pode ser nulo ou vazio.
Regra de tamanho máximo. Para
Número : o número deve ser menor ou igual ao tamanho.
String : O comprimento deve ser menor ou igual ao tamanho.
Array : a contagem dos elementos deve ser menor ou igual ao tamanho.
Arquivo carregado : o tamanho do arquivo deve ser menor ou igual ao tamanho.
Regra de tamanho mínimo. Restrição igual à regra de tamanho máximo .
Defina suas credenciais de banco de dados e tipo de banco de dados no arquivo de configuração. Então você sempre pode obter a conexão ligando:
$ conn = Core Database:: getConnection (); // PDO instance O modelo é onde sua empresa residiria, que inclui a lógica relacionada a DB também. É por isso que poucos métodos úteis são fornecidos:
// 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 O modelo inferirá o nome da tabela como forma plural Snake_Case do seu nome de classe. Portanto, no caso acima da classe de usuário, os usuários da mesma forma que o AppData seriam app_data e a galeria seriam galerias. Você pode definir seu próprio nome, substituindo a propriedade $table , a mesma maneira que $id é considerado a chave primária padrão e também pode ser substituída.
class User extends Model
{
protected $ table = " my_table " ;
protected $ id = " tbl_id " ;
}Qualquer coisa complexa do que isso você que você quer consultar sozinho. 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 ]);
}
} Também para obter o último ID de inserção, você pode fazer Database::getConnection()->lastInsertId() .