Отправлять запрос в контроллер через ajax, удаляя косые черты из пространства имен? - PullRequest
1 голос
/ 23 апреля 2020
onclick="loadInlineEditor({
                        class:'<?= get_class($content) ?>', 
                        model_id:<?= $content->id ?>,
                        attribute:'description'
                    })"

Выход для get_class($content) должен быть app\models\Page

Но внутри контроллера это appmodelsPage - это то, как я получаю его обратно, отправляя его как AJAX запрос

AJAX код: -

function loadInlineEditor(data) {
        $.ajax({
                url: '<?= Url::toRoute(["//url"]) ?>',
                type: 'POST',
                data: data,
                dataType: 'json'
            })

Код выхода: -

Array
(
    [class] => appmodelsPage
    [model_id] => 1
    [attribute] => description
)

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

Это не ajax, который удаляет косые черты. Это потому, что код js, сгенерированный php, выглядит следующим образом:

loadInlineEditor({
    class:'app\models\Page', 
    model_id: 1,
    attribute:'description'
})

Но символ \ (backsla sh) в строке JS используется в качестве escape-символа. Если вы хотите использовать backsla sh в строке JS, вы должны экранировать ее как \\.

. Для этого вы можете использовать либо функцию addslashes() php, либо json_encode()

onclick="loadInlineEditor({
    class:'<?= addslashes(get_class($content)) ?>', 
    model_id:<?= $content->id ?>,
    attribute:'description'
})"

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * "

onclick="loadInlineEditor({
    class:<?= json_encode(get_class($content)) ?>, 
    model_id:<?= $content->id ?>,
    attribute:'description'
})"
1 голос
/ 23 апреля 2020

Поскольку **** был escape-символами, поэтому вам нужно экранировать его перед сохранением его в свойствах класса.

Таким образом, ваш код становится:

onclick="loadInlineEditor({
                        class:'<?= addslashes(get_class($content)) ?>', 
                        model_id:<?= $content->id ?>,
                        attribute:'description'
                    })"

На самом деле добавление косой черты отправляет app \ models \ Page в свойства класса и сохраняет app \ models \ Page

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...