namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
$name = $request->input('name');
$email = $request->input('email');
// Логика сохранения данных
}
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function store(Request $request)
{
$request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users,email',
]);
// Данные валидны, можно продолжать обработку
}
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function update(Request $request)
{
if ($request->hasFile('avatar')) {
$file = $request->file('avatar');
$path = $file->store('avatars');
// Сохранить путь к файлу в базе данных
}
}
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class LogController extends Controller
{
public function index(Request $request)
{
$method = $request->method();
$uri = $request->path();
$headers = $request->headers->all();
// Логика обработки информации о запросе
}
}
php artisan make:observer UserObserver --model=User
Это создаст новый файл Observer в каталоге app/Observers
namespace App\Observers;
use App\Models\User;
class UserObserver
{
public function creating(User $user)
{
// Логика перед созданием пользователя
}
public function created(User $user)
{
// Логика после создания пользователя
}
// Другие события: updating, updated, deleting, deleted и т.д.
}
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Models\User;
use App\Observers\UserObserver;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
User::observe(UserObserver::class);
}
}
Аксессоры позволяют определить, как значение атрибута модели должно быть получено. Они преобразовывают атрибут, когда вы получаете его значение.
Пример использования:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
}
Теперь вы можете получить значение full_name как обычный атрибут:
$user = User::find(1);
echo $user->full_name; // выводит "John Doe"
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}
}
$user = new User();
$user->password = 'secret'; // пароль сохранится зашифрованным
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function scopeActive(Builder $query)
{
return $query->where('active', 1);
}
}
$activeUsers = User::active()->get();
namespace App\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class NonDeletedScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
return $builder->whereNull('deleted_at');
}
}
namespace App\Models;
use App\Scopes\NonDeletedScope;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(new NonDeletedScope);
}
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}
User::create([
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => bcrypt('secret'),
]);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $casts = [
'email_verified_at' => 'datetime',
'is_admin' => 'boolean',
];
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $appends = ['full_name'];
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
}
$user = User::find(1);
echo $user->toJson(); // будет включать 'full_name'
php artisan make:controller UserController --resource
Вот как выглядит стандартный ресурсный контроллер:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
// Вывод списка ресурсов
$users = User::all();
return view('users.index', compact('users'));
}
public function create()
{
// Форма создания ресурса
return view('users.create');
}
public function store(Request $request)
{
// Сохранение нового ресурса
$request->validate([
'name' => 'required',
'email' => 'required|email',
]);
User::create($request->all());
return redirect()->route('users.index');
}
public function show(User $user)
{
// Отображение отдельного ресурса
return view('users.show', compact('user'));
}
public function edit(User $user)
{
// Форма редактирования ресурса
return view('users.edit', compact('user'));
}
public function update(Request $request, User $user)
{
// Обновление ресурса
$request->validate([
'name' => 'required',
'email' => 'required|email',
]);
$user->update($request->all());
return redirect()->route('users.index');
}
public function destroy(User $user)
{
// Удаление ресурса
$user->delete();
return redirect()->route('users.index');
}
}
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return view('users.index', compact('users'));
}
}
use App\Http\Controllers\UserController;
Route::resource('users', UserController::class)->only(['index']);
php artisan make:resource UserResource
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at->toDateTimeString(),
'updated_at' => $this->updated_at->toDateTimeString(),
];
}
}
namespace App\Http\Controllers;
use App\Http\Resources\UserResource;
use App\Models\User;
class UserController extends Controller
{
public function show($id)
{
$user = User::findOrFail($id);
return new UserResource($user);
}
}
namespace App\Http\Controllers;
use App\Http\Resources\UserResource;
use App\Models\User;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return UserResource::collection($users);
}
}