Size: a a a

2021 January 22

Е

Евгений in pro.elixir
Ihor Katkov
Я видимо не совсем понимаю, а что именно нужно в mount проверять?
Мне нужно там вытаскивать пользователя по его id в сессии.
А в handle_params надо вытаскивать язык локализации.
источник

Е

Евгений in pro.elixir
Нужно создавать две функции-хелпера типа assign_user и assign_locale, после чего не забыть в КАЖДОМ live_view вызвать эти функции в handle_params и mount.
Причем пользователь по факту нужен не всем LiveView, а хидеру, который торчит в виде компонента в лейауте.
источник

AN

Alexey Novoselov in pro.elixir
Евгений
Нужно создавать две функции-хелпера типа assign_user и assign_locale, после чего не забыть в КАЖДОМ live_view вызвать эти функции в handle_params и mount.
Причем пользователь по факту нужен не всем LiveView, а хидеру, который торчит в виде компонента в лейауте.
ну так и не надо юзера во всех lv проверять, можно в layout рисовать @inner_content только если есть user_id. в роутере в основном пайплайне
    plug :put_root_layout, {AppWeb.LayoutView, :root}

в root.html.leex @conn доступен
источник

Е

Евгений in pro.elixir
Alexey Novoselov
ну так и не надо юзера во всех lv проверять, можно в layout рисовать @inner_content только если есть user_id. в роутере в основном пайплайне
    plug :put_root_layout, {AppWeb.LayoutView, :root}

в root.html.leex @conn доступен
Ничего не понял, но ладно :)
источник

LL

Lama Lover in pro.elixir
(fun () -> ())
А в Эликсире есть массивы?
Есть
источник

LL

Lama Lover in pro.elixir
Например, если всегд использовать только последнюю версию массива, то сойдёт и тупл
Если хочется использовать массив персистентно, то есть :array
Если хочется нечисто шарить между процессами, то лучше использовать :ets
источник

AN

Alexey Novoselov in pro.elixir
Евгений
Ничего не понял, но ладно :)
@conn в руте есть, можно один раз там проверить, можно сделать как-то так:
<!DOCTYPE html>
<html lang=get_lang(assigns[:user_id])>
<head>
...
 <%= csrf_meta_tag() %>
...
</head>

<body>
 <%= if assigns[:user_id] do %>
 <%= @inner_content %>
 <% else %>
 <%= render(AppWeb.LoginView, conn: @conn) %>
 <% end %>
</body>

</html>
источник

Е

Евгений in pro.elixir
Alexey Novoselov
@conn в руте есть, можно один раз там проверить, можно сделать как-то так:
<!DOCTYPE html>
<html lang=get_lang(assigns[:user_id])>
<head>
...
 <%= csrf_meta_tag() %>
...
</head>

<body>
 <%= if assigns[:user_id] do %>
 <%= @inner_content %>
 <% else %>
 <%= render(AppWeb.LoginView, conn: @conn) %>
 <% end %>
</body>

</html>
Там не только авторизация. Есть некие данные юзера, которые могут динамически меняться, поэтому он должен быть в LiveView
источник

Е

Евгений in pro.elixir
Отображаются в хидере
источник

B

Bogdan in pro.elixir
А ошибка не вылетит если эти данные забудешь ?
источник

Е

Евгений in pro.elixir
Я думал делать хидер компонентом или отдельным LiveView, пока компонент, но я еще не определился, если честно.
источник

AN

Alexey Novoselov in pro.elixir
Евгений
Там не только авторизация. Есть некие данные юзера, которые могут динамически меняться, поэтому он должен быть в LiveView
ну так в хидере их и рисуй, зачем во всех lv то?
источник

Е

Евгений in pro.elixir
Alexey Novoselov
ну так в хидере их и рисуй, зачем во всех lv то?
Хмдер не в руте а в live.html.leex, соответственно во всех lv нужно доставать пользователя по id юзера сессии.
источник

Е

Евгений in pro.elixir
Компоненты не умеют обрабатывать сессию.
источник

AN

Alexey Novoselov in pro.elixir
Евгений
Хмдер не в руте а в live.html.leex, соответственно во всех lv нужно доставать пользователя по id юзера сессии.
так сделай его в руте:
```
<!DOCTYPE html>
<html lang=get_lang(assigns[:user_id])>
<head>
...
 <%= csrf_meta_tag() %>
...
</head>

<body>
 <%= if assigns[:user_id] do %>
 <%= render(AppWeb.HeaderView, conn: @conn) %>
 <%= @inner_content %>
 <% else %>
 <%= render(AppWeb.LoginView, conn: @conn) %>
 <% end %>
</body>

</html>
```
источник

Е

Евгений in pro.elixir
Alexey Novoselov
так сделай его в руте:
```
<!DOCTYPE html>
<html lang=get_lang(assigns[:user_id])>
<head>
...
 <%= csrf_meta_tag() %>
...
</head>

<body>
 <%= if assigns[:user_id] do %>
 <%= render(AppWeb.HeaderView, conn: @conn) %>
 <%= @inner_content %>
 <% else %>
 <%= render(AppWeb.LoginView, conn: @conn) %>
 <% end %>
</body>

</html>
```
Отдельным LiveView?
источник

AN

Alexey Novoselov in pro.elixir
Евгений
Отдельным LiveView?
а почему нет? если тебе эти данные в других lv не нжны
источник

Е

Евгений in pro.elixir
Alexey Novoselov
а почему нет? если тебе эти данные в других lv не нжны
Беда еще в том, что хидеру нужены еще URI и параметры запроса, а они доступны только из одного lv на странице.
источник

AN

Alexey Novoselov in pro.elixir
Евгений
Беда еще в том, что хидеру нужены еще URI и параметры запроса, а они доступны только из одного lv на странице.
в @conn тоже есть, если ты его передашь
источник

Е

Евгений in pro.elixir
Alexey Novoselov
в @conn тоже есть, если ты его передашь
недостаточно, так как URI и параметры могут меняться в результате live_redirect и live_patch
источник