라라벨의 모델과 컨트롤러를 연결하는 방법은?
_____Q1. 모델(Model)과 컨트롤러(Controller)의 역할이 뭔가요?
A1.
1) 모델(Model): 데이터베이스 테이블과 매핑되는 Eloquent ORM 클래스. 레코드 조회·생성·수정·삭제(CRUD) 로직 보관
2) 컨트롤러(Controller): HTTP 요청을 처리하고, 모델을 호출해 비즈니스 로직 실행 후 뷰 또는 JSON 응답 반환
Q2. 모델 생성은 어떻게 하나요?
A2.
- Artisan 커맨드:
`php artisan make:model User`
- 옵션:
`-m` : 마이그레이션 파일 생성
`-c` : 컨트롤러 동시 생성
`-f` : 팩토리 동시 생성
Q3. 컨트롤러 생성은 어떻게 하나요?
A3.
- 기본 컨트롤러:
`php artisan make:controller UserController`
- 리소스 컨트롤러(RESTful 메서드 포함):
`php artisan make:controller UserController --resource`
- API 전용:
`php artisan make:controller Api/UserController --api`
Q4. 컨트롤러에서 모델을 불러오려면 어떻게 하나요?
A4.
1) 네임스페이스 import
```php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller { … }
```
2) 메서드 내부에서 직접 사용
```php
public function index() {
$users = User::all();
return view('users.index', compact('users'));
}
```
Q5. 의존성 주입(Dependency Injection)은 어떻게 활용하나요?
A5.
1) 메서드 인자로 주입
```php
public function show(User $user) {
// URL에 {user} 파라미터가 들어오면 자동으로 조회된 User 인스턴스가 주입
return view('users.show', compact('user'));
}
```
2) 생성자 주입
```php
class UserController extends Controller
{
protected $user;
public function __construct(User $user) {
$this->user = $user;
}
public function index() {
return $this->user->all();
}
}
```
Q6. CRUD 예제 (리소스 컨트롤러 기준)
A6.
```php
// routes/web.php
Route::resource('users', UserController::class);
// app/Http/Controllers/UserController.php
public function index() {
$users = User::all();
}
public function create() {
return view('users.create');
}
public function store(Request $request) {
User::create($request->validate([
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required|min:6'
]));
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) {
$user->update($request->validate([
'name' => 'required',
'email' => 'required|email|unique:users,email,'.$user->id,
]));
return redirect()->route('users.show', $user);
}
public function destroy(User $user) {
$user->delete();
return redirect()->route('users.index');
}
```
Q7. 라우트(Route)에서 모델-컨트롤러 연결은 어떻게 하나요?
A7.
- 단일액션:
`Route::get('users', [UserController::class, 'index']);`
- 리소스:
`Route::resource('users', UserController::class);`
- API:
`Route::apiResource('users', Api\UserController::class);`
Q8. 대량 할당(Mass Assignment) 설정은 어떻게?
A8.
- 모델에서 허용 필드 지정
```php
class User extends Model {
protected $fillable = ['name','email','password'];
// 또는
// protected $guarded = []; // 모든 필드 허용
}
```
Q9. 팁 & 주의사항
A9.
1) Route Model Binding: URL 파라미터와 모델 컬럼(key)이 일치해야 자동 바인딩
2) 폼 요청(Validation) 분리: `php artisan make:request UserRequest`
3) 서비스 레이어 분리 고려: 복잡한 로직은 서비스 클래스에 위임
4) 네임스페이스 경로 확인: Laravel 8 이상은 `App\Models` 기본, 구버전은 `App\`
Q10. 요약
A10.
1) 모델 생성(`make:model`), 컨트롤러 생성(`make:controller`)
2) 네임스페이스 import 후 모델 호출 또는 의존성 주입
3) 라우트 정의(`resource`, `apiResource`)
4) Mass Assignment 설정 및 검증(Request) 적용
5) RESTful 패턴에 따라 CRUD 메서드 구현
以上 FAQ를 참고하여 Laravel 모델과 컨트롤러를 체계적으로 연결·운영하세요.
작성자:
ㅁㅁ [비회원]
| 작성일자: 1년 전
2024-08-26 08:17:05
조회수: 253 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 253 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.