Yii Framework Forum: Transformar em URL amigavel o GET - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Transformar em URL amigavel o GET Rate Topic: -----

#1 User is offline   Acácio Lima 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 18-April 12

Posted 10 July 2012 - 10:51 AM

Galera surgiu uma dúvida um pouco complexa.

Quero enviar atraves do metodo GET os dados quando submito um botão. Sendo assim quero tambem transformar as URL's em amigaveis:

Tipo: galeria=3&id=12
em galeria/3/id/12

E tambem quero saber se posso fazer isso no index, e como posso pegar o GET da forma que o Yii oferece?

É um pouco grande minha duvida, mas agradeço desde já quem ajudar :D
0

#2 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 727
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 10 July 2012 - 05:03 PM

Acácio,

Na sua 'urlManager' do main/config.php, vai precisa incrementar uma expressão regular parecida com essa aqui:

'<controller:\w+>/<id_galeria:\d+>/id/<id:\d+>' => '<controller>',

galeria/3/id/12
ou
'<controller:\w+>/<id_galeria:\d+>/<id:\d+>' => '<controller>',

galeria/3/12

Ai sua URL vai ter que ser criada assim:

Yii::app()->createUrl('galeria', array('id_galeria' => 3, 'id' => 12));

ou
Yii::app()->createAbsoluteUrl('galeria', array('id_galeria' => 3, 'id' => 12));


Eu uso createAbsoluteUrl() por que to usando uma extensão de SEO que recomenta o uso.
Newerton Vargas de Araújo
1

#3 User is offline   Acácio Lima 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 18-April 12

Posted 11 July 2012 - 08:39 AM

A função createUrl ficaria na action do controller?
0

#4 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 11 July 2012 - 11:19 AM

Dentro da action do controller você pode chamar ela da seguinte forma:

$this->createUrl('controller/action')

My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#5 User is offline   Acácio Lima 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 32
  • Joined: 18-April 12

Posted 11 July 2012 - 05:36 PM

Galera resolveu parte do app que estou fazendo. Muito obrigado mais uma vez pela atenção de vocês.

Abraço a todos.
0

#6 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 17 July 2012 - 09:13 PM

Newerton, nao entendi muito bem essa regra que vc colocou ai.

Também to com esse problema em alguns forms. No caso, vc coloca na rule o nome do proprio parametro que será passado pra url?
My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#7 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 727
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 19 July 2012 - 03:54 PM

View PostDyego Nery, on 17 July 2012 - 09:13 PM, said:

Newerton, nao entendi muito bem essa regra que vc colocou ai.

Também to com esse problema em alguns forms. No caso, vc coloca na rule o nome do proprio parametro que será passado pra url?

Dyego,

Isso mesmo, vou pegar o exemplo do Acácio (galeria/3/id/12)

'<controller:\w+>/<id_galeria:\d+>/id/<id:\d+>' => '<controller>',


Só que você precisa usar o createUrl() ou createAbsoluteUrl(), assim ele detecta qual das regras vai se encaixar sua URL.
Newerton Vargas de Araújo
0

#8 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 24 July 2012 - 07:13 PM

Acho que nao consegui entender muito bem. Ve se eu fiz algo errado aqui, olha só:

Tenho um formulario com um campo que gera essa URL:

/busca/buscaGenerica?search=teste&btn_search=Buscar


No formulário eu coloquei a action dessa forma:
'action'=>$this::createUrl('busca/buscaGenerica/')


E inclui isso aqui no urlManager:
'veiculos/<search>/<btn_search>' => 'busca/buscaGenerica',



deixei passar algo?
My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#9 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 727
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 25 July 2012 - 05:45 PM

No formulário deixa assim:
'action'=>Yii::app()->createUrl('busca/buscaGenerica'),


E no urlManager:
'busca/<search:.+>/<btn_search:.+>' => 'busca/buscaGenerica',


Eu não sei, se você deixar o veiculo com parametro de url, se ele vai buscar os dados no VeiculoController, faça o teste com os dois.
Newerton Vargas de Araújo
0

#10 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 25 July 2012 - 10:16 PM

Tentei assim tb...nada

Olha só como tá o UrlManager completo:
'urlManager'=>array(
			'urlFormat'=>'path',
                        'showScriptName'=>false,
                        'appendParams'=>true,
                        'baseUrl'=>'/emc001',
			'rules'=>array(
                            
                                'veiculos' => 'busca/index',
                            
                                'busca/<search:.+>/<btn_search:.+>' => 'busca/buscaGenerica',
				
                                'sitemap.xml'=>'site/sitemapxml',
                            
                                '<action:\w+>' => 'site/<action>',
                            
                                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
			),
                        
                        
		),

My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#11 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 25 July 2012 - 10:44 PM

Tipo, todas as urls eu consigo mudar, com excessão das URLS que são geradas pelos forms...elas continuam dando errado.
My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#12 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 25 July 2012 - 11:31 PM

Olha só, testando escrever a URL em formato PATH manualmente, a pagina é acessada corretamente, desse jeito:

/busca/buscaGenerica/search/dd/btn_search/Buscar




Meu problema é que quando eu submito o form, a URL não é escrita nesse formato...é escrita no formato GET tradicional.

Olha como tá meu htaccess:

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 [NC,L]

My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#13 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 14 August 2012 - 10:09 PM

bom...desenterrando esse topico pra saber se alguem ja teve um problema parecido que possa compartilhar como foi resolvido. Tá tenso isso.

abraço
My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#14 User is offline   Lothor 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 146
  • Joined: 05-August 11
  • Location:Brazil

Posted 15 August 2012 - 06:25 AM

View PostDyego Nery, on 14 August 2012 - 10:09 PM, said:

bom...desenterrando esse topico pra saber se alguem ja teve um problema parecido que possa compartilhar como foi resolvido. Tá tenso isso.

abraço

Opa Dyego, beleza!?

Cara... Para que a URL seja gerada no padrão amigável, o seu padrão deve estar definido no urlManager.

Tens certeza que o padrão foi definido?

Posta aqui para a gente o teu urlManager e a URL que o formulário esta gerando para a gente dar uma olhada.
0

#15 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 15 August 2012 - 03:21 PM

View PostLothor, on 15 August 2012 - 06:25 AM, said:

Opa Dyego, beleza!?

Cara... Para que a URL seja gerada no padrão amigável, o seu padrão deve estar definido no urlManager.

Tens certeza que o padrão foi definido?

Posta aqui para a gente o teu urlManager e a URL que o formulário esta gerando para a gente dar uma olhada.


Tranquilo Lothor,

Postei uns posts acima. Usei o método path no UrlManager. Dá uma olhada:

'urlManager'=>array(
			'urlFormat'=>'path',
                        'appendParams'=>true,
                        'baseUrl'=>'/emc001',
			'rules'=>array(
                            
                                'veiculo/<id>/<desc>' => 'veiculos/detalhesVeiculo',
                                'anunciante/<id>/<desc>' => 'anunciantes/perfilVendedor',
                                
                                '<controller:\w+>/<search>/<btn_search>' => '<controller>/<action>',
                                
                                'comprar-veiculo' => 'busca/index',
                                'vender-veiculo' => 'site/login',
                            
                                'sitemap.xml'=>'site/sitemapxml',
                            
                                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
			),
                        
                        
		),



Todas essas regras ai funcionam bem, porém quando eu tento criar uma regra para deixar os parametros GET amigáveis também, é que não funciona. Por exemplo, quero deixar essa url:

/busca/buscaGenerica?search=teste&btn_search=Buscar


desse jeito:

/busca/teste


Não sei se vc entendeu, mas a ideia é esconder o nome da variável e passar apenas o valor que é enviado pelo form.

Já tentei uma regra assim:
'busca/<search:\w+>' => 'busca/buscaGenerica'


Porém não funciona. O engraçado, como eu disse anteriormente, é que se eu tentar acessar a URL no modo amigável, digitando manualmente no navegador...ela funciona, mas quando submito o form, a URL gerada é a no modo normal.
My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#16 User is offline   Lothor 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 146
  • Joined: 05-August 11
  • Location:Brazil

Posted 15 August 2012 - 03:57 PM

Você já tentou adicionando essa regra?

'busca/<search:\w+>/<btn_search:\w+>' => 'busca/buscaGenerica'

0

#17 User is offline   Dyego Nery 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 26-August 11

Posted 15 August 2012 - 04:53 PM

Tentei agora. Nada também.

Só pra vc como tá o form:
 <?php $form=$this->beginWidget('CActiveForm', array(
                            'id'=>'search-form',
                            'enableAjaxValidation'=>false,
                            'method'=>'get',
                            'action'=>Yii::app()->createUrl('busca/buscaGenerica')
                        )); ?>

My first Yii application: http://www.emuitocarro.com.br

http://www.emuitocarro.com.br - Classificado Online de Veículos
0

#18 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 727
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 15 August 2012 - 09:33 PM

Dyego,

Te respondi por MP, mais vou explicar aqui.

Os dados do formulário em si não pode ser adicionado na URL amigavel, por que são váriaveis não definidas, então essas váriaveis precisa ser tratada depois de submita.

Na sua actionBuscaGenerica(), você pega os dados do formulário vindo do $_GET, e usa em um redirect(), mais ou menos assim:

if(!empty($_GET['btn_search']) && isset($_GET['btn_search'])){
                $this->redirect(Yii::app()->createUrl('busca/resultado', array('search' => $_GET['search'])));
        }



Ai na sua actionResultado(), você posta os dados, mais agora a váriavel será somente a $_GET['search'], caso esteja indo concatenado na URL, posta para nos sua 'urlManager' que fica na pasta config/main.php.
Newerton Vargas de Araújo
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users