GoConqr has a new look! Let us know what you think.

Notes

MVC

Dionathan Cordova Portuguese 1 page

Content of the notes (1)

Page 1

das----------------------- MVC -------------------------------

usuario -> controler -> model -> controler - > view -> usuario

1 - ultilizar namespace

2 - Estrutura da aplicacao - adcionar um diretorio para cada elemento do MVC dentro de um diretorio chamado App

legenda:

NameApp

[]App

[]controller

[]model

[]view

-init.php // init e responsabel pela configuracao das rotas

[]public // public contem o arquivo index, ela eh o ponto de partida do site

-index.php

[]vendor

-composer.json

3 - adcionar um deretorio public (pasta root), e colocar o index dentro deste diretorio

4 - configuracao do htaccess: // faz com que a pagina inicie no diretorio que foi configurado abaixo;

- criar um arquivo chamado (.htaccess) dentro do diretorio public.

- dentro do arquivo .htaccess incerir os seguintes comandos:

RewriteEngine On

RewriteCond %(REQUEST_FILENAME) -s [OR]

RewriteCond %(REQUEST_FILENAME) -1 [OR]

RewriteCond %(REQUEST_FILENAME) -d

RewriteRule ^.*S - [NC,L]

RewriteRule ^.*S index.php [NC,L] // index.php e onde sempre ira começar o acesso

5 - dentro do diretorio App, criar um arquivo chamado Route.php e criar a classe de toras

<?php

namespace App;

use NomadaAplicavao\Init\Bootstrap;

class Route extends Bootstrap{

protected function iniRoutes() {

$routes['home'] = array("route"=>"/","controller"=>"indexControllers","action"=>"index");

$routes["empresa"] = array("route"=>"/empresa","controller"=>"indexControllers","action"=>"empresa");

$this->setRoutes($routes);

}

}

6 - adcionar um arquivo chamado composer.json no diretorio da aplicavao no mesmo nivel do dir App com os seguintes comandos:

{

"name":"nomedoframework/mvc", // nome do Framework

"require": {"php":">=5.6"}, // versao do php

"authors": [{

"name":"Dionathan de Cordova",

"email":"dionathan_bass@hotmail.com"

}],

"autoload":{

// nome do namespace que carrega todas as classes

"psr-4":{

"nomedoframework\\":"vendor/nomedoframework/",

"App\\":"App/"

}

7 - apos acessar o diretorio da aplicacao no cmd , digitar o seguinte comando para

ocorrer a instalacao do composer diretamente no diretorio da aplicaçao.

php -r "readfile('https://getcomposer.org/installer');" | php

8 - no cmd o seguinte comando:

php composer.phar install // isso deve acrescentar um arquivo no diretorio da

aplicacao com o nome de composer.phar

9 - no cmd o seguinte commando : composer dump-autoload // isso gera os arquivos corretos para o autoload de classes

obs: cada vez que for gerada uma nova classe, deve executar

deve gerar este comando novamente.

10 - dentro da pasta vendor, deve adcionar um diretorio com o nome que vc escolheu para

o framework no arquivo composer.json

digamos que este diretorio se chamara de (Son)

11 - para fazer um teste e ver se esta td funcionando neste momento:

abra o Route.php

<?php

namespace App;

class Route {

public function __construct() {

echo "carregou";

}

}

e dentro do public/index.php

instancie uma nova classe Route;

obs: voce pode testar via wamp server ou pelo host embutido do php na seguinte maneita

abra o cmd acesse o diretorio da aplicacao ate o loval onde o index.php se encontra

apos isso execute o comando : php -s localhost:8080

12 - se ocorrer algum erro, mude o autoload do composer.json para :

"autoload": {

"classmap": [

"controller", "model", "view" // "Nomedodiretorio que contem as classes MCV(contorller/model/view)"

]

},

---------- iniciando as rotas --------------------------

13 - dentro de vendor/Son criar um diretorio chamado init, e dentro do diretorio Init cirar arquivo chamado Bootstrap.php

<?php

namespace Son/Init;

class Bootstrap {

private $routes;

protected function __contruct() {

$this->iniRoutes();

$this->run($this->getUrl());

}

abstract protected function iniRoutes()

public function run($url) {

array_walk($this->routes, function($route) use ($url) {

if($url == $route['route']) {

$class = "App\\controller\\".ucfirst($route['controller']);

$controller = new $class;

$action = $route['action'];

$controller->$action();

}

});

}

protected function setRoutes(array $routes) {

$this->routes = $routes;

}

protected function getUrl() {

return parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);

}

}

14 - dentro de App/controller criar um arquivo chamado IndexController.php

<?php

namespace App\Controllers;

use Son\Controller\Action;

class IndexControllers extends Action {

// metodos que seram usados pela array $route da classe Route logo acima;

public function index() {

// setando um objeto para a classe view

$this->view->ling = array("Java", "php");

// metodo para o includo do action acessado

$this->render("index");

}

public function empresa() {

// metodo para o includo do action acessado

$this->render("empresa");

}

}

15 - dentro de App/View criar um diretorio chamado Index e dentro arquivos chamados index.phtml e empresa.phtml

ob: aqui seram mostradas as informacoes que seram passadas para a tela

--------------------------------------------------------------------------

--------------------------------------------------------------------------

16 - criar um novo diretorio chamado Controller dentro de vendor/Son e criat uma classe Action.php

<?php

namespace Son\Controller;

abstract class Action {

protected $view;

private $action;

public function __construct() {

// uma classe vazia, que ainda nao foi criada

$this->view = new \stdClass;

}

protected function render($action, $layout = true) {

$this->action = $action;

// se layout for verdadeiro a aplicacao ultiliza um template

if($layout == TRUE && file_exists("../App/Views/layout.phtml")) {

include_once "../Views/layout.phtml";

}else{

$this->content();

}

}

protected function content() {

$currentClass = get_class($this);

// Controller vem do nome da classe(indexController)

$singleClassName = strtolower((str_replace("Controllers", "", str_replace("App\\Controllers\\", "", $currentClass))));

// include agora recebe a action atual acessada

include_once "../App/Views/".$singleClassName."/".$this->action.".phtml";

}

}

17 - dentro de App/Views criar um arquivo chamado layout.phtml

dentro do layout

Information

Description
Tutorial de MVC php
Created by
Dionathan Cordova · May 2017
Updated
May 7, 2017
Views
23
Rating

Feedback

What is it about?

What do you think of the new look?

How do you like it?