• Как правильно задавать пространства имен?

    logpol32
    @logpol32 Автор вопроса
    Сергей delphinpro,
    Тут говорится, что неймспейс Junior\classes расположен в папке classes.
    Неймспейс вообще может быть любым.

    Вы имели ввиду, что мы можем написать его любым?
    Это понятно, что мы не обязаны ориентироваться на структуру каталогов.
    Но, для корректной работы, неймспейс в json и в указанной папке (php файлах в этой папке) должны совпадать.

    Ничего странного, и логики тут вашей нет.

    Спасибо, идею понял - но всё равно логика и архитектурное решение странное.
    Пишем кучу классов и инклудим всё в автолоад.
    Автолоад подключаем во все файлы (или в индекс).

    В десктопных языках подключаются только те классы, пространства, которые нужны.
    И тот же Visual Studio автоматически выделяет серым не используемые пространства имен и не включает их при сборке.

    И всё это даже не компилируется (там промежуточный язык и своя виртуальная машина), а вынесено в отдельный фреймворк (.NET). В результате приложение получается быстрым (ничего лишнего не загружается) и компактным (20-50 килобайт).

    До композера, в PHP, я просто инклудил что нужно, куда нужно.
    В PHP, как я понял, мы просто собираем всё в кучу чтобы не "заморачиваться" с инклудами - у нас заинклужено всё, осталось для доступа прописать неймспейс, который часто един для всех файлов в одной папке...
  • Как правильно задавать пространства имен?

    logpol32
    @logpol32 Автор вопроса
    Сергей delphinpro, спасибо, посмотрел - код работает.
    А что это значит? То что в php файлах, в папке classes обязательно присутствует namespace Junior\classes;?
    "Junior\\classes\\": "classes"

    А если (ну а вдруг) в папке classes1 (за которую отвечает другой разраб) будет namespace Vasya\classes1;
    то вручную прописывать в composer/json
    "Vasya\\classes1\\": "classes1"
    ?

    И странно, что в index.php нет неймспейса namespace Junior; (по логике должен же быть т.к. он корневой элемент нашего сайта)
  • Как правильно задавать пространства имен?

    logpol32
    @logpol32 Автор вопроса
    Про композер тоже не достаточно хорошо понимаю (гуглил, читал, смотрел ролики и т.д.).
    Зачем его везде используют?

    Я перехожу с десктопных языков - там всё подключается через пространства имен или автоматически или руками.
    И ничего страшного писать в С++ #include
    Или в c# using System;

    А вот код
    spl_autoload_register(function ($class_name) {
        include $class_name . '.php';
    });

    не достаточно потнятен. Что там подключают?
    И программист думает, ищет аргумент переданный в функцию и потом понимает, что было подключено.
  • Как правильно задавать пространства имен?

    logpol32
    @logpol32 Автор вопроса
    Сергей delphinpro, как я понял из доков вот он

    use \Junior\classes\myclass as myclass;
    Конструкция use импортирует класс из другого пространства имен, а оператор as устанавливает для него псевдоним.

    Я без понятия, что тут имели ввиду и как это работает.

    Раньше писал так
    include __DIR__./'classes/myclass.php';

    Про автозагрузчик идею понял (инклудим файлы php, в которых содержаться одноименные классы)
    spl_autoload_register(function ($class_name) {
        include $class_name . '.php';
    });

    Но как использовать её в рабочем примере пока не знаю.
    Как, где она вызывается?
  • Как передать данные из потока в richTextBox?

    logpol32
    @logpol32 Автор вопроса
    Voland69, спасибо, теперь работает.
  • Как передать данные из потока в richTextBox?

    logpol32
    @logpol32 Автор вопроса
    Voland69,
    Евгений Иванов, странно, должен быть там же

    Загуглил. Ошибка исчезла когда я добавил:
    using System.Windows.Threading;
    вместе со ссылкой на WindowsBase

    Теперь ругается на Dispatcher.Invoke

    // Для нестатического поля, метода или свойства "Dispatcher.Invoke(Action)" требуется ссылка на объект.	
    Dispatcher.Invoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname));
  • Как передать данные из потока в richTextBox?

    logpol32
    @logpol32 Автор вопроса
    Voland69,

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.DirectoryServices;
    using System.Diagnostics;
    using System.IO;
    using ExcelDataReader;
    using System.Threading;
    using System.Windows.Threading; // Тип или имя пространства имен "Threading" не существует в пространстве имен "System.Windows" (возможно, отсутствует ссылка на сборку).


    .NET 4.5 если что.
    Использую эту версию т.к. она гарантировано идет (установлена по умолчанию) с Win 8 и выше.
  • Как передать данные из потока в richTextBox?

    logpol32
    @logpol32 Автор вопроса
    Voland69, Dispatcher не существует в текущем контексте.
    (разумеется using System.Threading; подключено)
    using System.Threading;
    
    namespace WindowsFormsApp1
    {
    
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    
       
    private void Button1_Click(object sender, EventArgs e)
    {
    //..
    Users.onUserAdd += (userSurname) =>
    {
    Dispatcher.Invoke(() => richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname)); // Dispatcher не существует в текущем контексте.
    };
  • Как передать данные из потока в richTextBox?

    logpol32
    @logpol32 Автор вопроса
    Voland69, Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'richTextBox1' не из того потока, в котором он был создан.

    public partial class Form1 : Form
    {
    //.......
    private void Button1_Click(object sender, EventArgs e)
    {
    string data1= TextBox1.Text;
    string data2= TextBox2.Text;
    
    
    Users.onUserAdd += (userSurname) =>
    {
    richTextBox1.AppendText(Environment.NewLine + "Фамилия=" + userSurname); // Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'richTextBox1' не из того потока, в котором он был создан.
    };
    
    
    
    // Сообщаем метод Add с потоком и запускаем поток.
    new Thread(() => Users.Add(data1, data2)).Start();
    
    }
    }
    
    
    
    public class Users
    {
    public delegate void UserData(string userSurname);
    public static event UserData onUserAdd; // Сделал статик
    
    public static void AddUsers(string data1, string data1)
    {
    // Тут код добавления пользователя.
    
    //  Вывод фамилии добавленного пользователя в текстовое поле.
    // Ошибка Для нестатического поля, метода или свойства "Users.onUserAdd" требуется ссылка на объект.
    onUserAdd(userSurname);  //упадет если никто не подписался 
    onUserAdd?.Invoke(userSurname); //не упадет если никто не подписался
    }
  • Как передать данные из потока в richTextBox?

    logpol32
    @logpol32 Автор вопроса
    в классе Users объявляем делегат и событие
    - ясно.
    и ниже по тексту вызываем наше событие кодом следующего вида
    - написал этот код в методе, сообщаемом с потоком.

    Voland69,
    а в форме перед запуском треда назначаем обработчик
    - не понял, куда писать этот код.

    public partial class Form1 : Form
    {
    //.......
    private void Button1_Click(object sender, EventArgs e)
    {
    string data1= TextBox1.Text;
    string data2= TextBox2.Text;
    // Сообщаем метод Add с потоком и запускаем поток.
    new Thread(() => Users.Add(data1, data2)).Start();
    
    }
    }
    
    public class Users
    {
    public delegate void UserData(string userSurname);
    public event UserData onUserAdd;
    
    public static void AddUsers(string data1, string data1)
    {
    // Тут код добавления пользователя.
    
    //  Вывод фамилии добавленного пользователя в текстовое поле.
    // Ошибка Для нестатического поля, метода или свойства "Users.onUserAdd" требуется ссылка на объект.
    onUserAdd(userSurname);  //упадет если никто не подписался 
    onUserAdd?.Invoke(userSurname); //не упадет если никто не подписался
    }
  • Как передать данные из потока в richTextBox?

    logpol32
    @logpol32 Автор вопроса
    Так я понимаю, что это 2 разных потока.
    В этом и вопрос - как это сделать?
  • Как на PHP послать ссылку в мессенджер?

    logpol32
    @logpol32 Автор вопроса
    Юэер должен первый начать беседу с ботом, и тогда ты сможешь получить этот чат айди

    Как бот передаст мне чат id? Где он его сохранит?
  • Как на PHP послать ссылку в мессенджер?

    logpol32
    @logpol32 Автор вопроса
    rundll32, я не могу послать сообщение по нику пользователя. Я не знаю его идентификатор.
    Я могу послать сообщение своему боту.

    И вот это
    'chat_id' => 'the_chat_id_here'
    Что означает чат айди? Где его брать?
  • Как в чужой программе заполнить поля нужными значениями?

    logpol32
    @logpol32 Автор вопроса
    Hemul GM, я этого и не говорил.
    Моя идея была "обернуть" Profwiz.exe, управлять им из OLE, подобно Excel или как то ещё.
  • Как в чужой программе заполнить поля нужными значениями?

    logpol32
    @logpol32 Автор вопроса
    Hemul GM, не работает - не видит профили.
    626b77dbe4fcc361803012.jpeg
    Оригинал видит профили.
  • Как в чужой программе заполнить поля нужными значениями?

    logpol32
    @logpol32 Автор вопроса
    Hemul GM, программа Profwiz.exe.
    Я хочу автоматизировать процесс переноса учеток.
    На втором шаге, в поле имя домена, должен уже быть введен мой домен.
    626b71b912585534818580.jpeg
    На четвертом шаге должны быть введены имя админа и пароль
    626b72d8665fc510368304.jpeg

    Я легко нахожу эти формы в редакторах, заполняю их компилирую и ... отредактированный/откомпилированный Profwiz.exe на этапе ввода логина админа и пароля вылетает, без каких либо ошибок.

    Вот архив с самой программой и кучей редакторов (Reshacker и т.д.)
    https://cloud.mail.ru/public/cKAu/CYCbJ5E7p
  • Почему приложение не видит БД?

    logpol32
    @logpol32 Автор вопроса
    Александр Карабанов, спасибо, сделал - заработало.

    Я правильно понимаю, что образ- это грубо говоря CD диск с Windows.
    Мы его можем получить или сами создать, дополнить драйверами, софтом.
    А контейнер - это как установленная ОС на компьютер?
    Мы ставим ОС с образа и потом там что то меняем, настраиваем сеть и т.д в нашей системе/контейнере?

    У меня было 2 контейнера, один из которых был не связан с сетью. И я не смог соединить его с сетью.
    Заново запустить их командами выше не получилось (docker run).
    container" is already in use by container "45c2...". You have to remove (or rename) that container to be able to reuse that name.

    Итого пришлось удалить контейнер не связанный с сетью и заново запустить его.
    Наверно можно было сделать иначе...
  • Почему приложение не видит БД?

    logpol32
    @logpol32 Автор вопроса
    Александр Карабанов,
    И зачем такие сложности?

    Потому что я только изучаю докер. В примере так показали и у них заработало. У меня нет.
    Мне пока надо, чтобы хоть как то работало.
  • Почему приложение не видит БД?

    logpol32
    @logpol32 Автор вопроса
    Александр Карабанов,
    У тебя контейнер с MySQL подключен к сети site-app-network, а контейнер с PHP подключен к дефолтной сети.

    Почему?

    Из кода выше
    docker run -d -p 80:80 -v C:/DATA/OpenServer/domains/site.local/DOCKER/app:/var/www/app --name=site-app-container site-app
    docker network create -d bridge site-app-network

    bridge site-app-network

    docker run -d -p 3306:3306 -v $(pwd)/.data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Pass0312345 --network=site-app-network --name=site-mysql mysql:5.7.24

    --network=site-app-network
  • Почему приложение не видит БД?

    logpol32
    @logpol32 Автор вопроса
    Александр Карабанов,
    из bash внутри контейнера?

    Да. Могу войти под root.
    winpty docker exec -it techmap3-mysql bash 
    mysql -u root -pPass0312345

    Создал нового пользователя sqladmin - выдал ему все права на всё. flush (как обычно)
    Вошел под ним, всё создал - везде есть доступ.

    Проверил соединение с БД из сторонних программ:
    Navicat и MysqlWorkbench законнектились с localhost под root.
    Navicat и MysqlWorkbench не законнектились с localhost под sqladmin (новый пользователь выше)
    Странно.

    Сайт (контейнер с php скриптами) не может соединиться с БД, ни под каким пользователем - ни под root ни под sqladmin.
    Сайт (контейнер с php скриптами) не может соединиться с БД, ни когда я указываю хост localhost, ни tеchmap3-mysql.