2022-06-30-11-06-25-laravel-5-przydatnych-trickow-czesc-pierwsza.png

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ę:

Udostępnij

Porozmawiajmy o Twoich potrzebach

POROZMAWIAJMY O USŁUGACH, JAKICH POTRZEBUJESZ DLA SWOJEGO BIZNESU

Z chęcia pomożemy Ci wzrastać w wybranym przez Ciebie biznesie.