e o meu arquivo que pega os paramentros passados via url é esse
<?php
// var $_url // SALVA O PARAMETRO PASSADO NA URL
// var $_explode // SEPARA CADA PARAMETRO POR "/"
// var $_controller // SALVA O PRIMERO PARAMETRO COMO CONTROLLER ex. www.site.com/index
// $_controller = index
// var $_action // SALVA O SEGUNDO PARAMENTRO COMO AÇÃO e EXECUTA A FUNÇÃO ex. www.site.com/produto/cadastrar
// $_actio = cadastrar()
class System{
private $_url;
private $_explode;
public $_controller;
public $_action;
public $_params;
public $_timezone;
//CONSTRUTOR
public function __construct(){
$this->setUrl();
$this->setExplode();
$this->setController();
$this->setAction();
$this->setParams();
}
//FUNÇÃO PARA VALIDAR E ATRIBUIR OS PARAMETROS padrão PASSADO NA URL
private function setUrl(){
$_GET['url'] = (isset($_GET['url']) ? $_GET['url'] : 'index/index_action');
//SE $_GET['url'] tiver em branco então por padrão $_GET['url] = index/index_action
$this->_url = $_GET['url'] .'/';
}
//SEPARA A URL POR "/" NUM ARRAY explode[] ex: controle / action
private function setExplode(){
$this->_explode = explode( '/' , $this->_url );
}
// ATRIBUI O PRIMEIRO VALOR DO PRIMEIRO INDICE EM _controller
private function setController(){
$this->_controller = $this->_explode[0];
}
//VALIDA E ATRIBUI O SEGUNDO VALOR COMO ACTION _action
private function setAction(){
$ac = (!isset($this->_explode[1]) || $this->_explode[1] == null || $this->_explode[1] == 'index' ? 'index_action' : $this->_explode[1]);
$this->_action = $ac;
}
//ADICIONA OS VALORES JÁ VALIDADOS EM 2 ARRAYS e EM SEGUIDA OS COMBINA
// O PRIMEIRO VALOR (IMPAR) vai ser o Index
// O SEGUNDO VALOR (PAR) vai ser o valor do index
// inds[] e value[]
private function setParams(){
unset( $this->_explode[0], $this->_explode[1] );
//print_r($this->_explode);
array_pop( $this->_explode );
if ( end( $this->_explode ) == null )
array_pop( $this->_explode );
$i = 0;
if( !empty ($this->_explode) ){
foreach ( $this->_explode as $val ){
if ( $i % 2 == 0 ){
$ind[] = $val; //Exp.. Se _explode[N] for impar então fica com indice
}else{
$value[] = $val; //Exp.. Se _explode[N] for par então fica com valor
}
$i++;
}
}else{
$ind = array(); //Se não tiver nada. Array em branco
$value = array();
}
//FAZ A JUNÇÃO DOS ARRAYS
//SE A QTD DE IND FOR = A QTD DO VALOR, COMBINA
//SE NÃO ARRAY EM BRANCO
if( count($ind) == count($value) && !empty($ind) && !empty($value) )
( $this->_params = array_combine($ind, $value));
else
$this->_params = array();
}
public function getParam( $name = null ){
if ( $name != null )
if (array_key_exists ($name, $this->_params))
return $this->_params[$name];
else
return false;
else
return $this->_params;
}
//FUNÇÂO QUE CARREGARÁ OS CONTROLLERS E ACTIONS
public function run(){
$redi = new redirectorHelper();
$controller_path = CONTROLLERS . $this->_controller . 'Controller.php';
if( !file_exists( $controller_path ) )
// echo $this->_controller.'<br/>';
// echo $controller_path;
$redi->goToControllerAction('index','erro');
require_once( $controller_path );
$app = new $this->_controller();
if( !method_exists($app, $this->_action) )
$redi->goToControllerAction('index','erro');
$action = $this->_action;
$app->init();
$app->$action();
}
}
Minha classe indexController filha da classe Controller
<?php
//CLASSE CONTROLADORA DO INDEX (PÁGINA PRINCIPAL)
class index extends Controller {
private $auth;
private $redi;
//FUNÇÃO QUE INICIA ANTES DE TUDO
public function init(){
}
//FUNÇÃO QUE CHAMA A PAGINA PRINCIPAL
public function index_action(){
//vai chamar o arquivo index.phtml na pasta view
$this->view('index');
}
}
A classe controller só tem uma função que chama as views. então não precisa postar.
Eu criando outro controller por exemplo..
loginController
localmente eu consigo accessar
por exemplo localhost/site/login/
ele vai automaticamente para a index_action e chama a view login..
porém quando eu rodo num servidor online, 00webhost, não funciona da página encontrada porque????w
saka ai como ta meu index.php que vai chamara todos os arquivos..
session_start();
//DEFININDO CONSTANTES COM OS CAMINHOS DE CADA ARQUIVO A SER CHAMADO
define('CONTROLLERS', 'app/controller/');
define('VIEWS', 'app/views/');
define('HELPERS', 'system/helpers/');
define('MODELS', 'app/models/');
define('BASE', dirname($_SERVER['PHP_SELF']));
//CHAMANDO A PASTA SYSTEM, CONTROLADOR E O MODELO
require_once('system/system.php');
require_once('system/model.php');
require_once('system/controller.php');
//require_once('system/conector.php');
//date_default_timezone_set('America/Recife');
//FUNÇÃO QUE CARREGA AUTOMATICAMENTE OS ARQUIVOS DA PASTA models e Helpers
//var $file PEDE O NOME DO ARQUIVO
function __autoload( $file ){
if ( file_exists(MODELS . $file . '.php') )
require_once( MODELS . $file . '.php' );
else if ( file_exists(HELPERS . $file . '.php') )
require_once( HELPERS . $file . '.php' );
else
die("Model ou Helper não encontrado.");
}
$start = new System;
$start->run();
$start->setTimezone('America/Recife');
?>
por favor me ajudem,, se for algum bug do 00webhost ou alguma restrição.. ajudem faloww
Pergunta
Rodrigo Mafra
Olá galera tou com um projeto.
porém eu fiz um ambiente proprio em MVC.
tava usando url amigavel.
Meu .htaccess é esse abaixo:
e o meu arquivo que pega os paramentros passados via url é esse Minha classe indexController filha da classe Controller A classe controller só tem uma função que chama as views. então não precisa postar. Eu criando outro controller por exemplo.. loginController localmente eu consigo accessar por exemplo localhost/site/login/ ele vai automaticamente para a index_action e chama a view login.. porém quando eu rodo num servidor online, 00webhost, não funciona da página encontrada porque????w saka ai como ta meu index.php que vai chamara todos os arquivos..por favor me ajudem,, se for algum bug do 00webhost ou alguma restrição.. ajudem faloww
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.