baks-dev/users-profile-user
Модуль профиля пользователей для PHP 8.4+ (BaksDev): установка через Composer, установка ресурсов командой baks:assets:install, поддержка миграций Doctrine и тестов PHPUnit (group=users-profile-user).
Install the Package
composer require baks-dev/users-profile-user
Publish Assets and Migrations
php artisan baks:assets:install
php artisan doctrine:migrations:diff
php artisan doctrine:migrations:migrate
First Use Case: Basic Profile CRUD
Profile model (likely BaksDev\UsersProfileUser\Models\Profile) to fetch/update profiles:
use BaksDev\UsersProfileUser\Models\Profile;
$profile = Profile::where('user_id', auth()->id())->first();
$profile->bio = 'Updated bio';
$profile->save();
Rules class in the package for field-specific rules like avatar_size or bio_length).Frontend Integration
baks:assets:install) in your views:
@include('users-profile-user::profile.form')
resources/views/vendor/users-profile-user/.Profile Creation/Update
StoreProfileRequest, UpdateProfileRequest) to handle validation:
use BaksDev\UsersProfileUser\Http\Requests\UpdateProfileRequest;
public function update(UpdateProfileRequest $request) {
$profile = Profile::find($request->profile_id);
$profile->update($request->validated());
}
Events class):
Profile::updated(function ($profile) {
// Trigger notifications, analytics, etc.
});
File Uploads (Avatars)
config/users-profile-user.php:
'avatar' => [
'disk' => 'public',
'path' => 'avatars',
],
avatar field in forms. The package handles uploads and resizing (if configured).API Endpoints
routes/api.php or routes/web.php. Extend them if needed:
Route::put('/profile', [ProfileController::class, 'update'])->middleware('auth:sanctum');
ApiResource for JSON responses:
namespace App\Http\Resources;
use BaksDev\UsersProfileUser\Models\Profile;
use Illuminate\Http\Resources\Json\JsonResource;
class ProfileResource extends JsonResource {
public function toArray($request) {
return [
'id' => $this->id,
'bio' => $this->bio,
'avatar' => $this->avatar_url,
];
}
}
Custom Fields
Schema::table('profiles', function (Blueprint $table) {
$table->string('custom_field')->nullable();
});
@include('users-profile-user::profile.partials.custom-field')
Authorization
Profile model:
use Illuminate\Auth\Access\HandlesAuthorization;
class ProfilePolicy {
use HandlesAuthorization;
public function update(User $user, Profile $profile) {
return $user->id === $profile->user_id;
}
}
can middleware:
Route::put('/profile', [ProfileController::class, 'update'])
->middleware(['auth:sanctum', 'can:update,profile']);
Database Conflicts
profiles table or specific column names (e.g., avatar_path). Conflicts can arise if your app uses a different schema (e.g., user_profiles).doctrine:migrations:migrate. Use Laravel’s schema builder for hybrid migrations if needed:
Schema::table('user_profiles', function (Blueprint $table) {
$table->string('avatar_path')->nullable()->default(null);
});
Asset Pipeline Conflicts
baks:assets:install command may overwrite existing frontend assets or conflict with Vite/Laravel Mix.config/users-profile-user.php or manually publish assets:
php artisan vendor:publish --tag=users-profile-user-assets
Authentication Integration
AppServiceProvider:
public function boot() {
Route::middleware('auth:sanctum')->group(function () {
require __DIR__.'/../routes/api.php';
});
}
Validation Overrides
avatar_size) may not align with your app’s requirements.namespace App\Http\Requests;
use BaksDev\UsersProfileUser\Http\Requests\UpdateProfileRequest;
class CustomUpdateProfileRequest extends UpdateProfileRequest {
protected function rules() {
return array_merge(parent::rules(), [
'avatar' => 'nullable|image|mimes:jpeg,png|max:2048',
]);
}
}
Localization Gaps
php artisan vendor:publish --tag=users-profile-user-lang
Then customize resources/lang/en/users-profile-user.php.Performance with Eager Loading
User::with('profile')->get()).User::with(['profile' => function ($query) {
$query->select('id', 'user_id', 'bio', 'avatar_path');
}])->get();
Log Package Events
Profile::updated(function ($profile) {
\Log::info('Profile updated', ['profile_id' => $profile->id]);
});
Check Console Output
php artisan doctrine:migrations:migrate --verbose
Inspect Published Files
baks:assets:install, check public/vendor/users-profile-user/ for uploaded assets and templates.Test Edge Cases
Custom Profile Fields
Profile model and migration:
// app/Models/Profile.php
namespace App\Models;
use BaksDev\UsersProfileUser\Models\Profile as BaseProfile;
class Profile extends BaseProfile {
protected $casts = [
'custom_field' => 'array',
];
}
Event Listeners
EventServiceProvider:
protected $listen = [
\BaksDev\UsersProfileUser\Events\ProfileUpdated::class => [
\App\Listeners\LogProfileUpdate::class,
],
];
API Resource Customization
namespace App\Http\Resources;
use BaksDev\UsersProfileUser\Http\Resources\ProfileResource as BaseProfileResource;
class ProfileResource extends BaseProfileResource {
public function toArray($request) {
return array_merge(parent::toArray($request), [
'custom_field' => $this->custom_field,
]);
}
}
Middleware for Profile Access
namespace App\Http\Middleware;
use Closure;
use BaksDev\UsersProfileUser\Models\Profile;
class ProfileAccess
How can I help you explore Laravel packages today?