Напомните v2

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Напомните v2

Сообщение Vlad__ » 03.08.2018 16:38

Делаю ajax запрос. В обычный файл php по $_POST все проходит нормально. Если же код php сделать в виде функции в классе с routing.yml
и services.yml, то передача данных типа $var = $request->variable('var', 0) почему-то не срабатывает. Может не там задаю переменные? Не совсем понимаю логику объектного программирования. Где можно взглянуть на примеры и должно ли это работать?

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9766
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 175 раз
Поблагодарили: 2721 раз

Re: Напомните v2

Сообщение Татьяна5 » 03.08.2018 16:51

POST'ом должно срабатывать
Там с GET переменными свои заморочки (т.к. которые через слеш перечисляются - не GET-переменные)

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: Напомните v2

Сообщение Vlad__ » 03.08.2018 18:54

Чисто РOST в форумном движке не работает. Для безопасности сделан request. Я наверное непонятно описал вопрос. Если сделать просто php файл, без привязки к форуму, то срабатывает обычным роst-ом. Если сделать php типа форумным (или как правильно) с классом, роутингом и сервисами, то для обработки и передачи данных только request, который у меня не получается сделать рабочим.

Аватара пользователя
Pazh
Former team member
Сообщения: 2194
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 41 раз
Поблагодарили: 454 раза

Re: Напомните v2

Сообщение Pazh » 03.08.2018 19:51

Vlad__ писал(а):
03.08.2018 16:38
$var = $request->variable('var', 0)
потому что должно быть как минимум $var = $this->request->variable('var', 0); и при этом в конструкторе нужно определить $var = $this->request
Откройте почти любое готовое расширение и гляньте как там прописан request в servise.yml, в контроллере и как все это вызывается из контроллера, который прописан в route.yml
форум ЖК Вестердам Помощь в ЛС/email только за WM или ЯД

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9766
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 175 раз
Поблагодарили: 2721 раз

Re: Напомните v2

Сообщение Татьяна5 » 03.08.2018 23:01

Vlad__ писал(а):
03.08.2018 18:54
request
Это те же самые get/post

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: Напомните v2

Сообщение Vlad__ » 03.08.2018 23:21

Pazh писал(а):
03.08.2018 19:51
должно быть как минимум
У меня все так и есть. Сокращенно просто написал без $this. Не работает. Вот мой совершенно примерный код:
В скрипте.

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

$.post("./test.php", {'login':'1111', 'password':'2222'},
        function(data) {
        $('#test').html(data);
        });
В пхп:

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

namespace ...\...\controller;

use Symfony\Component\HttpFoundation\Response;

class main
{
    protected $request;
    protected $db;
    protected $user;
    protected $table_prefix;

    public function __construct(\phpbb\request\request_interface $request, \phpbb\db\driver\driver_interface $db, \phpbb\user $user, $table_prefix)
    {
        $this->request = $request;
        $this->db = $db;
        $this->user = $user;
        $this->table_prefix = $table_prefix; 
    }

    public function test()
    { 
    $login=$this->request->variable('login', 0);
    $pass=$this->request->variable('password', 0);
    if($login=="1111" && $pass=="2222"){
        echo "Авторизация прошла успешно";
    }
    else{
        echo "Неверно введен логин или пароль";
    }
}

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9766
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 175 раз
Поблагодарили: 2721 раз

Re: Напомните v2

Сообщение Татьяна5 » 03.08.2018 23:54

namespace странный. Или расширение называется ...? (Точки могут привести не к тому, к чему хочется)

В services.yml и в routing.yml что у вас?

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: Напомните v2

Сообщение Vlad__ » 04.08.2018 0:23

Татьяна5 писал(а):
03.08.2018 23:54
namespace странный
То я так скрыл название ))
Дальше точки и ххх тоже сокрытие.
Татьяна5 писал(а):
03.08.2018 23:54
В services.yml и в routing.yml что у вас?

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

xxx.xxx.xxx:
        class: ...\...\controller\main
        arguments:
            - @request
            - @dbal.conn
            - @user
            - %core.table_prefix%

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

xxx.xxx.xxx:
    pattern: /test.php
    defaults: { _controller: xxx.xxx.xxx:test }

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9766
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 175 раз
Поблагодарили: 2721 раз

Re: Напомните v2

Сообщение Татьяна5 » 04.08.2018 0:53

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

xxx.xxx.xxx:
        class: ...\...\controller\main
        arguments:
            - '@request'
            - '@dbal.conn'
            - '@user'
            - '%core.table_prefix%'
(Иногда это имеет значение)

Отправлено спустя 1 час 19 минут 41 секунду:
Ещё причина может быть в том, что отправляется строка, а в php ожидается число (второй параметр 0)

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

    $login=$this->request->variable('login', '');
    $pass=$this->request->variable('password', '');
Отправлено спустя 1 минуту 54 секунды:
И как другие страницы расширений работают, без app.php в адресе?

Vlad__
phpBB 2.0.5
Сообщения: 450
Зарегистрирован: 10.12.2016 11:06
Благодарил (а): 251 раз
Поблагодарили: 41 раз

Re: Напомните v2

Сообщение Vlad__ » 04.08.2018 11:19

Татьяна5 писал(а):
04.08.2018 2:14
Ещё причина может быть в том, что отправляется строка, а в php ожидается число (второй параметр 0)
Менял и так и так. Эффекта нет.

Отправлено спустя 29 минут 44 секунды:
Все, допер! Всем спасибо! Забыл про return в контроллере.

Вернуться в «Для авторов»