как эмулировать персональную страницу пользователя?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

как эмулировать персональную страницу пользователя?

Сообщение kwasti »

еще не до конца изучил framework

пытаюсь применить возможность открытия страницы пользователя по персональному адресу
сейчас открывается так: http://domain.local/users/view?userid=70932490904564
хочу чтобы в профиле пользователь мог указать какой-то уникальный адрес, например mypage
и тогда его адрес выглядел бы как http://domain.local/users/mypage

как такое организовать лучше?

в контроллере обрабатывать? или где то в другом месте лучше? (например в обработчике маршрутов)
andrei.obuhovski
Сообщения: 610
Зарегистрирован: 2015.07.16, 10:50

Re: как эмулировать персональную страницу пользователя?

Сообщение andrei.obuhovski »

Код: Выделить всё

    public function actionMypage()
    {
        return $this->render('mypage', [
            'model' => $this->findModel(Yii::$app->user->id),
        ]);
    }
 
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: как эмулировать персональную страницу пользователя?

Сообщение maleks »

почитайте про slug
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

andrei.obuhovski писал(а):

Код: Выделить всё

    public function actionMypage()
    {
        return $this->render('mypage', [
            'model' => $this->findModel(Yii::$app->user->id),
        ]);
    }
 
это совсем не то, я говорил про любого пользователя, их количество не контролируемо практически.
я должен по идее получить вызов некоего метода, в случае если не найден action и поискать по базе пользователей, и показать нужную страницу.

либо до вызова action узнать какие action есть в базе и если такого нет, то поискать страницу пользователя.
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

maleks писал(а):почитайте про slug
Не то, все проще оказалось...
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: как эмулировать персональную страницу пользователя?

Сообщение maleks »

kwasti писал(а):
maleks писал(а):почитайте про slug
Не то, все проще оказалось...
как проще? И slug совсем не сложно, я себе так сделал страничку профиля пользователя.
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

может я не то нашел? )
я нашел два варианта:
контроллер создается стандартно, т.к. я страницу хочу привязать к 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
    } 
либо этот, но в этом случае нужно сохранить в каком-то свойстве контроллера вызванный action (предположительно имя стараницы пользователя).

Код: Выделить всё

   
    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 то что Вы читали?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: как эмулировать персональную страницу пользователя?

Сообщение maleks »

То что вы делаете, это как раз и есть - НЕ ТО.

Про slug гуглите куча инфы, типа:
http://stackoverflow.com/questions/2798 ... m-pagename

1) настраиваем правила в urlManager чтобы этот slug приходил в экшен
2) в таблице юзеров добавляем слаг для каждого юзера
3) В экшене показа профиля будет actinProfile($slug) и по этой строке уже ищется юзер. Не по id
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: как эмулировать персональную страницу пользователя?

Сообщение zelenin »

kwasti писал(а):
andrei.obuhovski писал(а):

Код: Выделить всё

    public function actionMypage()
    {
        return $this->render('mypage', [
            'model' => $this->findModel(Yii::$app->user->id),
        ]);
    }
это совсем не то, я говорил про любого пользователя, их количество не контролируемо практически.
я должен по идее получить вызов некоего метода, в случае если не найден action и поискать по базе пользователей, и показать нужную страницу.

либо до вызова action узнать какие action есть в базе и если такого нет, то поискать страницу пользователя.
не несите дичь. Это именно то, что вам нужно. Не надо никакие другие экшны открывать.
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

пользователей 1млн..я должен ручками прописать 1 млн action? для каждого?
mypage - это я привел пример для конкретного пользователя...каждый пользователь хочетиметь свой URL
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

maleks писал(а):То что вы делаете, это как раз и есть - НЕ ТО.

Про slug гуглите куча инфы, типа:
http://stackoverflow.com/questions/2798 ... m-pagename

1) настраиваем правила в urlManager чтобы этот slug приходил в экшен
2) в таблице юзеров добавляем слаг для каждого юзера
3) В экшене показа профиля будет actinProfile($slug) и по этой строке уже ищется юзер. Не по id
почитал, slug, он все что делает, так это генерирует автоматически имена страниц..
но пользователю не всегда интересны такие названия.
я хочу чтобы пользователь сам выбирал имя своей страницы. Понятно будет проверка на уникальность, со всеми правилами и т.д.
впрочем вопрос не в этом, а вот исходя из списка дальнейших действий, который Вы привели
скорее всего мне нужно копать urlManager...
только мне все равно не совсем понятно как будет работать..
к примеру как urlManager различит страницу пользователя и встроенный action?
http://site.ru/users/kwasti - страница пользователя
http://site.ru/users/index - встроенный action
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: как эмулировать персональную страницу пользователя?

Сообщение zelenin »

kwasti писал(а):пользователей 1млн..я должен ручками прописать 1 млн action? для каждого?
mypage - это я привел пример для конкретного пользователя...каждый пользователь хочетиметь свой URL
тогда бы и писали что урл должен быть users/<username>, а не mypage. Половина ответа - в правильно посталвеннгом вопросе.
В таком случае ответ про слаги верный.
Меняем User::find()->where('id = :id', [':id' => $id])->one(); на User::find()->where('username = :username', [':username' => $username])->one();

вообще никогда мы не запускаем один экшн из другого.
Vuishnak
Сообщения: 10
Зарегистрирован: 2015.01.18, 22:20

Re: как эмулировать персональную страницу пользователя?

Сообщение Vuishnak »

Господи, создайте экшн profile($slug) и передавайте туда параметр $slug, а уже в нем ищите нужную запись и выводите...
Это же элементарно просто. Какие 1млн экшенов?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: как эмулировать персональную страницу пользователя?

Сообщение zelenin »

kwasti писал(а):почитал, slug, он все что делает, так это генерирует автоматически имена страниц..
слаг - уникальное человекопонятное имя страницы. в вашем случае либо юзернейм либо выбранный пользователем алиас.
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

опять в сторону ))
сейчас у меня стандартный urlManager
вызов страниц идет через ЧПУ
и вопрос то и был как сделать чтобы на страницу пользователя я мог обратиться по http://site.ru/users/{slug}
в данном случае users - это ИД контроллера
понятно, что у меня сейчас работает вариант http://site.ru/users/index/{slug}
просто хочется убрать index из строки
Vuishnak
Сообщения: 10
Зарегистрирован: 2015.01.18, 22:20

Re: как эмулировать персональную страницу пользователя?

Сообщение Vuishnak »

в правиле пропиши: 'users/<slug>' => 'users/index'
И будет тебе счастье
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

да, я уже копаю в сторону правил...
не разбирался раньше, с ним ЧПУ настраивал по урокам в инете...без особого понимания что и зачем..
сейчас вот понадобилось...
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: как эмулировать персональную страницу пользователя?

Сообщение zelenin »

kwasti писал(а):опять в сторону ))
ты почитай о чем твой первоначальный вопрос и прочти что пишешь ниже, затем коммент с твоим кодом, запускающим экшны. Все эти три коммента не кореллируются между собой. Поэтому единственный кто "в сторону" это вы.
kwasti писал(а): сейчас у меня стандартный urlManager
вызов страниц идет через ЧПУ
и вопрос то и был как сделать чтобы на страницу пользователя я мог обратиться по http://site.ru/users/{slug}
в данном случае users - это ИД контроллера
понятно, что у меня сейчас работает вариант http://site.ru/users/index/{slug}
просто хочется убрать index из строки
kwasti
Сообщения: 262
Зарегистрирован: 2016.01.28, 16:14

Re: как эмулировать персональную страницу пользователя?

Сообщение kwasti »

к чему этот пост? зачем развивать флуд?
и цитирую"хочу чтобы в профиле пользователь мог указать какой-то уникальный адрес, например mypage
и тогда его адрес выглядел бы как http://domain.local/users/mypage"
что не понятного в " пользователь в профиле может указать персональную страницу, например ..."
Закрыто