Заметки

Помочь в поиске ошибок при отправке в Laravel может следующее:

1. В настройках почты в файле ENV установить:

MAIL_DRIVER=log

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

2. Вывести данные конфигурации для отправки email:

dd(config('mail'));

Допустим, необходимо, чтобы по клику на ссылку происходило что-то иное, а не переход по ссылке. Или при клике на кнопку отправления формы форма не сразу отправлялась, а происходила какая-либо валидация.

Допустим, есть ссылка:

<a href="/link" id="example-link">Ссылка</a>

jQuery код, предотвращающий переход по ссылке:

$('#example-link').click(function(e) {
e.preventDefault();
//ваш код
});

  Ключевое тут - параметр e, который передается в функцию и строка  e.preventDefault();

Для того, чтобы поменять по какой колонке в DataTable будут по умолчанию сортироваться данные, необходимо при инициализации таблицы прописать параметр order:

$(document).ready(function() {
$('#mytable').DataTable( {
"order": [[ 2, "desc" ]]
} );
} );

2 - в данном случае означает порядковый номер колонки. Будьте внимательны - отсчет начинается с 0! 

desc - направление сортировки (еще можно использовать asc)

#mytable - id таблицы

Если у вас есть необходимость поменять дефолтные значения  sql-mode, но они после перезагрузки сервера не срабатывают - то убедитесь, что эту настройку вы вписали в секцию под заголовком 

[mysqld]

Если вы ее вставили в другом месте, то настройка не сработает. 

Если неправильно записать \ в запросе Laravel к базе, то можно не получить ожидаемого результата.

Дело в том, что \ - это символ экранирования, и поэтому чтобы все работало как задумано, необходима немного другая форма записи.

К примеру, нам необходимо получить модель из базы с типом App\Picture

Примерный код:

ModelName::where('type', 'like', 'App\\\\Picture')->get()

Как видно из кода выше, единичный слеш заменяется на 4: \\\\

Постановка проблемы: 

При работе с классом хочется знать, какие поля у этого класса имеются. Если брать Laravel класс, который расширяет Model, то не выйдет записать элементы класса (те, которые наполняются из базы)  с помощью привычных private / public / protected. Вернее, записать-то конечно можно, но автоматически заполняться и работать как ожидается они перестанут.

Решение - сделать описание класса с помощью @property 

При таком варианте ide будет видеть эти значения.

Пример: 


/**
* Class Post
* @property string name - название
* @property string text - текст
*/
class Post extends Model
{
...
}

Если в mySQL запросе вы столкнулись с проблемой “ORDER BY clause is not in GROUP BY clause and contains nonaggregated column” 

то  ее можно временно решить с помощью запроса к базе:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Это временное решение, при каждом запуске сервера команду нужно выполнять заново.  

Постоянное решение:

Прописать 

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

в my.ini   (или если там уже есть такая строка - удалить оттуда STRICT_TRANS_TABLES)

Для этого есть 2 команды. 

Если необходимо откатить все, а то что было в последнем коммите удалить, то подойдет команда: 

 git reset --hard HEAD~1

Если изменения последнего коммита все-таки нужно оставить (просто они будут в состоянии uncommited):

git reset --soft HEAD~1

Чтобы сохранить данные, приходящие из POST запроса в формате raw (без пар ключ-значение), можно воспользоваться таким кодом:

$myInfo = file_get_contents('php://input');

В данном примере все записалось в переменную $myInfo, затем ее содержимое можно обработать и записать в файл или в базу, если это будет необходимо. 

Иногда появляется необходимость напрямую обратиться в базу в Laravel, минуя Eloquent. 

Сделать это можно с помощью класса DB (не забудьте его импортировать):

DB::select('select * from pages where id = ?', array(1));
DB::insert('insert into pages (name) values (?)', array('test'));
DB::update('update ...');
DB::delete('delete from ...');

Часто необходимо вместе с GET / POST запросом отправить свои заголовки. 

Пример:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.mysite.ru/api.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//заголовки:
$headers = [
'testHeader: value',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: no-cache'
];

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close ($ch);

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

В Laravel валидация картинок происходит достаточно просто. 

Код-пример: 

    $data = $request->only('file');
$file = $data['file'];
$fileArray = array('image' => $file);
$maxSize = 1024; //kb

$allowedTypes = 'jpeg,jpg,png,gif';

//правила валидации:
$rules = array(
'image' => 'mimes:' . $allowedTypes . '|required|max:' . $maxSize
);

$validator = Validator::make($fileArray, $rules);

if ($validator->fails())
{
//если проверка не пройдена
} else
{
//проверка пройдена и можно сохранять картинку
};

Где:

$maxSize - максимальный “вес” картинки в килобайтах

$allowedTypes - через запятую можно указывать разрешенные расширения файлов. 

required - если картинка обязательна

Чтобы вычислить для строки хэш с форматом SHA256 в PHP нужно использовать функцию hash:

$myString = 'test';
$result = hash('sha256', $myString);

где 

$myString - строка, которую необходимо закодировать. 

Первый параметр, передаваемый в функцию hash - это алгоритм хеширования, он может быть и другим, к примеру "md5", "sha1", "haval160,4" и т.д. 

Узнать все доступные алгоритмы можно с помощью функции hash_algos()

Чтобы input в  html форме принимал только картинки, достаточно прописать это с помощью атрибута accept.

В данном случае перечислим все варианты вручную (удобно, когда нужно разрешить определенные форматы - лишние можете просто удалить из списка):  

<input type="file" name="example" 
accept="image/png, image/gif, image/jpeg" />

Есть более короткий вариант записи (удобно, когда можно использовать любые картинки):

<input type="file" name="example" accept="image/*" />

Не забудьте, что совместно с этим все равно необходима валидация!

С появлением телефона Xiaomi (Redmi note 9 Pro) появилась проблема - при попытке подключиться к любой публичной сети телефон к ней подключался, но не получалось открыть страницу авторизации. Чаще всего люди сталкиваются с этой проблемой в метро или в аэропорту. 

Существующие решения в сети ничего не дали. 

Методом проб и ошибок удалось решить эту проблему так:

  1. Подключитесь к Wi-fi свободной сети.
  2. Необходимо открыть настройки Wifi в телефоне (Настройки - Wi-fi).
  3. Далее необходимо нажать на кружок напротив выбранной сети, чтобы зайти в настройки:

...