O YAMF (mais uma estrutura MVC) é uma pequena estrutura de MVC de PHP projetada para que você comece a usar o paradigma do MVC rapidamente sem muito trabalho de configuração. Tudo o que você precisa é de um servidor da web que aceita arquivos .htaccess e você é muito bom para ir!
Requisitos mínimos: Php 7.0+.
Use this template na página principal do Repo Project.config.php , se necessário. Ajuste todos os parâmetros que desejar lá ou adicione novos parâmetros ao $app , como a lógica da sessão. Por padrão, você não precisa ajustar nada para colocar seu site em funcionamento.config-private.sample.php para config-private.php e ajustá-lo às suas necessidades. Por exemplo, você pode configurar $app->db para ser uma instância PDO para o seu banco de dados local. Observe que config-private.php será carregado antes que qualquer coisa no config.php ocorra.use Yamf/XYZ funcionem, você precisará usar o Composer. Usar o Composer é muito fácil: basta ir para a página de download e executar o script na parte superior. (Nota: se você estiver no Windows, você deve seguir as instruções aqui na página de introdução.)composer install (se você tiver um arquivo composer.phar no seu diretório, execute php composer.phar install ). Ele vai sentar e pensar por um minuto. Eles não estão aqui e não estão aqui de propósito! O YAMF foi escrito propositalmente para não usar nenhuma dependência externa que não seja o automóvel do compositor para diminuir a barreira de entrada para usar o paradigma do MVC no PHP. Se você quiser alguma dessas coisas, basta puxá -las com seu gerente de dependência favorito (como o Composer). Como o Composer já é necessário para executar este projeto para o AutoLoading do PSR-4, recomendamos o uso do compositor. vendor/autoload.php já está incluído para você no init.php .
Para uma nota sobre o modelo de exibição, consulte a seção sobre subclassificação.
Se você ler a seguinte documentação sobre o YAMF, provavelmente estará muito melhor do que apenas pular e tentar ler o código sozinho. :) Vai levar apenas alguns minutos e vale a pena!
Para facilitar a passagem fácil dos parâmetros de configuração, como configurações de banco de dados, etc., o YAMF passa uma variável $app da classe YamfAppConfig para cada função do controlador. Você pode configurar essa variável para armazenar seu objeto PDO de banco de dados, alterar sua extensão de visualização ou localização da pasta e muitas outras configurações. Se você deseja adicionar seus próprios valores ao $app , poderá criar uma classe que deriva do YamfAppConfig e altere a configuração appConfigClass em config.php para apontar para sua classe personalizada. Observe que sua classe personalizada deve derivar do YamfAppConfig ! Consulte config.php para ver todas as configurações e valores que são passados pelo YAMF através $app . Notavelmente, você pode:
viewsFolderName )viewExtension )defaultHeaderName / defaultFooterName )config-private.php ) $app está disponível automaticamente em suas opiniões para você.
A primeira coisa que você provavelmente deseja fazer é adicionar uma nova rota. Para fazer isso, siga estas etapas:
app/Controllers do projeto. Subpastas estão ok. Na verdade, o controlador não precisa ter Controller no nome, mas verifique se o nome da classe corresponde ao nome do arquivo.public que leva dois parâmetros: $app e $request (nesse pedido).routes.php e certifique -se de entender a documentação e exemplos de como as rotas funcionam.routes .POST , se necessário.Parent-Folder/Controller-Name .yamf/Responses/Response , que pode ser qualquer coisa, desde uma View a uma resposta JSON e, bem, o que você quiser, na verdade. Veja a próxima seção para obter mais informações aqui.yamf/Responses/View . Crie um arquivo php (exibição) na pasta views - Novamente, as subpastas estão ok - e, no seu método do controlador, return new View('name/of/view'); .Resumidamente:
app/Controllersroutes.phpviews , se necessárioreturn new View('name/of/view'); Todos os métodos do controlador que são chamados como resultado de uma rota devem retornar um yamf/Responses/Response ou uma subclasse da referida classe. Aqui estão algumas descrições sobre como usar cada uma. A maioria pode ser usada em uma linha apenas com o construtor.
Response - A classe base para uma resposta de uma rota.new Response($statusCode = 200)yamf/Responses/Response Subclasse desta classe pai, todos eles podem retornar um código de status HTTP personalizado, se desejar!ErrorMessage - Wrapper simples em torno da exibição para enviar de volta um código de status 400 e a visualização do erro.php.new ErrorMessage($msg = '', $name = 'error', $title = '', $headerName = '', $footerName = '') . $name é o nome da visualização.$error . Você não pode mudar isso sem subclasse.views/header.php e views/footer.php .JsonResponse - Exemplo de como você pode enviar de volta uma resposta JSON do seu controladornew JsonResponse($data, $jsonEncodeOptions = 0)$data via echo json_encode($this->data, $this->jsonEncodeOptions);NotFound - usado para retornar uma mensagem 404 não encontrada de volta ao cliente.new NotFound($name = '404', $data = [], $title = '', $headerName = '', $footerName = '') . $name é o nome da visualização.views/header.php e views/footer.php .Response .Redirect - permite um redirecionamento de 302 para outra página ou rotanew Redirect($redirectPath, $isInternalRedirect = true)$isInternalRedirect é usado para redirecionar para uma rota dentro do site atual/ routes.php Data . Se você deseja redirecionar para uma rota interna, use Redirect como este: new Redirect('/route/name); (Observe o início / ). Caso contrário, use Redirect como este: new Redirect('https://example.com', false); .View -usado para devolver alguma visualização HTML baseada em PHP.new View($name, $data = [], $title = '', $headerName = '', $footerName = '') . $name é o nome da visualização.compact . Veja o BlogController da amostra.views/header.php e views/footer.php . Se você tiver idéias para mais tipos Response que devem ser incluídos no YAMF, abra uma solicitação de recurso (através da guia Problemas) ou abra uma solicitação de tração!
Duas variáveis principais são enviadas para seus métodos controladores a partir da rota: $app e $request . Observe que toda a saída View terá o $app e $request variáveis disponíveis para uso. Você não precisa enviá -los como um parâmetro $data .
AppConfig $app $app é principalmente variáveis de configuração que você configurou em config.php . Verifique esse arquivo para uma rápida olhada no que está disponível. Alguns dos itens mais importantes são:
$app->db para uma conexão de banco de dadosnull para evitar usá -los. Além disso, existem duas variáveis disponíveis que são configuradas no init.php :
$app->isLocalHost -se o aplicativo está em execução ou não no host local ( 127.0.0.1 ou ::1 )$app->basePath -O diretório base do seu aplicativo web atual. Isso pode ser usado para permitir aplicativos da Web aninhados em seu servidor da Web. Eu recomendo fortemente usar essa variável em suas views ao fazer links para o site local, para que, se você mover arquivos ou posteriormente, mova as coisas para uma subpasta, tudo não quebre. Para vincular-se a outra página do seu site, basta usar a função $app->yurl(string) (url yamf) como este: <?= $app->yurl('/path/to/page') ?> . $request $request terá todos os seus dados sobre sua rota e os diferentes parâmetros que chegaram com sua solicitação. É do tipo yamf/Request . Tem esses membros públicos disponíveis:
$request->route -string de rota bruta para esta solicitação$request->controller -nome da string do controlador$request->function -Nome da sequência da função do controlador para chamar$request->routeParams -qualquer params na rota como {id}. Formato: ['id' => valor]$request->get -quaisquer parâmetros get encontrados no URL-o mesmo formato que $ _get (nenhum processamento extra executado)$request->post -qualquer post params-o mesmo formato que $ _post (nenhum processamento extra executado)$request->anchor -se usado, a parte # do URL (sem o #). O roteador é inteligente o suficiente para não corresponder a URLs como /blah/#/foo . A maneira mais fácil de estender essa estrutura é derivar da Response (ou de alguma outra resposta infantil Response ) e/ou criar uma classe pai para alguns de seus controladores. Por exemplo, derivando da View , você pode alterar a saída da exibição para usar o motor do modelos de galhos em vez de apenas uma saída simples de PHP. Ao criar uma classe pai para seus controladores, você pode adicionar coisas como validação ou outro processamento extra de dados que devem acontecer para todas as suas rotas de API, como verificar um nome de usuário/senha ou token. As opções são infinitas e o potencial grande!
Há um exemplo de uso do Twig em vez de PHP bruto no ramo do Twig!
Um recurso bacana que o YAMF suporta são as páginas da Web estáticas que não exigem uma route ou um controller . Se você quiser /about a ser apenas uma página simples, jogue uma página about.php nas views/static/ pasta e - bam! - /about os trabalhos em seu site. E as subpastas como /blog/post-name ? Isso também funciona! Adicione um arquivo views/static/blog/post-name.php e ele apenas funciona (TM)! Você pode usar isso para ainda ter URLs bonitos no seu site sem se preocupar em adicionar rotas e controladores.
Você pode configurar o local das visualizações estáticas em config.php .
Observe que o roteador tenta corresponder a uma rota router.php antes de verificar páginas estáticas.
Um recurso que o roteador suporta que não está imediatamente ativado é o encurtamento da URL-por exemplo, https://example.com/short-url . Requer uma conexão de banco de dados, mas se você adicionar a conexão do banco de dados e tiver a tabela de banco de dados apropriada (o esquema está em config.sample.php ), o encurtamento da URL pode ser usado, se desejar. Você não é necessário ativar esse recurso.
Incluí alguma lógica de sessão padrão comentada no config.sample.php . Sinta -se à vontade para usá -lo, modificá -lo ou jogá -lo fora. Se você tiver sugestões sobre como melhorar essa funcionalidade, abra uma solicitação de tração ou um problema para gerar mais discussões.
Que bom que você perguntou! Sempre há coisas que podem ser feitas em um projeto de código aberto: corrija bugs, novos recursos e muito mais! Confira a guia Problemas deste repositório e dê uma olhada em quais bugs foram relatados e quais recursos foram solicitados. Há mais informações sobre como contribuir no documento contribuinte.
MIT Licença. Certifique -se de incluir a licença para esta estrutura (junto com um link do GitHub se você estiver se sentindo generoso!) Ao usá -lo no seu site. Obrigado! :)
Agradecimentos especiais ao Bootswatch pelo tema do papel de bootstrap usado na amostra.