Laravel - 5 przydatnych tricków - część pierwsza
Laravel to świetny framework PHP, który przebojem zdobywa rynek. Domyślnie posiada on tysiące funkcji, które ułatwiają pracę. Postanowiłem więc wrzucić 5 moim zdaniem najlepszych tricków, które można zrobić w Laravelu w ciągu kilku minut, aby ulepszyć naszą aplikację
Nasz blog może się rozwijać dzięki naszym sponsorom. Nasz kurs dockera powstał dzięki współpracy z chmurami Vultr i tam dokładnie został przetestowany. Nasz szablon pochodzi z Envato MarketPlace. Wszystkie pluginy i elementy stron internetowych, jakie opisujemy, pochodzą z Envato Elements. Wszystkie książki, opisane na tym blogu, są dostepne u wydawcy Helion. Jesteśmy także partnerem Respondent.io, platformy, która płaci za testowanie aplikacji.
Laravel to framework, czyli szkielet programu, napisany w języku PHP. Został on wydany w 2011 roku i bardzo szybko stał się jednym z popularniejszych rozwiązań tego typu. Jest to oprogramowanie w pełni otwarte (licencja MIT), bazujące na popularnym wzorcu MVC (Model-View-Controller). Zdobył on błyskawicznie wsparcie całej społeczności PHP. Dlaczego?
Moim zdaniem największą zaletą Laravel jest prostota i intuicyjność. Wielokrotnie programiści napotykając jakiś problem, nie muszą nawet zaglądać w dokumentację. Piszą tak jak im się „wydaje”, że powinno być i nagle okazuje się, że to działa. Dodatkowo osoby pracujące nad tym narzędziem zadbały o bardzo dużo różnych funkcji czy opcji, które bardzo ułatwiają pracę programistom. Przykładem jest funkcja back(), która cofa nas do poprzedniej strony. Normalnie, musielibyśmy sami zapisać w sesji poprzednią stronę, odczytać z sesji i przekierować użytkownika. Laravel zrobi to wszystko za nas. Ale pewne rzeczy możemy też szybko ulepszyć, nie poświęcając na to dużo czasu. Wybrałem moim zdaniem 5 rzeczy, które sprawią, że obsługa frameworka będzie jeszcze bardziej sympatyczna. Zaczynamy?
Akcesory i mutatory pojedynczej metody w Laravelu
Zwykle używamy akcesorów w modelu laravel, aby modyfikować dowolne dane pola podczas pobierania rekordów i mutatorów, aby modyfikować dowolne dane pola podczas wstawiania do bazy danych. Tak więc, aby zmodyfikować dowolne pole wcześniej, potrzebowaliśmy dwóch oddzielnych metod dla jednego pola, tj. jednej metody dla akcesora i jednej dla mutatora, ale laravelu 9.x, możemy użyć jednej metody zarówno dla akcesora, jak i mutatora za pomocą zamknięcia. Poniżej podano składnię dla pojedynczego akcesora i mutatora metody:
namespace Modules\Trainings\Entities; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class CustomerBrief extends Model { use HasFactory; protected $table = "customer_briefs"; protected $primaryKey = "id"; protected $fillable = [ 'training_id', 'name', 'position', 'linkedin_profile', 'photo', 'opinion', 'created_at', 'updated_at', ]; public function training(): BelongsTo { return $this->belongsTo(Training::class, 'training_id'); } protected function created_at(): Attribute { return new Attribute( fn ($value) => Carbon::parse($value)->format('d-m-Y'), // accessor fn ($value) => Carbon::parse($value)->format('Y-m-d'), // mutator ); } protected static function newFactory() { return \Modules\Trainings\Database\factories\CustomerBriefFactory::new (); } }
Tworzenie użytkownika za pomocą komendy
To jest kolejna bardzo ważna rzecz, bo nie zawsze nam się chce coś klikać w panelu. Oto prosta komenda, która zrobi to za nas:
namespace App\Console\Commands; use App\Models\User; use Illuminate\Console\Command; use Illuminate\Support\Facades\Hash; class CreateNewUserCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'user:create'; /** * The console command description. * * @var string */ protected $description = 'Create new user.'; /** * Execute the console command. * * @return int */ public function handle() { $name = $this->ask('Enter name:'); $email = $this->ask('Enter email:'); $password = $this->secret('Enter password:'); $biography = $this->ask('Enter biography:'); $image = $this->ask('Enter image:'); $is_employee = $this->ask('Is employee? Enter true or false:'); $is_admin = $this->ask('Is admin? Enter true or false:'); $user = User::firstOrNew(['email' => $email]); $user->fill([ 'name' => $name, 'email' => $email, 'password' => Hash::make($password), 'biography' => $biography, 'image' => $image, 'is_employee' => $is_employee, 'is_admin' => $is_admin, ])->save(); $this->info('User has been created successfully.'); return 0; } }
Zmiana hasła za pomoca komendy
To kolejna przydatna komenda. Powinna ona wyglądać tak:
namespace App\Console\Commands; use App\Models\User; use Illuminate\Console\Command; use Illuminate\Support\Facades\Hash; class UpdateUserPasswordCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'user:password:update'; /** * The console command description. * * @var string */ protected $description = 'Update user password.'; /** * Execute the console command. * * @return int */ public function handle() { $email = $this->ask('Enter email:'); $password = $this->secret('Enter password:'); $user = User::where('email', $email)->first(['*']); $user->password = Hash::make($password); $user->save(); $this->info('Password has been updated.'); return 0; } }
Prosta wyszukiwarka w artykułach
To kolejna bardzo prosta rzecz y kolejny bardzo prosty trick. Jak zrobić prostą wyszukiwarkę w laravelu? Nic prostszego:
$search = function ($query) use($request) { foreach ($request->only('title', 'content', 'description') as $name => $value) { strlen($value) && $query->where($name, 'LIKE', "%{$value}%"); } }; $entries = ContentEntry::orderBy('updated_at', 'desc')->where($search)->paginate(25);
Własna walidacja
To kolejny prosty trick, który pozwala dodawać do walidatora własne reguły. Zobaczcie sami:
namespace Modules\Trainings\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class CreateCustomerBriefRequest extends FormRequest { public function rules(): array { return [ "training_id" => "required|exists:trainings,id", "name" => "required|max:255|unique:customer_briefs,name", "linkedin_profile" => "required|max:255|unique:customer_briefs,linkedin_profile", "photo" => "required", "opinion" => "required", "position" => "required", ]; } public function authorize(): bool { return true; } public function withValidator($validator) { $validator->after(function ($validator) { if ($this->somethingElseIsInvalid()) { $validator->errors()->add('field', 'Something is wrong with this field!'); } }); } }
Podsumowanie
Laravel jest frameworkiem z niesamowitymi możliwościami. Jeśli spodoba się wam ten wpis, to za jakiś czas puścimy kolejną wersję tricków, związanych z tym frameworkiem.
Dotychczas z tej serii ukazały się: