2013-08-13 4 views
0

Я работаю на CakePHP 2.x .. сейчас у меня есть функция, называемая forgetpassword и ResetPassword в моем UsersController .. я посылаю письмо пользователю ..CakePHP удалить имя контроллера из URL

я посылаю URL, как это ..этот код записывается в forgetpassword функции

$url = Router::url(array('controller'=>'users','action'=>'resetpassword'), true ).'/'.$key.'#'.$hash; 

и я получаю этот адрес в своем почтовом ящике, как этот

https://www.myweb.com/resetpassword/y2273727372jhgdfjjd2434dff#23232323

, когда я нажимаю URL-адрес, который находится на моем почтовом ящике .. он дает мне ошибку .. не идет функция resetpassword .. вместо этого, если я добавлю имя контроллера за функцией, то он успешно загрузит страницу

например

https://www.myweb.com/users/resetpassword/y2273727372jhgdfjjd2434dff#23232323 

, но я не хочу имя контроллера за функции в URL

routes.php

Router::connect('/resetpassword', array('controller' => 'users', 'action'=>'resetpassword')); 
+3

Вам не нужна # часть. PHP все равно не может его использовать. Прошедшие параметры привязаны по-разному, поэтому ваше правило connect() неверно. Попробуйте 'Router :: connect ('/ resetpassword/*', ...)' – mark

+0

, так что это правильный синтаксис для подключения ... я всегда использую это, и он работает .. но на этот раз я застрял совсем по-другому ситуация .. но всякий раз, когда я хочу удалить имя контроллера, я делаю это – hellosheikh

+0

спасибо, что он работает – hellosheikh

ответ

1
Router::connect('/resetpassword', ...) 

означает, что вы не используете что-либо после него, как прошло Params и т.д. Но вы сделаете это, так правильно есть:

Router::connect('/resetpassword/*', ...) 

Также отметим, что

Router::url(array('controller'=>'users','action'=>'resetpassword'), true ).'/'.$key.'#'.$hash; 

неправильно, он должен be - как задокументировано:

Router::url(
    array(
     'controller' => 'users', 
     'action' => 'resetpassword', 
     $key, // passed param 
     '#' => $hash // hash 
    ), true);