@driverx18

Почему если в урле есть гет параметр с массивом, то роутит в непонятное место?

Заметил, что если в гет параметре есть данные, например:
?method=check&params[account]=test

То отдается эксешпн с месседжом: Array to string conversion.
Если же убрать [account], то всё ок.
Мне кажется, что оно просто роутит в непонятное место и виноват nginx.
Прилагаю конфиг nginx:
server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

server {
	listen 443 ssl;
	index index.php index.html;
	root /var/www/public;                                      
	ssl_certificate /etc/nginx/certs/your_domain.crt;
	ssl_certificate_key /etc/nginx/certs/rsa.key;
	server_name domain.domain;
	location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
	location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }	
}

Но не исключаю также, что возможно это где то в ларавеле что-то не так, и я чего то не знаю :)
Может я не правильно прописал роут?
Route::match(['get', 'post'], '/check', 'TestController@handle');
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 2
l3ftoverz
@l3ftoverz
Люблю Финский металкор
Ошибка говорит о том, что где-то в коде идёт вызов чего-то как строки, а это что-то - массив.
Проблема в PHP и говяном роутинге.

Роутер достаёт params и работает как со строкой, но PHP преобразовывает подобные GET параметры, автоматически превращая их в массив.
Ответ написан
bltr
@bltr
Любитель
При чем тут роуты вообще?
param=test;
тут при обработке запроса создается переменная $param со значением 'test'
param[account]=test;
тут создается переменная $param со значением array('account' => 'test')
Далее где-то в твоем коде используется эта переменная как строка и вылетает ошибка " Array to string conversion". Происходит это скорее всего именно в твоем коде, поскольку фреймворку незачем трогать твои параметры. Его задача доставить тебе их.
И вообще, когда вылетает ошибка - первый вопрос который у тебе должен возникать - где? ответ на него дает сам вывод ошибки- см. stack trase. Как определися "где", разбираешься "что происходит"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Риверстарт Нижний Новгород
от 60 000 до 150 000 руб.
Amigoweb Магнитогорск
от 50 000 до 70 000 руб.
21 нояб. 2019, в 10:21
140000 руб./за проект
21 нояб. 2019, в 09:33
500 руб./за проект
21 нояб. 2019, в 09:12
3001 руб./за проект