Size: a a a

2020 August 21

AM

Alexander Makarov in Yii Framework 3
Dmitriy S
yii-web > yii-web-app > web-приложения
yii-web > yii-rest> api-приложения
Не... И вообще там issue есть с решениями на эту тему...
источник

DS

Dmitriy S in Yii Framework 3
Alexander Makarov
Не... И вообще там issue есть с решениями на эту тему...
В каком именно?
источник

СП

Сергей Предводителев... in Yii Framework 3
источник

СП

Сергей Предводителев... in Yii Framework 3
Раз всё равно планируется сдувать yii-web...

Вот так норм для текущего момента?

1) Сделать пакет yii-csrf
Зависит от yii-web (для сессий)
Содержит CsrfTokenInterface, CsrfToken и CsrfMiddlware

2) В yii-view добавить зависимость от yii-csrf (и от yii-web по цепочке) для CsrfViewInjection
источник

DS

Dmitriy S in Yii Framework 3
Ну вот, сессии и куки решили вынести, тогда норм вариант c yii-csrf
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Раз всё равно планируется сдувать yii-web...

Вот так норм для текущего момента?

1) Сделать пакет yii-csrf
Зависит от yii-web (для сессий)
Содержит CsrfTokenInterface, CsrfToken и CsrfMiddlware

2) В yii-view добавить зависимость от yii-csrf (и от yii-web по цепочке) для CsrfViewInjection
session в отдельном пакете будут, так что не будет зависеть от yii-web
источник

СП

Сергей Предводителев... in Yii Framework 3
Да, это когда вынесем сессии, можно будет зависимость от yii-web заменить на зависимость от сессий
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Если вынести интерфейс в отдельный пакет, а в CsrfMiddleware использовать setToken вместо withAttribute, то все требования по независимости пакетов друг от друга будут соблюдены
И уже в CsrfToken делать $request->withAttribute($this->requestName, $token); ?
источник

NO

Nex Otaku in Yii Framework 3
Если интерфейсом закрывается внешняя зависимость, то он должен быть в зависимом пакете. (см DIP)

Если интерфейс является частью API пакета, то он должен быть там же где реализация.

Нужно просто различать эти кейсы и будет понятно, куда положить интерфейс.
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
И уже в CsrfToken делать $request->withAttribute($this->requestName, $token); ?
setToken
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
setToken
вот внутри setToken что будет?
вот это:  $request->withAttribute($this->requestName, $token); ?
источник

СП

Сергей Предводителев... in Yii Framework 3
В реализации имею в виду
источник

DS

Dmitriy S in Yii Framework 3
Nex Otaku
Если интерфейсом закрывается внешняя зависимость, то он должен быть в зависимом пакете. (см DIP)

Если интерфейс является частью API пакета, то он должен быть там же где реализация.

Нужно просто различать эти кейсы и будет понятно, куда положить интерфейс.
Ну-ну, расскажи где должен быть SessionInterface
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
вот внутри setToken что будет?
вот это:  $request->withAttribute($this->requestName, $token); ?
Вместо этого $csrf->setToken()
источник

DS

Dmitriy S in Yii Framework 3
Dmitriy S
В CsrfMiddleware в конструкторе получаешь CsrfTokenInterface и делаешь $csrf->setToken(...).
Теперь токен доступен в контейнере
вот
источник

СП

Сергей Предводителев... in Yii Framework 3
А... то есть в реквесте вообще не будем хранить токен. Он будет доступен из CsrfTokenInterface
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
А... то есть в реквесте вообще не будем хранить токен. Он будет доступен из CsrfTokenInterface
да
источник

СП

Сергей Предводителев... in Yii Framework 3
Осознал :)
источник

DS

Dmitriy S in Yii Framework 3
Если мы не хотим использовать ViewRenderer, то мы можем прямо в экшине молучить токен и передать параметром
public viewAction(CsrfTokenInterface $csrf) 
{
    $this->view->render('view', ['_csrf' => $csrf->getToken()])
}
источник

СП

Сергей Предводителев... in Yii Framework 3
Да, я понял
источник