
O MVPHP é uma estrutura simples e facilmente hackeável para o desenvolvimento de aplicativos da Web PHP minimamente viáveis. Muitas estruturas de PHP têm uma curva de aprendizado acentuada e abstraíram profundamente sua funcionalidade. O MVPHP foi projetado para manter as coisas simples, fáceis e mais próximas do PHP puro. Ele também fornece uma implementação simples e personalizável do bootstrap para você começar a criar um front -end sem muito aborrecimento.
O que inclui:
O que não é:
O MVPHP não é uma estrutura PHP robusta e bem testada, como Laravel, Symfony, Zend, etc. Essa estrutura é destinada ao desenvolvimento rápido de aplicativos da Web PHP de prova de conceito com despesas gerais mínimas, poucas opiniões e muita flexibilidade. Use -o por sua conta e risco! Crie um problema se você encontrar um bug ou tiver alguma sugestão.
composer install na raiz do projeto.npm install -g gulp-cli para instalar globalmente a CLI Gulpnpm install na raiz do projeto para instalar as ferramentas, precisaremos criar os arquivos front-end.gulp para construir os arquivos front-end.public .A idéia básica por trás dessa estrutura é começar com uma classe simples que lidará com toda a funcionalidade básica.
app.php é o arquivo de bootstrap que primeiro carrega nossas configurações config.php e instancia nossa classe principal criando o objeto $app . Um objeto $auth também é criado para todas as funcionalidades relacionadas à autenticação. Apontamos uma propriedade do nosso objeto principal ( $app->auth ) para referenciar $auth para simplificar as coisas e torná-lo acessível no escopo do $app .
$ app = new MVPHP (); Quase tudo o que fazemos utilizará esse objeto $app .
app.php também requer o arquivo routes.php no diretório raiz, onde definiremos nossas rotas iniciais. Você verá vários exemplos de trabalho neste arquivo.
Existem algumas maneiras de definir uma rota e o que ela deve fazer:
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff here
}); Um fechamento é uma função anônima que será executada quando a solicitação URI corresponder à rota. Para que os métodos em nossa classe MVPHP principal sejam acessíveis dentro desta função anônima, especificamos use ($app) . Isso importará a variável $app para o escopo variável da função anônima.
$ app -> route ( ' /example/{id} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});Você pode indicar parâmetros variáveis em um URI com colchetes. Eles são identificados em uma matriz associativa, com a chave sendo o nome definido na rota e o valor sendo o valor real fornecido no URI da solicitação.
$ app -> route ( ' /example/{id:int} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});Você também pode definir restrições para parâmetros de URI correspondentes usando um cólon seguido pelo tipo de restrição. Deixar de fora o valor da restrição será o padrão da restrição "string".
Opções de restrição:
Exemplos de expressão regular:
Qualquer expressão que funcione com a função preg_match do PHP funcionará aqui. Esta ferramenta é útil para testar expressões antes de implementá -las.
// This example requires the ID value to be a 5 digit number
$ app -> route ( ' /example/{id:regex=^[0-9]{5}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});
// This example requires the ID to be lower or uppercase letters between 1-10 characters long
$ app -> route ( ' /example/{id:regex=^[a-zA-Z]{1,10}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
}); $ app -> route ( ' /example ' ); Às vezes, seu aplicativo terá muitas rotas e você prefere organizá -las em arquivos separados do que todos no arquivo routes.php .
Se você registrar uma rota como essa, o MVPHP procurará um arquivo correlacionado com o mesmo nome no diretório controllers . No exemplo acima, uma rota registrada para /example procurará um arquivo de example.php no diretório controlador e exigirá.
Agora, você pode registrar mais rotas relacionadas /example pontos de extremidade do example.php . Por exemplo, seus controllers/example.php arquivo podem ficar assim:
// Reiterate this route and do something with it this time
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff
});
// Register any other related route endpoints here
$ app -> route ( ' /example/stuff ' , function () use ( $ app ) {
// Do stuff
});Se você deseja usar um arquivo específico com um nome diferente, basta especificar -o como o segundo parâmetro:
$ app -> route ( ' /example ' , ' myfile ' ); Isso tentará exigir controllers/myfile.php .
O conceito de rotas, controladores e modelos são muito fracamente definidos nessa estrutura. Evitamos usar várias classes diferentes para fins de simplicidade. Um controlador, no contexto dessa estrutura, deve ser simplesmente um local para mediar entre solicitações e funcionalidade definido pelo modelo.
Veja os arquivos no diretório controllers para obter exemplos.
Podemos testar diferentes métodos de solicitação usando o método action :
$ app -> route ( ' /example ' , function () use ( $ app ){
if ( $ app -> action ( ' post ' ) ) {
// Do stuff on POST
} elseif ( $ app -> action ( ' get ' ) ) {
// Do stuff on GET
}
}); Os modelos de visualização são armazenados no diretório views . Podemos chamar uma visualização (geralmente de um controlador) como este:
$ app -> view ( ' my-template ' ); Isso simplesmente procura por my-template.php na pasta Views e requer o arquivo. Se tivermos variáveis no arquivo de modelo, precisamos passar por isso para o método de exibição como este:
$ my_var1 = ' Stuff I want to echo in the template. ' ;
$ app -> view ( ' my-template ' , [
' my_var1 ' => $ my_var1
]); Agora $my_var1 estará acessível dentro do arquivo de modelo de exibição.
Não nos incomodamos com um motor de modelos (porque o PHP é inerentemente uma linguagem de modelos). Basta acessar os variais em seu html como este:
< p > < ?=$my_var1;? > </ p >Declarações condicionais:
< ?php if ( isset($my_var1) ):? >
< p > < ?=$my_var1;? > </ p >
< ?php endif;? >Você entendeu a ideia. Modelagem php pura e simples.
Por padrão, o front -end usa Bootstrap. Você pode encontrar todos os arquivos de origem no diretório frontend . As instruções para criar os arquivos de origem a partir da pasta frontend são definidas no arquivo gulpfile.js na raiz do projeto.
Quando você executa gulp pela primeira vez na raiz do projeto, os arquivos SCSS e JavaScript foram combinados, minificados, copiados para a pasta public . Os arquivos JS e CSS do fornecedor que utilizamos (jQuery, bootstrap etc.) também são copiados para a pasta public .
Antes de editar os arquivos SCSS e JavaScript no diretório frontend , você pode executar gulp watch na raiz do projeto. O Gulp observará as alterações que você salva nos arquivos e os salvará à medida que avança.
A classe models/Documents.php fornece um método para gravar um arquivo PDF em uma fonte HTML. Esta classe usa WKHTMLTOPDF e pode exigir que você instale essas dependências antes que funcione:
sudo apt-get install xfonts-base xfonts-75dpi urw-fonts
Mais PDF e outros "documentos" relacionados à funcionalidade serão adicionados no futuro.
Aprofundar -se em outros métodos utilitários disponíveis, observando o arquivo models/MVPHP.php , que contém nossa classe principal. Mais será adicionado no futuro!