Было бы здорово, если бы вы нашли эту статью, содержащую 20 очень полезных и передовых советов по Laravel, которые помогут вам в ваших будущих проектах. Я расскажу только о некоторых советах, которые заинтересовали меня и которые я буду часто использовать, но посетите источник для более глубокого изучения https://ashallendesign.co.uk/blog/20-useful-laravel-tips.
- Использование полей DATETIME вместо булевых значений
class Post extends Model
{
public function isPublished(): bool
{
return $this->published_at !== null; // is_published
}
}
- Использование ‘when’ в PendingRequest
$http = Http::withBasicAuth($username, $password);
if (app()->environment('local')) {
$http->withoutVerifying();
}
// with when
$http = Http::withBasicAuth($username, $password)
->when(app()->environment('local'), function (PendingRequest $request) {
$request->withoutVerifying();
});
- Использование getOrPut() в Collections
if (! $collection->has($key)) {
$collection->put($key, $this->builtItem($data));
}
return $collection->get($key);
// getOrPut()
return $collection->getOrPut($key, fn () => $this->buildItem($data));
- Отладка HTTP-запросов
Http::dump()->get($url);
Http::dd()->get($url);
- Дублирование моделей
Вы можете дублировать модель следующим образом
$post = Post::find(123);
$copiedPost = $post->replicate();
$copiedPost->save();
Если вы хотите исключить свойства из копирования, вы можете передать имена полей в виде массива в метод
$post = Post::find(123);
$copiedPost = $post->replicate([
'author_id',
]);
$copiedPost->save();
Кроме того, метод replicate создает несохраненную модель, поэтому вы можете объединить в цепочку ваши обычные методы модели. Например, мы можем скопировать модель и добавить » (copy)» в конец заголовка, чтобы было видно, что модель скопирована.
$post = Post::find(123);
$copiedPost = $post->replicate([
'author_id',
])->fill([
'title' => $post->title.' (copy)',
]);
$copiedPost->save();
- Использование функции ‘wasRecentlyCreated’ для моделей
$user = User::firstOrCreate(
['email' => request('email')],
['name' => request('name')],
);
if ($user->wasRecentlyCreated) {
// Your user was just created...
} else {
// Your user already exited and was fetched from the database...
}
- Перенос логики в методы
Допустим, мы хотим проверить, одобрен ли пользователь. Наш код может выглядеть следующим образом
if ($user->approved === Approval::APPROVED) {
// Do something...
}
Теперь наша модель может выглядеть следующим образом
class User extends Model
{
public function isApproved(): bool
{
return $this->approved === Approval::APPROVED;
}
}
// now
if ($user->isApproved()) {
// Do something...
}
- Изменение ключа для привязки модели маршрута
Допустим, у вас есть маршрут, который принимает slug записи блога
Route::get('blog/{slug}', [BlogController::class, 'show']);
// Model
use AppActionsPublishPost;
use AppModelsPost;
class BlogController extends Controller
{
public function show($slug)
{
$post = Post::where('slug', $slug)->firstOrFail();
return view('blog.show', [
'post' => $post,
]);
}
}
Чтобы упростить и очистить этот код, мы можем обновить параметр slug, чтобы вместо него было post:slug
Route::get('blog/{post:slug}', [BlogController::class, 'show']);
// Model
use AppActionsPublishPost;
use AppModelsPost;
class BlogController extends Controller
{
public function show(Post $post)
{
return view('blog.show', [
'post' => $post,
]);
}
}
Надеюсь, вам понравились эти советы.