Вызов собственной функции php в js

Главные вкладки

Аватар пользователя pingvin156 pingvin156 23 апреля 2017 в 22:03

Помогите, пожалуйста, разобраться с вопросом. Как можно написать функцию в модуле, а потом вызвать ее в js?
Например, есть функция перевода t(..), которая в js используется вызовом Drupal.t(..).

P.S. Знаю, что можно вызывать код php через ajax, но метод мне не подходит.

Комментарии

Аватар пользователя bumble bumble 23 апреля 2017 в 22:16

pingvin156 wrote:

P.S. Знаю, что можно вызывать код php через ajax, но метод мне не подходит.

Жаль, другого выхода нет - php в js не выполняется.
Можете написать аналог ф-ции в JS-файле, и к ней уже обращаться.

Аватар пользователя pingvin156 pingvin156 24 апреля 2017 в 12:55

Проблема в том, что как раз реализацию и параметры функции надо скрыть в целях безопасности. Если писать через ajax, то придется передавать ид пользователя, то явная дырка в безопасности. А так функция должна вносить правки в БД...

Аватар пользователя bumble bumble 24 апреля 2017 в 13:17

pingvin156 wrote:

ид пользователя, то явная дырка в безопасности

Почему?

pingvin156 wrote:

А так функция должна вносить правки в БД...

Как Вы представляете себе соединение с БД сервера из клиента?

Аватар пользователя pingvin156 pingvin156 24 апреля 2017 в 13:58

bumble wrote:

pingvin156 написал:

ид пользователя, то явная дырка в безопасности

Почему?

pingvin156 написал:

А так функция должна вносить правки в БД...

Как Вы представляете себе соединение с БД сервера из клиента?


Если бы в ajax можно было бы вычислить ид юзера, то все было бы хорошо, но он выполняется в иной сессии, то есть вычислить ИД юзера не представляется возможным, поэтому выходом является передача параметров. Всегда можно подставить параметр в js ИД другого юзера, что приведет к правке данных не у текущего. Вот такая лазейка...

Представляю правку бд через функцию в php, которую и хочу вызывать (по аналогии с функцией Drupal.t). Она-то выполняется всегда в сессии пользователя.

Аватар пользователя pingvin156 pingvin156 24 апреля 2017 в 14:22

Возможно, я чего-то еще сам не понимаю, т.к. всего 2 месяца в этом варюсь и это мой первый сайт... Как эти хедеры получить в вызываемом php-файле?..

Я вот чего смог наварить:


<?php
    
use Drupal\Core\DrupalKernel;
    use 
Drupal\Core\Database\Connection;
    use 
Symfony\Component\HttpFoundation\Request;
    
    use 
Drupal\Core\Session\AccountInterface;
    
    
$autoloader = require_once 'autoload.php';

    

$kernel DrupalKernel::createFromRequest(Request::createFromGlobals(), $autoloader'prod');
    
$kernel->boot();
        
    
$useruid =  \Drupal::currentUser()->id(); /* тупо всегда = 0, т.к. новая сессия и неавторизированный юзер!*/
    
if (!empty($_GET['uid'])) {
        
$useruid $_GET['uid'];
    }
    
    
/* бла-бла-бла.. формируем массив данных $arr по $useruid ! */

    

$kernel->shutdown();
    
    echo 
json_encode($arr);
?>
Аватар пользователя bumble bumble 24 апреля 2017 в 14:24
1

pingvin156 wrote:

Всегда можно подставить параметр в js ИД другого юзера, что приведет к правке данных не у текущего. Вот такая лазейка...

Только если бездумно писать в базу.

Используйте токен для проверки.

Посмотрите аякс-команды, на них все можно реализовать, а о безопасности будет беспокоится движок.