php artisan make:controller UserController
: 컨트롤러 생성
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\View\View;
class UserController extends Controller
{
/**
* Show the profile for a given user.
*/
public function show(string $id): View
{
return view('user.profile', [
'user' => User::findOrFail($id)
]);
}
}
컨트롤러의 여러 메서드를 작성한 후에는 route 파일에 작성 가능하다
use App\Http\Controllers\UserController;
Route::get('/user/{id}', [UserController::class, 'show']);
❗ Controller 클래스를 extends하는 것은 필수는 아니지만 확장하지 않으면 middleware, authorize 등의 기능은 사용할 수 없다
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Response;
class ProvisionServer extends Controller
{
/**
* Provision a new web server.
*/
public function __invoke()
{
// ...
}
}
💡 Single Action으로만 등록하는 경우 컨트롤러 내 메서드 이름은 명시할 필요 없음
use App\Http\Controllers\ProvisionServer;
Route::post('/server', ProvisionServer::class);
미들웨어를 컨트롤러에 할당할 수 있다
Route::get('profile', [UserController::class, 'show'])->middleware('auth');
미들웨어를 개별적으로 할당할 수 있는데
class UserController extends Controller
{
/**
* Instantiate a new controller instance.
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('log')->only('index');
$this->middleware('subscribed')->except('store');
}
}
이처럼 특정 컨트롤러만 할당, 제외가 가능하다
흔히 사용되는 CRUD 메서드들을 resources 속성을 통해 사용 가능하다
CRUD 메서드 가운데 사용할 메서드만 정의, 혹은 사용하지 않을 메서드만 정의할 수 있다
use App\Http\Controllers\PhotoController;
Route::resource('photos', PhotoController::class)->only([
'index', 'show'
]);
Route::resource('photos', PhotoController::class)->except([
'create', 'store', 'update', 'destroy'
]);
apiResource 속성으로 create, edit을 제외한 CRUD 메서드를 만들 수 있다
use App\Http\Controllers\PhotoController;
Route::apiResource('photos', PhotoController::class);
use App\Http\Controllers\PhotoController;
use App\Http\Controllers\PostController;
Route::apiResources([
'photos' => PhotoController::class,
'posts' => PostController::class,
]);
상위 하위 개념을 가지는 URI(Ex. User/post)는 아래와 같이 표현할 수 있다
use App\Http\Controllers\PhotoCommentController;
Route::resource('photos.comments', PhotoCommentController::class);
이는 URI로 변환하면 아래처럼 해석된다
/photos/{photo}/comments/{comment}
각 resource route에는 메서드 별로 네이밍이 가능하고
use App\Http\Controllers\PhotoController;
Route::resource('photos', PhotoController::class)->names([
'create' => 'photos.build'
]);
파라미터를 지정하면 URI에 자동 매핑되어 받게 된다
use App\Http\Controllers\AdminUserController;
Route::resource('users', AdminUserController::class)->parameters([
'users' => 'admin_user'
]);`
아래는 위와 같이 네이밍 했을 때 AdminUserController의 show 메서드를 호출하는 URI이다
/users/{admin_user}
Nested Resource를 사용할 때 바인딩 하는 모델의 특정 컬럼을 바인딩하도록 지정할 수 있다
use App\Http\Controllers\PhotoCommentController;
Route::resource('photos.comments', PhotoCommentController::class)->scoped([
'comment' => 'slug',
]);
이렇게 설정 시 아래와 같은 URI를 호출하게 된다
/photos/{photo}/comments/{comment:slug}
하나의 인스턴스만을 가지는 (Ex. 프로필) 리소스는 singleton 속성으로 정의할 수 있다
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
Route::singleton('profile', ProfileController::class);
아래는 싱글톤 속성을 사용해 정의했을 때 매핑되는 URI이다
Nested resource도 사용 가능하다
Route::singleton('photos.thumbnail', ThumbnailController::class);
create, destroy, store 등의 속성도 정의하고 싶다면 creatable 메서드를 사용하자
Route::singleton('photos.thumbnail', ThumbnailController::class)->creatable();
Route::singleton(...)->destroyable(); // destroy 메서드만 추가
<?php
namespace App\Http\Controllers;
use App\Repositories\UserRepository;
class UserController extends Controller
{
/**
* Create a new controller instance.
*/
public function __construct(
protected UserRepository $users,
) {}
}
컨트롤러가 생성될 때 의존성 주입이 가능하다
<?php
namespace App\Http\Controllers;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Store a new user.
*/
public function store(Request $request): RedirectResponse
{
$name = $request->name;
// Store the user...
return redirect('/users');
}
}
추가적으로 메서드에 대한 종속성을 타입 힌트로 지정할 수 있다.
With continued innovation in AI, robotics, and materials, the future of sex dolls looks even more promising. As societal perceptions continue to evolve, these products will likely become an increasingly mainstream option for those seeking companionship, pleasure, or emotional support in new and innovative ways.
With continued innovation in AI, robotics, and materials, the future of sex dolls looks even more promising. As societal perceptions continue to evolve, these products will likely become an increasingly mainstream option for those seeking companionship, pleasure, or emotional support in new and innovative ways.
With continued innovation in AI, robotics, and materials, the future of sex dolls looks even more promising. As societal perceptions continue to evolve, these products will likely become an increasingly mainstream option for those seeking companionship, pleasure, or emotional support in new and innovative ways.
With continued innovation in AI, robotics, and materials, the future of sex dolls looks even more promising. As societal perceptions continue to evolve, these products will likely become an increasingly mainstream option for those seeking companionship, pleasure, or emotional support in new and innovative ways.
Continuously improving knowledge with each lesson you share. It is great to approach the programs with the variety of learning coreball methods. How exciting it is to be able to access different in-depth information.