• Как передать в компонент Vue JS данные из PHP?

    @D3lphi
    Да все достаточно просто:

    <template>
        <div>
            <!-- Вызываем вычисляемое свойство -->
            {{ decodedData }}
        <div>
    </template>
    
    <script>
    export default {
        // Входной параметр, через который компонент будет принимать данные в JSON представление.
        props: ['dataFromPhp '],
        computed: {
            // Вычисляемое свойство, которое будет преобразовывать данные из JSON в объект js.
            decodedData() {
                return JSON.parse(this.dataFromPhp );
            }
        }
    }
    </script>


    Код, в котором используется этот компонент:
    <example-component data-from-php="<?= json_encode($data) ?>"></example-component>
    Ответ написан
    1 комментарий
  • Как передать в компонент Vue JS данные из PHP?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    Как это делается на Vue JS? Заранее спасибо
    Не могу обозначить своё мнение, как хоть сколь нибудь экспертное, но в целом, в JS'е (любом, клиентском, связка с серверной частью) обычно это делается одним из двух вариантов:
    1. Отправляете запрос на сервер (AJAX например) - получаете данные
    2. Рендерите данные прямо в странице, в <script>'e, например, что-то вроде: var a = 100; //Генерируется в PHP

    Я обычно использую и тот и другой, от случая к случаю. Второй вариант, не так красив как первый, за то на 99.999% исключены "задержки", прогрузки дополнительные, -1 запрос к серверу и т.д.

    P.S. Есть ещё разные "крайние" варианты, вроде записи/чтения кук, работа через веб-сокеты и масса других, я привёл самые простые и наиболее распространенные.
    Ответ написан
    Комментировать
  • Есть ли смысл устанавливать Webpack и Node JS для разработки на Vue JS?

    NodeJS и webpack ставятся как dev-dependencies, то есть они нужны только во время разработки. Ставить их на сервер не нужно.
    Ответ написан
    2 комментария
  • Как в PHP реализовать схему: несколько поддоменов - один движок - к каждому поддомену своя база данных?

    vesper-bot
    @vesper-bot
    Любитель файрволлов
    Запихать весь движок в папку скажем core, а в vhost'ах её алиасить на один и тот же физический путь. В итоге конфиги у каждого поддомена свои, а движок общий.
    Ответ написан
    Комментировать
  • Как в PHP реализовать схему: несколько поддоменов - один движок - к каждому поддомену своя база данных?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Если субдоменов ограниченное и не увеличивающееся количество - добавляете субдомены, прописываете им папку движка как документ рут, в движке определяете какой поддомен загружен(по урл), грузите соответствующие настройки бд.
    Для "пакетного" добавления - cname на основной домен (маска *.domen.tld), в апаче прописать надо поддоменные алиасы, точно не помню строчку, легко ищется гуглом. База так же грузится в зависимости от поддомена, ну тут уже логику сами придумывайте, по поддомену префикс делать там например..
    Ответ написан
    Комментировать
  • Почему при установке каких-либо библиотек требуют, чтобы я скачал через npm или bower?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    необходимо сначала устанавливать какую-то npm, чтобы он скачал мне, например, react.min.js, angular.min.js и положил в папку node_modules?

    Вообще говоря минимизированные файлы, как правило, можно свободно скачать руками, заходим на github проекта в вкладочку releases, и вытягиваем минифицированный файл.

    Зачем столько геморроя? Почему усложнили?

    У вас очень своеобразное понятие об геморрое и сложностях. Что бы установить тот же react достаточно выполнить
    npm i react

    Мне было бы проще зайти на оф.сайт, взять оттуда какой-нибудь javascript-библиотеку и через script src="path" загнать в веб-страницу.

    Кто запрещает то?)) Заходишь на оф. гитхаб/сайт и качаешь.

    Там уже нет такого способа, простого.

    Брехня!

    Или убедите меня пожалуйста, что менеджер-пакетов мне полезен и нужен.

    Да не вопрос, минифицируйте исходники вашего фронта. Только так, что бы этот процесс был автоматизирован, переносим и с максимально простой установкой.
    Ответ написан
    Комментировать
  • Как в PDO значение LIMIT при запросе сделать INT?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хороший вопрос. Как раз показывает убогость стандартной системы плейсхолдеров.
    В моей библиотеке для работы c MySQL тип указывается самым простым и эффективным способом - прямо в плейсхолдере:
    //первый запрос (лимит здесь не нужен)
    $id = $db->getOne("SELECT id FROM users WHERE mail = ?s AND pass = ?s", $mail, $pass);
    // второй запрос
    $sql  = "SELECT id, name FROM news WHERE category = ?s AND subcategory = ?s LIMIT ?i";
    $news = $db->getIndCol('id', $sql, $cat, $subcat, $limit);

    Как видно из этих примеров, тип ставится в самом плейсхолдере и все входящие данные обрабатываются корректно.

    Вернемся теперь к несчастному PDO.
    Цикл с подстановкой в bindParam?

    Цикл, увы, не поможет. Потому что мы не знаем, какой тип использовать для привязки. То есть, все сведется к дефолтному PARAM_STR и в итоге мы получим то же самое execute() с массивом, только в профиль.
    Если вдруг возникнет идея определять тип по составу переменной, то делать это НИ В КОЕМ СЛУЧАЕ НЕЛЬЗЯ. Если бы мог, я бы выделил ещё большим шрифтом и красным цветом. Потому что практически каждый продвинутый пользователь похапе рано или поздно наступает на эти грабли. Если число, хранящееся в MySQL, всегда можно безопасно сравнивать со строкой, то наоборот - это будет катастрофа: MySQL будет пытаться привести содержимое поля к числу. То есть, если взять пример из вопроса, и пытаться определить тип привязки по содержимому переменной, то при введенном пароле 12345 ctype_digit() скажет нам использовать INT и в итоге пароль 12345 подойдет к любому паролю вида "12345буквы".
    Так что цикл - не вариант.

    Я читал, что можно еще отключить режим эмуляции, но я не знаю, как это повлияет на безопасность

    Режим эмуляции на безопасность не влияет. Некоторые неграмотные разработчики считают, что отключение режима эмуляции повышает безопасность, но это неправда. В обоих вариантах PDO работает одинаково безопасно.
    В любом случае, отключение эмуляции действительно решает проблему. Так что в данном случае это будет самое простое решение.

    Так что либо в параметрах DSN, либо с помощью
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

    отключаем эмуляцию и наслаждается лимитом (правда, в этом случае перестанет работать такая фича, как несколько именованных плейсхолдеров с одним и тем же именем, но тут уж приходится выбирать).

    И последнее замечание.
    Функцию для выполнения запросов писать в общем-то нет смысла. PDO достаточно лаконичен и сам по себе. Единственное, что мешает писать однострочники - это дурацкая execute(), которая возвращает не себя, а булево значение. Но это легко исправить, и в итоге код получится ненамного длиннее, чем при вызове функции, но гораздо более гибким (ненавижу скроллинг, поэтому выношу параметры на другие строчки):
    // с функцией
    $sql   = 'SELECT `user_pass` FROM `users` WHERE `user_mail` = :mail LIMIT :lim';
    $param = array(':mail' => 'vlad-dub1994@mail.ru', ':lim' => 1);
    $data  = select($sql,$data);
    // с патченым PDO
    $data = DB::prepare($sql)->execute($data)->fetch();
    
    // или другой вариант записи
    $data = DB::prepare('SELECT user_pass FROM users WHERE user_mail = :mail LIMIT :lim')
    	->execute([':mail' => 'vlad-dub1994@mail.ru', ':lim' => 1])
    	->fetch();

    Всего на пару слов больше, но зато можно исполнять любые запросы (INSERT к примеру):
    $sql   = 'INSERT INTO users VALUES(?,?,?)';
    $param = array(NULL, 'vlad-dub1994@mail.ru', 'pass');
    DB::prepare($sql)->execute($data); //OK
    select($sql,$data); // ошибка из-за fetch()

    и использовать любые варианты получения данных, которые поддерживает PDO:
    $sql = 'SELECT id FROM tree WHERE parent_id=?';
    $subcat = DB::prepare($sql)->execute([$parent])->fetchAll(PDO::FETCH_COLUMN);
    Ответ написан
    1 комментарий