Laravel functions

x
 
1
                                <?php
2
3
echo app()->version(); // узнать версию laravel
4
app()->environment('production'); // проверить среду на production
5
dump(['arr']); // debug
6
dd(['arr']); // debug and die
7
blank('is_empty'); // проверка на пустоту
8
filled('is_empty'); // если массив проверит на пустоту и элементы
9
10
// Экземпляр класса, если в конструктор надо передать параметры, то в массиве передать именованные параметры
11
$export = app()->make(Export::class, ['columns' => $columns, 'data' => $data]);
12
    
13
// Возвращаем вид и передаём в него переменные
14
return view('welcome', compact('test', 'test2'));
15
    
16
// Сохранить вид в переменную
17
$render = view('welcome')->render();
18
    
19
// Возвращает контент, со статусом 200 и определённым заголовком
20
return response('Content...', 200)
21
    ->header('Content-Type', 'text/plain');
22
   
23
// Возвращаем вид из файла
24
return view()->file($path_view);
25
26
// Передать в вид (aside) или виды данные ($leftMenu) из контроллера
27
$leftMenu = [1, 2, 3];
28
view()->composer('aside', function ($view) use ($leftMenu) { // '*' Для всех видов
29
    $view->with(compact('leftMenu'));
30
});
31
    
32
    
33
// Отдать на скачивание файл
34
return response()->download('/doc/text.txt', 'file_name.txt');
35
    
36
// Ответа json
37
return response()
38
   ->json([
39
       'name' => 'Ivan',
40
       'email' => 'ivan@mail.ru',
41
   ]);
42
    
43
44
abort('404', 'Не найден вид!' ); // Выбросить исключение
45
abort_if(!Auth::user()->isAdmin(), 403); // Выбросить HTTP-исключение, если заданное логическое выражение равно true
46
abort_unless(Auth::user()->isAdmin(), 403); // Если false
47
    
48
    
49
// Работа с объектами
50
$values = DB::table('table')->get();
51
$arr = [1, 2, 3];
52
$valuesObj = collect($arr); // Делаем из массива объект
53
54
// Пагинация из объекта
55
use Illuminate\Pagination\LengthAwarePaginator as Paginator;
56
$perPage = 20;
57
$currentPage = Paginator::resolveCurrentPage();
58
$currentPageItems = $valuesObj->slice(($currentPage - 1) * $perPage, $perPage)->all();
59
$values = new Paginator($currentPageItems, count($valuesObj), $perPage);
60
$values->setPath($request->url());
61
$values->appends($request->all());
62
63
$products = new Paginator($category->products, $category->products->count(), 20); // Пример использования
64
65
if(!empty($values) && method_exists($values, 'links')) {} // Проверить есть ли пагинация
66
67
// Разделить объект на части
68
$half = ceil($values->count() / 2);
69
$values1 = $values->slice(0, 5);
70
$values1->all();
71
72
73
// Пропустить 5 элеменотов объекта
74
$values2 = $values->skip(5);
75
$values2->all();
76
    
77
$values->isEmpty(); // Если пусто
78
$values->isNotEmpty(); // Если не пусто
79
$values->unguard(); // Разрешает редактирование всех полей БД
80
$values->fill($data); // Заполнить объект page данными
81
$values->toArray($data); // Объект в массив
82
$values->transform(function ($v, $k) { // Как цикл форич, поменять один элемент из множества
83
    $v->title = '...';
84
    return $v;
85
});
86
87
88
// Как in_array(), проверяет есть ли значение в объекте
89
$item->contains('contacts');
90
$page->contains('slug', 'contacts');
91
92
// Найти по значению в объекте
93
$item->search('value');
94
95
96
$collection->has('author'); // Использовать для проверки наличия ключа в коллекции
97
$items->push($product); // Добавить элеменент в конец
98
$items->put('product', $product); // Добавить элеменент с ключом
99
$item->prepend('product', $product); // Добавить в начало массива
100
101
// Удалить из коллекции
102
$collection->forget($key);
103
$newCollection = $collection->reject(function($item) {
104
    return $item->id == $id;
105
});
106
    
107
   
108
// Клонировать объект
109
$newValues = clone $values;
110
    
111
    
112
// Первый элемент массива
113
$first = head($arr);
114
    
115
// Последний элемент массива
116
$last = last($arr);
117
    
118
119
// Коллекция в цикле
120
$collection->each(function ($item, $key) {
121
    // Работаем с элементом
122
});
123
124
// Отладка коллекции
125
$collection->dump();
126
127
// В консоле вывести инфо из любого класса
128
resolve('console.output')->info('Кол-во ' . $i);
129
130
131
// Расширяем любой класс добавляя свои методы
132
\Illuminate\Support\Collection::macro('test', fn() => dump(1));
133
\Illuminate\Support\Collection::macro('test', function() {
134
    return 1;
135
});
136
$b = collect([1, 2])->test();
137
dump($b);
138
139
    
140
// Строки
141
$basename = class_basename($class); // App\Services\File получить File
142
e('<html>foo</html>'); // Выполнить над строкой htmlspecialchars
143
echo Str::lower('Привет Мир'); // к нижнему регистру
144
echo Str::upper('Привет Мир'); // к верхнему регистру
145
echo \Illuminate\Support\Str::ucfirst('привет мир'); // к первой заглавной букве
146
Str::camel('more_text'); // в camelCase
147
Str::studly('foo_bar'); // в StudlyCase
148
Str::snake('fooBar'); // Преобразовать строку в snake_case (стиль именования Си с подчёркиваниями вместо пробелов) - foo_bar
149
Str::kebab('fooBar'); // Преобразовать строку в snake-case (стиль именования Си с подчёркиваниями вместо пробелов) - foo-bar
150
Str::title('хороший заголовок'); // В стиль заголовка Title Case Хороший Заголовок
151
Str::ends_with('This is my name', 'name'); // Определить, заканчивается ли строка переданной подстрокой - true
152
Str::starts_with('This is my name', 'This'); // Определить, начинается ли строка с переданной подстроки - true
153
Str::contains('This is my name', 'my'); // Определить, содержит ли строка переданную подстроку, можно передать массив ['my', 'foo'] - true
154
Str::slug('Laravel 5 Framework', '-'); // Сгенерировать подходящую для URL «заготовку» из переданной строки laravel-5-framework
155
Str::limit('The PHP framework for web artisans.', 7); // Ограничить число символов в строке, в конце добавляет... длина
156
Str::str_random(40); // Создать последовательность случайных символов заданной длины
157
$class = class_basename('Foo\Bar\Baz'); // Baz
158
$one = Str::singular('models'); // model Приводит к единственному числу
159
$many = Str::plural('model'); // models Приводит к множественному числу
160
$matches = Str::is('foo*', 'foobar'); // true Строка содержит
161
    
162
// Paths
163
base_path(); // К корню
164
app_path(); // К папке app
165
config_path(); // К папке config
166
public_path(); // К папке public
167
storage_path(); // К папке storage
168
resource_path(); // К папке resource
169
170
// Url
171
url()->current(); // Текущий адрес
172
url()->full(); // Полный текущий адрес
173
use Illuminate\Support\Facades\URL; URL::current(); // Текущий адрес таким способом
174
url()->previous(); // Страница, с которой перешли
175
176
// Http
177
Illuminate\Support\Facades\Http::get($url)->ok(); // Проверить URL c другого сайта, с ответом 200
178
    
179
    
180
action('HomeController@getIndex'); // Имя класса контроллера в пространстве имён App\Http\Controllers
181
action('UserController@profile', ['id' => 1]); // Если метод принимает параметры маршрута, вы можете передать их вторым аргументом
182
183
// Существует ли маршрут
184
if (\Illuminate\Support\Facades\Route::has('login')) {}
185
route('routeName');
186
route('routeName', ['id' => 1]);
187
188
echo secure_url('user/profile'); // Полный HTTPS URL по заданному пути
189
echo secure_url('user/profile', [1]);
190
echo url('user/profile'); // HTML-ссылка на указанный полный путь
191
echo url('user/profile', [1]);
192
$url = asset('img/photo.jpg'); // URL для папки public
193
echo secure_asset('foo/bar.zip', 'Title', $attributes = []);
194
    
195
    
196
// Функция редиректа
197
redirect();
198
redirect()->to('https://www.google.com/');
199
redirect()->route('home'); // На роут из файла /routes/web.php
200
redirect()->route('page', ['alias' => 'contacts']); // На роут из файла /routes/web.php с параметром
201
redirect()->action('MainController@index')
202
    ->withInput() // Записать в сессию все параметры из post
203
    //->withInput( $request->only('email', 'remember') ) // Данные только те, которые укажем в параметре
204
    ->with( 'message', 'Материал добавлен.' ); // Записать в сессию определённые параметры
205
206
redirect()->intended('/admin'); // Редирект на ранее запрашиваемую страницу пользователем и в параметре передать страницу по-умолчанию
207
redirect()->back(); // Редирект назад
208
// return new \Illuminate\Http\RedirectResponse('/page'); // Возможно так
209
// return \Illuminate\Http\RedirectResponse::create('/page'); // Возможно так
210
211
    
212
    
213
// Config
214
echo config('app.locale');
215
echo env('APP_ENV');
216
217
// Изменить, добавить данные в config
218
\Illuminate\Support\Facades\Config::set('app.locale', 'ru');
219
echo \Illuminate\Support\Facades\Config::get('app.locale');
220
221
\Illuminate\Support\Facades\Config::set('test', [
222
    'a' => 'aaa',
223
    'b' => 'bbb',
224
]);
225
dd(\Illuminate\Support\Facades\Config::get('test'));
226
227
dd($_ENV);
228
229
$value = config('app.timezone');
230
$value = config('app.timezone', 'default');
231
config(['app.debug' => true]); // Можно изменить конфиг
232
env('APP_ENV', 'default'); // Из файла .env
233
    
234
    
235
// LOG Записать в логи, наследовать use Log;
236
// В файле .env LOG_CHANNEL=stack можно поставить daily, каждый день и поменять кол-во дней в /config/logging.php в 'daily' => ['days' => 90]
237
Log::emergency('Сообщение для записи в логи');
238
Log::alert();
239
Log::critical();
240
Log::error();
241
Log::warning();
242
Log::notice(); // Предупреждения
243
Log::info(); // Некая информация
244
Log::debug();
245
    
246
    
247
// LOCALE
248
// Наследовать use Lang;
249
__('auth.failed', ['name' => 'Test']); // Сделать перевод из папки с языком /resources/lang/название_языка из файла auth с ключом failed, 2-ой - передать динамическое значение, которое в переводах указано :name ('failed' => 'Hello :name') будет заменено на передаваемое
250
trans_choice('auth.apple', 2); // К примеру в переводах 'apple' => 'яблоко|яблока|яблок' и в зависимости от кол-ва 2-ой параметр laravel сам подставить нужное слово (можно так 'apples' => '{0}Вариант1[1,19]Вариант2[20,Inf]Вариант3' если 0 - Вариант1, если от 1 до 19 - Вариант2, если от 20 до бесконечности - Вариант3)
251
Lang::has('auth.apple'); // Проверит есть ли перевод
252
echo trans('validation.required'); // Перевести переданную языковую строку с помощью ваших языковых файлов
253
trans_choice('foo.bar', $count); // Перевести переданную языковую строку с изменениями
254
    
255
    
256
// File
257
use Illuminate\Support\Facades\File;
258
File::exists('file_path.php'); // Существует ли файл
259
File::get('file_path.php'); // Получить содержимое файла
260
File::put('file_path.php', 'Text...'); // Записать, создать в файл
261
File::makeDirectory('pathDirectoryName'); // Создать папку
262
File::ensureDirectoryExists('pathDirectoryName'); // Создать папку если её нет
263
File::replace('file_path.php', 'Text...'); // Перезаписать файл
264
File::prepend('file_path.php', 'Text...'); // Записать в начало файла
265
File::append('file_path.php', 'Text...'); // Записать в конец файла
266
File::delete('file_path.php'); // Удалить файл
267
File::delete(['file_path.php', 'file_path2.php']); // Удалить множество файлов
268
269
File::url('file_path.php'); // URL файла
270
File::size('file_path.php'); // Размер файла
271
File::lastModified('file_path.php'); // Время последней модификащии файла
272
File::copy('file_path.php', 'new_file_path.php'); // Скопировать файл
273
File::move('file_path.php', 'new_file_path.php'); // Переместить файл
274
275
File::files('directory'); // Все файлы из папки
276
File::directories('directory'); // Все папки
277
File::allFiles('directory');  // Все файлы папки и её подпапок
278
$path = base_path('routes');
279
$files = \Illuminate\Support\Facades\File::allFiles($path);
280
if ($files) {
281
    foreach ($files as $key => $file) {
282
        dump($file->getBasename()); // Имя файла
283
        dump($file->getRealPath()); // Полный путь
284
        dump($file->isFile()); // Проверка на файл
285
        dump($file->isDir()); // Проверка на папку
286
        dump($file->getContents()); // Получить содержимое файла
287
        dump(pathinfo($file)); // Данные файла php функция pathinfo()
288
    }
289
}
290
291
292
// Storage, все методы из File работают здесь
293
use Illuminate\Support\Facades\Storage;
294
295
// Разница с File, что Storage работает с определённым диском и его папками и разделами
296
$disk = Storage::disk($diskName); // Название диска из /config/filesystems.php 'disks'
297
// Если не задать диск, то будет по-умолчанию из /config/filesystems.php 'default'. В этом же файле в 'disks' можно добавить свой диск.
298
299
$disk->get('file_path.php'); // Получить содержимое файла
300
app(Illuminate\Filesystem\Filesystem::class)->delete(public_path('uploads/example.png')); // Удалить файл
301
302
// Отдать файл на скачивание, скачать файл через браузер
303
return Storage::download('file.jpg');
304
    
305
    
306
// Session
307
// php artisan session:table Если использовать таблицу sessions для сессий, также в файле /.env прописать SESSION_DRIVER=database
308
309
// можно так $request->session()->all();
310
session()->all(); // Достать всё из сессии
311
session()->put('key', 'value'); // Сохранить в сессию, если ключ key.first, то будет массив с вложенным ключом first
312
session()->push('key.second', 'value2'); // Добавить в сессию в массив
313
session()->get('key', 'default'); // Достать из сессии значение key, если его нет, то записать со значением default необязательный параметр
314
session()->has('key'); // Если ли в сессии ключ key
315
session()->exists('key'); // Существует ли в сессии ключ key
316
317
session()->flash('key', 'value'); // Временная сессия на один запрос
318
session()->reflash(); // Сохранить временные данные в сессию
319
320
session()->pull('key'); // Достать значение key и удалить из сессии
321
session()->flush(); // Удалить всю сессию
322
session()->forget('key'); // Удалить из сессии ключ key
323
session()->flash('status', 'Task was successful!'); // Данные храняться до одного http запроса
324
325
326
/*
327
Использовать любые методы выше описанные
328
- Работать с сессиями использовать Request $request $request->session()
329
- Фасад сессий, прописать use Session; Session::all()
330
- Использовать хелпер для чтения session('key', 'default');
331
332
В видах {{ dump(Session::all()) }}
333
     
334
*/
335
336
337
// Cookies (если не указать время, то запишется на 5 лет)
338
return response()->view('page.index')->cookie('test', 'testing', 604800); // Создать куку на неделю
339
return redirect()->back()->withCookie('test', 'testing', 604800); // Создать куку на неделю c редиректом обратно
340
Cookie::queue('name', 'value'); // Ставим на очередь создание куки, третьем параметром можно передать время в секундах
341
cookie()->queue(cookie('name', 'value')); // или так
342
$cookie = request()->cookie('name'); // Получить куку или Cookie::get('name')
343
344
345
// Cache
346
cache()->has('key'); // Существует ли кэш
347
cache()->forever('key', $values); // Записать в бесконечный кэш
348
cache()->get('key'); // Получить кэш можно Cache::get('key');
349
cache()->pull('key', $values); // Получить и удалить
350
cache()->put('key', $values); // Сохранить кэш
351
cache()->put('key', $values, $seconds); // Сохранить кэш на секунд
352
cache()->add('key', $values, $seconds); // Добавить в кэш на время, по-умолчанию 60 минут
353
cache()->forget('key'); // Удалить конкретный кэш
354
cache()->flush(); // Удалить все кэши
355
// Получить из кэша и сохранить
356
$values = cache()->rememberForever('users', function () {
357
    return DB::table('users')->get();
358
});
359
$values = cache()->remember('users', $seconds, fn (): int => DB::table('users')->count());
360
361
// Сохранение кэша в Memcached, в файле .env поменять CACHE_DRIVER=memcached (на хостинге должен быть включён memcached)
362
363
// Request http
364
$url = 'https://site.ru';
365
//$response = Http::get($url);
366
$headers = [
367
    'User-Agent' => 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0',
368
    //'Content-Type' => 'application/json',
369
];
370
$response = \Illuminate\Support\Facades\Http::withHeaders($headers)
371
    ->connectTimeout(3)
372
    ->timeout(10)
373
    ->withoutVerifying()
374
    //->withBasicAuth('login', 'password')
375
    ->get($url); // ->post($url, $param)
376
if ($response->ok()) {
377
    $data = $response->json();
378
    \App\Models\Model::insert($data);
379
}
380
381
// Carbon - класс для работы со временем
382
//https://carbon.nesbot.com/docs/
383
use Illuminate\Support\Carbon; // Пространство имён
384
$dt = Carbon::parse($date); // Создать объект из даты
385
$updated_at = Carbon::now(); // Сейчас
386
387
/**
388
 *
389
 * @return string
390
 *
391
 * Возвращает время в формате Timestamp: 2020-12-10 00:00:00, принимает дату сторокой, практически в любом формате.
392
 */
393
public static function toTimestamp($date)
394
{
395
    if ($date) {
396
        return Carbon::create($date)->toDateTimeString();
397
    }
398
    return null;
399
}
400
401
/**
402
 *
403
 * @return string
404
 *
405
 * Возвращает время в формате: 10.12.2020 или любом другом, принимает дату в 2020-12-10 00:00:00
406
 * $format - возращаемый формат, по-умолчанию 10.12.2020.
407
 */
408
public static function timestampTo($timestamp, $format = 'd.m.Y')
409
{
410
    if ($timestamp && $timestamp != '0000-00-00 00:00:00' && $format) {
411
        $dt = Carbon::createFromFormat('Y-m-d H:i:s', $timestamp);
412
        return $dt->format($format); // $dt->translatedFormat('d F Y, l'); // С переводом
413
    }
414
    return null;
415
}
416
417
now(); // Объект на сейчас
418
Carbon::createFromFormat('d-m-Y', $date)->startOfDay(); // На начало суток или на конец суток ->endOfDay()
419
420
// Разница в днях
421
$diffInDays = $contract->create_at->diffInDays(Carbon::now());
422
423
$date1 = Carbon::createFromFormat('m/d/Y H:i:s', '12/01/2020 10:20:00');
424
$date2 = Carbon::createFromFormat('m/d/Y H:i:s', '12/01/2020 10:20:00');
425
426
// Сравнить даты, возвращает true, если равно
427
$res = $date1->eq($date2);
428
429
// Если не равно
430
$res = $date1->ne($date2);
431
432
// Если больше, чем
433
$res = $date1->gt($date2);
434
435
// Если больше или равно
436
$res = $date1->gte($date2);
437
438
// Если меньше, чем
439
$res = $date1->lt($date2);
440
441
// Если меньше или равно
442
$res = $date1->lte($date2);
443