[TUT] Manipulação da URL

Bom esse é meu primeiro tutorial aqui no Forum Yii :) , sou novo no Yii Framework então há coisas que eu aprendo que percebo que outras pessoas também tem dúvida então estarei repassando o que aprendo de uma forma mais simples e fácil de entender, ja tenho uma experiencia com postagens pois tenho um blog bem visitado (mais não vem ao caso)…

Obs.:

Nesse tutorial estou gerando um applicativo yii do 0 para que não haja falhas de compatibilidade e estou fazendo tudo que está escrito aqui nesse aplicativo então pode ficar susegado que vai dar tudo certo :D

Qualquer dúvida comente ::)

Vamos ao que interessa! :lol:

A URL do Yii por padrão é assim:

Home (página inicial):


http://localhost/meusite/index.php?r=site/index

About (Sobre):


http://localhost/meusite/index.php?r=site/page&view=about

Contact (Contato):


http://localhost/meusite/index.php?r=site/contact

Login:


http://localhost/meusite/index.php?r=site/login

Então faremos que esse URL fique assim

Home (página inicial):


http://localhost/meusite/

About (Sobre):


http://localhost/meusite/page?view=about

Contact (Contato):


http://localhost/meusite/contact

Login:


http://localhost/meusite/login

Bem Melhor não acha?

Então vamos começar a por a mão na massa 8)

Vai na config main.php (/meusite/protected/config/main.php)

Procure por urlManager se não houver edição está na linha 41.

2126

img-01.png

perceba que está escrito

"Descomente as seguinte as linhas para ativar o formato de caminho das URLs"

Então faremos isso descomente então (tirando o "/" e o "/" como mostra a imagem a seguir:

2127

img-02.png

Salve, e vá ate seu site e perceba que o formato das URL mudou.

Ficou bem melhor mais ainda não basta vamos tirar esse index.php.

vá ate o diretório raiz do seu site (no meu caso chama meusite) e crie um arquivo chamado .htaccess caso não exista é claro :D

E dentro dele coloque o seguinte conteudo e salve!




RewriteEngine on


# if a directory or a file exists, use it directly

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d


# otherwise forward it to index.php

RewriteRule . index.php

Perceba que mesmo tirando o index.php seu site funcionará perfeitamente.

2128

img-03.png

Agora por ultimo iremos deixar o url ainda melhor :D

Nosso URL está nesse formato agora certo?


http://localhost/meusite/site/contact

Vamos tirar esse /site/

Vá até o arquivo main que abrimos no primeiro passo e faça o seguinte:

Na array rules em urlManager adicione a seguinte linha:


'<action:(login|logout|page|contact)>' => 'site/<action>',

Ficando assim:

2129

img-04.png

É isso ai agora é so mudar os links na view/layout/main.php com o novo padrão de URL.

Espero que tenha ficado bem claro :D, Por favor comente com suas criticas positivas ou negativas sobre o tutorial.

Gustavo, excelente tópico.

Vou deixar uma dica, para quem tiver usando Yii::app()->createUrl() e não estiver escondendo o index.php, configura no config/main.php para setar o showScriptName como false:


'urlManager' => array(

            'urlFormat' => 'path',

            'showScriptName' => false,

            'caseSensitive' => false,

            'urlSuffix' => '.html',

            ...

        ),

Excelennnte !

Este é o primeiro dia testando o Yii e estou gostando muito dele !

Aproveitando esse Belo post, gostaria de esclarecer uma dúvida …

Preciso migrar um sistema criado para um novo Framework. E será que o Yii me possibilita manipular a URL desta FORMA ?

www.meusite.com/fabiopereira

fabiopereira = É um registro no campo "username" da tabela "usuario".

Ao entrar na página é visualizado o perfil do usuário. (Controller: usuario/ action: view)

PS: da mesma maneira que as URLs amigáveis do facebook funciona.

Em outro FW precisei criar um Controller somente para verificar se o usuário existe e redirecionava para (usuario/view)

Alguém sabe como implementar no Yii ?

Olá Fábio,

Não vou lhe dar toda certeza, mais é possivel sim, configurando as rotas!

Esse mês irei desenvolver um projeto para corretores de imoveis, e cada corretor terá um hotsite com temas diferente, e será essa URL que irei usar http://www.site.com.br/username

Amigo, se voce puder ao menos me informar qual propriedade/ parametro alterar, já ficaria agradecido.

Estou percebendo que a Yii tem uma curva de aprendizado muito pequena, embora ainda seja carente de conteudo.

Eu te agradeço desde já, Newerton!

Bom, pressupondo que as urls amigáveis estejam funcionando perfeitamente, vc tem algumas formas de fazer isso … uma é pelo controllerMap(http://www.yiiframew…ollerMap-detail).

Mas desta forma vc ou terá que incluir os usuários no config manualmente. Não é muito prático pq vc, no seu config, não terá acesso aos seus models pra preencher automaticamente.

então, eu criei uma forma um pouco mais simples:

eu criei um controller pra responder a estas requisições


<?php


class SlugResponseController extends Controller{

	public function actionIndex($id){

		$model = Cotacao::model()->find('id=:id and prazo >= now()', array(':id'=>$id));

		if (!$model)

			throw new CHttpException(400, 'Inválido');

		

		$this->render('form', array('model'=>$model);

	}

}

no config eu coloquei assim:


'<slug:\w+>'=>'/slugResponse/index/id/<slug>',

Mas vale ressaltar que essa aplicação não tem nenhum outro controller. To dizendo isso pq nenhum outro controller funcionou direito neste site. o Yii redirecionava tudo pra este controller ai. Pro que eu queria fazer, que era exibir algumas informações dependendo do link que o cara acessava, tava bom até d+, mas tem que ver se vai servir pra o que vc quer.

Estou Feliz que tenha gostado do tutorial :D, em breve vem mais ai hehe

Bom, sobre manipulação de URL tem uma forma que é no .htaccess por exemplo a personalização do erro 404 e e do index.php como mostrei no tutorial e tudo mais porém não sou mto bom nisso estarei estudando sobre o htaccess oque aprender mais estarei repassando hehe

Encontrei esse tutorial na internet parece ser bem explicado deem uma olhada :D

http://httpd.apache.org/docs/2.2/pt-br/howto/htaccess.html