как эмулировать персональную страницу пользователя?
как эмулировать персональную страницу пользователя?
еще не до конца изучил framework
пытаюсь применить возможность открытия страницы пользователя по персональному адресу
сейчас открывается так: http://domain.local/users/view?userid=70932490904564
хочу чтобы в профиле пользователь мог указать какой-то уникальный адрес, например mypage
и тогда его адрес выглядел бы как http://domain.local/users/mypage
как такое организовать лучше?
в контроллере обрабатывать? или где то в другом месте лучше? (например в обработчике маршрутов)
пытаюсь применить возможность открытия страницы пользователя по персональному адресу
сейчас открывается так: http://domain.local/users/view?userid=70932490904564
хочу чтобы в профиле пользователь мог указать какой-то уникальный адрес, например mypage
и тогда его адрес выглядел бы как http://domain.local/users/mypage
как такое организовать лучше?
в контроллере обрабатывать? или где то в другом месте лучше? (например в обработчике маршрутов)
-
- Сообщения: 610
- Зарегистрирован: 2015.07.16, 10:50
Re: как эмулировать персональную страницу пользователя?
Код: Выделить всё
public function actionMypage()
{
return $this->render('mypage', [
'model' => $this->findModel(Yii::$app->user->id),
]);
}
Re: как эмулировать персональную страницу пользователя?
почитайте про slug
Re: как эмулировать персональную страницу пользователя?
это совсем не то, я говорил про любого пользователя, их количество не контролируемо практически.andrei.obuhovski писал(а):Код: Выделить всё
public function actionMypage() { return $this->render('mypage', [ 'model' => $this->findModel(Yii::$app->user->id), ]); }
я должен по идее получить вызов некоего метода, в случае если не найден action и поискать по базе пользователей, и показать нужную страницу.
либо до вызова action узнать какие action есть в базе и если такого нет, то поискать страницу пользователя.
Re: как эмулировать персональную страницу пользователя?
Не то, все проще оказалось...maleks писал(а):почитайте про slug
Re: как эмулировать персональную страницу пользователя?
как проще? И slug совсем не сложно, я себе так сделал страничку профиля пользователя.kwasti писал(а):Не то, все проще оказалось...maleks писал(а):почитайте про slug
Re: как эмулировать персональную страницу пользователя?
может я не то нашел? )
я нашел два варианта:
контроллер создается стандартно, т.к. я страницу хочу привязать к action
в контроллере переопределит можно:
либо:
либо этот, но в этом случае нужно сохранить в каком-то свойстве контроллера вызванный action (предположительно имя стараницы пользователя).
вот так..
кстати удобно использовать если не нужны сообщения сто страница не найдена
ткните на страницу slug то что Вы читали?
я нашел два варианта:
контроллер создается стандартно, т.к. я страницу хочу привязать к action
в контроллере переопределит можно:
либо:
Код: Выделить всё
public function runAction($id, $params = [])
{
Alert::sendInfo('Вызван action=' . $id);
$act = $this->createAction($id);
if ($act === null) {
$params = array_merge($params,['action'=>$id]); // в параметр добавляем action из строки запроса (предположительно имя стараницы пользователя)
$id = 'index'; // вызываем реальный action
}
return parent::runAction($id, $params); // TODO: Change the autogenerated stub
}
Код: Выделить всё
public function createAction($id)
{
Alert::sendInfo('Вызван action=' . $id);
$original_action=$id;
$id = parent::createAction($id); // TODO: Change the autogenerated stub
if ($id === null) {
$id = parent::createAction('index'); // вызываем реальный action
}
return $id;
}
кстати удобно использовать если не нужны сообщения сто страница не найдена
ткните на страницу slug то что Вы читали?
Re: как эмулировать персональную страницу пользователя?
То что вы делаете, это как раз и есть - НЕ ТО.
Про slug гуглите куча инфы, типа:
http://stackoverflow.com/questions/2798 ... m-pagename
1) настраиваем правила в urlManager чтобы этот slug приходил в экшен
2) в таблице юзеров добавляем слаг для каждого юзера
3) В экшене показа профиля будет actinProfile($slug) и по этой строке уже ищется юзер. Не по id
Про slug гуглите куча инфы, типа:
http://stackoverflow.com/questions/2798 ... m-pagename
1) настраиваем правила в urlManager чтобы этот slug приходил в экшен
2) в таблице юзеров добавляем слаг для каждого юзера
3) В экшене показа профиля будет actinProfile($slug) и по этой строке уже ищется юзер. Не по id
Re: как эмулировать персональную страницу пользователя?
не несите дичь. Это именно то, что вам нужно. Не надо никакие другие экшны открывать.kwasti писал(а):это совсем не то, я говорил про любого пользователя, их количество не контролируемо практически.andrei.obuhovski писал(а):Код: Выделить всё
public function actionMypage() { return $this->render('mypage', [ 'model' => $this->findModel(Yii::$app->user->id), ]); }
я должен по идее получить вызов некоего метода, в случае если не найден action и поискать по базе пользователей, и показать нужную страницу.
либо до вызова action узнать какие action есть в базе и если такого нет, то поискать страницу пользователя.
Re: как эмулировать персональную страницу пользователя?
пользователей 1млн..я должен ручками прописать 1 млн action? для каждого?
mypage - это я привел пример для конкретного пользователя...каждый пользователь хочетиметь свой URL
mypage - это я привел пример для конкретного пользователя...каждый пользователь хочетиметь свой URL
Re: как эмулировать персональную страницу пользователя?
почитал, slug, он все что делает, так это генерирует автоматически имена страниц..maleks писал(а):То что вы делаете, это как раз и есть - НЕ ТО.
Про slug гуглите куча инфы, типа:
http://stackoverflow.com/questions/2798 ... m-pagename
1) настраиваем правила в urlManager чтобы этот slug приходил в экшен
2) в таблице юзеров добавляем слаг для каждого юзера
3) В экшене показа профиля будет actinProfile($slug) и по этой строке уже ищется юзер. Не по id
но пользователю не всегда интересны такие названия.
я хочу чтобы пользователь сам выбирал имя своей страницы. Понятно будет проверка на уникальность, со всеми правилами и т.д.
впрочем вопрос не в этом, а вот исходя из списка дальнейших действий, который Вы привели
скорее всего мне нужно копать urlManager...
только мне все равно не совсем понятно как будет работать..
к примеру как urlManager различит страницу пользователя и встроенный action?
http://site.ru/users/kwasti - страница пользователя
http://site.ru/users/index - встроенный action
Re: как эмулировать персональную страницу пользователя?
тогда бы и писали что урл должен быть users/<username>, а не mypage. Половина ответа - в правильно посталвеннгом вопросе.kwasti писал(а):пользователей 1млн..я должен ручками прописать 1 млн action? для каждого?
mypage - это я привел пример для конкретного пользователя...каждый пользователь хочетиметь свой URL
В таком случае ответ про слаги верный.
Меняем User::find()->where('id = :id', [':id' => $id])->one(); на User::find()->where('username = :username', [':username' => $username])->one();
вообще никогда мы не запускаем один экшн из другого.
Re: как эмулировать персональную страницу пользователя?
Господи, создайте экшн profile($slug) и передавайте туда параметр $slug, а уже в нем ищите нужную запись и выводите...
Это же элементарно просто. Какие 1млн экшенов?
Это же элементарно просто. Какие 1млн экшенов?
Re: как эмулировать персональную страницу пользователя?
слаг - уникальное человекопонятное имя страницы. в вашем случае либо юзернейм либо выбранный пользователем алиас.kwasti писал(а):почитал, slug, он все что делает, так это генерирует автоматически имена страниц..
Re: как эмулировать персональную страницу пользователя?
опять в сторону ))
сейчас у меня стандартный urlManager
вызов страниц идет через ЧПУ
и вопрос то и был как сделать чтобы на страницу пользователя я мог обратиться по http://site.ru/users/{slug}
в данном случае users - это ИД контроллера
понятно, что у меня сейчас работает вариант http://site.ru/users/index/{slug}
просто хочется убрать index из строки
сейчас у меня стандартный urlManager
вызов страниц идет через ЧПУ
и вопрос то и был как сделать чтобы на страницу пользователя я мог обратиться по http://site.ru/users/{slug}
в данном случае users - это ИД контроллера
понятно, что у меня сейчас работает вариант http://site.ru/users/index/{slug}
просто хочется убрать index из строки
Re: как эмулировать персональную страницу пользователя?
в правиле пропиши: 'users/<slug>' => 'users/index'
И будет тебе счастье
И будет тебе счастье
Re: как эмулировать персональную страницу пользователя?
да, я уже копаю в сторону правил...
не разбирался раньше, с ним ЧПУ настраивал по урокам в инете...без особого понимания что и зачем..
сейчас вот понадобилось...
не разбирался раньше, с ним ЧПУ настраивал по урокам в инете...без особого понимания что и зачем..
сейчас вот понадобилось...
Re: как эмулировать персональную страницу пользователя?
ты почитай о чем твой первоначальный вопрос и прочти что пишешь ниже, затем коммент с твоим кодом, запускающим экшны. Все эти три коммента не кореллируются между собой. Поэтому единственный кто "в сторону" это вы.kwasti писал(а):опять в сторону ))
kwasti писал(а): сейчас у меня стандартный urlManager
вызов страниц идет через ЧПУ
и вопрос то и был как сделать чтобы на страницу пользователя я мог обратиться по http://site.ru/users/{slug}
в данном случае users - это ИД контроллера
понятно, что у меня сейчас работает вариант http://site.ru/users/index/{slug}
просто хочется убрать index из строки
Re: как эмулировать персональную страницу пользователя?
к чему этот пост? зачем развивать флуд?
и цитирую"хочу чтобы в профиле пользователь мог указать какой-то уникальный адрес, например mypage
и тогда его адрес выглядел бы как http://domain.local/users/mypage"
что не понятного в " пользователь в профиле может указать персональную страницу, например ..."
и цитирую"хочу чтобы в профиле пользователь мог указать какой-то уникальный адрес, например mypage
и тогда его адрес выглядел бы как http://domain.local/users/mypage"
что не понятного в " пользователь в профиле может указать персональную страницу, например ..."