HTTP 控制器
简介
控制器允许你将相应的路由业务逻辑封装在控制器类中进行有效的管理,这样你不必将所有的路由逻辑集中到routes.php文件中,导致代码的臃肿与难以维护。所有的控制器类都被存储在app/Http/Controllers目录中.
基本控制器
一个基本的控制器应该继承自App\Http\Controllers\Controller控制器类:
<?phpnamespace App\Http\Controllers;use App\User;use App\Http\Controllers\Controller;class UserController extends Controller { public function showProfile($id) { return view('user.profile', ['user' => User::findOrFail($id)]); }}`
我们可以通过下面的方式把控制器的行为分配到路由:
Route::get('user/{id}', 'UserController@showProfile');
一旦将控制器的行为分配到路由之后,每次客户端请求该路由,都会触发控制器的行为。这里即客户端每次请求user/{id}路由,showProfile方法都会被执行,路由中的参数也会被直接传递到该方法中.
控制器 & 命名空间
你应该知道我们在定义控制器路由时是不需要指定控制器的命名空间的,而只需要指定到类名就可以了,这是因为在RouteServiceProvider文件中自动加载的routes.php文件已经被指定了路由组的根命名空间App\Http\Controllers;
如果你想在App\Http\Controllers目录下使用php命名空间来嵌套或组织控制器,那么你只需要简单的指定相对于App\Http\Controllers部分的类名就可以了。所以如果你的控制器的全部类名为App\Http\Controllers\Photos\AdminController,那么你就可以这样来定义控制器路由:
Route::get('foo', 'Photos\AdminController@method');
命名控制器路由
就像定义命名路由一样,我们也可以给一个控制器路由命名:
Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);
一旦你为一个路由进行了命名, 那么你就可以通过route帮助方法去快速的生成被命名路由的资源表述地址:
$url = route('name');
控制器中间件
中间件可以这样被分配到控制器路由中:
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile']);
当然你也可以在控制器类中直接使用middleware方法来进行中间件的分配,你也可以只允许类中的某些行为受到指定中间件的约束:
class UserController extends Controller { public function __construct() { $this->middleware('auth'); $this->middleware('log', ['only' => [ 'fooAction', 'barAction' ]]); $this->middleware('subscribed', ['except' => [ 'fooAction', 'barAction' ]]); }}
RESTful 资源控制器
资源控制器可以使你快速的构建RESTful型的控制器。你可以使用artisan命令来快速的创建:
php artisan make:controller PhotoController --resource
该命令会生成app\Http\Controllers\PhotoController.php文件,资源控制器中将包含每个可用的资源操作相应的方法.
你可以通过下面的方式来进行资源路由的注册:
Route::resource('photo', 'PhotoController');
这一个简单的声明会创造多条路由用来处理RESTful式的请求.相应的通过命令生成的资源型控制器也为这些请求设置了对应的处理方法.
资源控制器所处理的行为
请求方式 | 路由地址 | 控制器行为 | 路由命名 |
---|---|---|---|
GET | /photo | index | photo.index |
GET | /photo/create | create | photo.create |
POST | /photo | store | photo.store |
GET | /photo/{photo} | show | photo.show |
GET | /photo/{photo}/edit | edit | photo.edit |
PUT/PATCH | /photo/{photo} | update | photo.update |
DELETE | /photo/{photo} | destroy | photo.destroy |
部分资源路由
有时候你可能并不想控制器处理全部的请求方式,那么你可以这么做:
Route::resource('photo', 'PhotoController', ['only' => [ 'index', 'show']]);Route::resource('photo', 'PhotoController', ['except' => [ 'create', 'store', 'update', 'destroy']]);
命名资源路由
默认的,所有的资源控制器行为都被进行了相应的路由命名,你可以通过names参数来进行重命名:
Route::resource('photo', 'PhotoController', ['names' => [ 'create' => 'photo.build']]);
命名资源路由参数
默认的,资源路由的路由参数都被命名为相应的资源名称,你可以用过parameters参数来进行重命名:
Route::resource('user', 'AdminUserController', ['parameters' => [ 'user' => 'admin_user']]);// /user/{admin_user}
有时候你可能希望资源路由的路由参数并不需要像默认的资源名称一样采取复数的形式,那么你可以通过传递parameters的选项设置为singular:
Route::resource('users.photos', 'PhotoController', [ 'parameters' => 'singular']);// /users/{user}/photos/{photo}
另外,你也可以全局设置你的资源路由参数为单数形式或者全局进行资源路由参数的命名映射:
Route::singularResourceParameters();Route::resourceParameters([ 'user' => 'person', 'photo' => 'image'])
当你对资源路由参数进行定制时,你应该清楚的知道命名的顺序优先级:
- 参数被直接的传递给Route::resource
- 通过 Router::resourceParameters 进行全局参数映射
- 通过parameters数组选项传递给Route::resource 或者 通过 Route::singularResoureParameters 进行单数形式参数设置
- 默认行为
资源控制器中意外的行为
如果你必须在资源控制器中添加额外的行为去注册相应的路由,那么你一定要在使用Route::resource之前进行注册,否则该行为很可能会被资源控制器意外的覆盖掉.
Route::get('photos/popular', 'PhotoController@method');Route::resource('photos', 'PhotoController');
依赖注入 & 控制器
构造器注入
laravel的服务容器支持所有的laravel控制器的解析。由于这个原因,所以你可以在控制器的构造函数中添加你所需要依赖的相应类型提示,这些依赖会被自动的解析并注入进控制器实例.
<?phpnamespace App\Http\Controllers;use App\Repositories\UserRepository;class UserController extends Controller { protected $users; public function __construct(UserRepository $users) { $this->users = $users; }}
当然,你也被允许添加一些laravel contract的类型提示,只要服务容器能够正确的解析,你都可以被允许添加。
方法注入
除了在构造函数中进行依赖注入,你也可以在控制器的行为方法中进行依赖注入,比如,将Illuminate\Http\Reqeust实例注入到控制器的store方法中:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class UserController extends Controller { public function store (Request $request) { $name = $request->input('name'); }}
如果你的控制器方法也接收从路由传递过来的参数,那么他们会在其它依赖解析完毕之后被传递,比如你的路由是这么定义的:
Route::put('user/{id}', 'UserController@update');
那么你可以这么修正你的控制器行为,来进行参数的接收:
<?phpnamespace App\Http\controllers;use Illuminate\Http\Request;class UserController extends Controller { public function update (Request $request, $id) { // }}
缓存路由
注意:缓存路由不支持闭包函数定义的路由,如果你想使你的路由被缓存,那么你应该使用控制器来管理你的路由.
如果你所有的路由都是基于控制器的路由,那么你应该使用laravel推荐的缓存路由,你可以简单的通过artisan命令来缓存所有路由注册到同一个文件里,它会替代routes.php文件被解析,使用这种缓存注册路由的方式在某些情况下注册路由的时间将被大大的减少,从而提高了应用的响应速度。但是每次添加新的路由或者删除路由时,为了使路由生效,你需要重新生成一次缓存路由:
php artisan route:cache
你可以通过下面的方式去删除路由缓存:
php artisan route:clear

여전히 인기있는 것은 사용 편의성, 유연성 및 강력한 생태계입니다. 1) 사용 편의성과 간단한 구문은 초보자에게 첫 번째 선택입니다. 2) 웹 개발, HTTP 요청 및 데이터베이스와의 우수한 상호 작용과 밀접하게 통합되었습니다. 3) 거대한 생태계는 풍부한 도구와 라이브러리를 제공합니다. 4) 활성 커뮤니티와 오픈 소스 자연은 새로운 요구와 기술 동향에 맞게 조정됩니다.

PHP와 Python은 웹 개발, 데이터 처리 및 자동화 작업에 널리 사용되는 고급 프로그래밍 언어입니다. 1.PHP는 종종 동적 웹 사이트 및 컨텐츠 관리 시스템을 구축하는 데 사용되며 Python은 종종 웹 프레임 워크 및 데이터 과학을 구축하는 데 사용됩니다. 2.PHP는 Echo를 사용하여 콘텐츠를 출력하고 Python은 인쇄를 사용합니다. 3. 객체 지향 프로그래밍을 지원하지만 구문과 키워드는 다릅니다. 4. PHP는 약한 유형 변환을 지원하는 반면, 파이썬은 더 엄격합니다. 5. PHP 성능 최적화에는 Opcache 및 비동기 프로그래밍 사용이 포함되며 Python은 Cprofile 및 비동기 프로그래밍을 사용합니다.

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
