HTTP コントローラー
概要
コントローラーを使用すると、効果的な管理のために、対応するルーティング ビジネス ロジックをコントローラー クラスにカプセル化できるため、そのロジックは次のとおりです。 Routes.php ファイルに集中しているため、コードが肥大化して保守が困難になります。すべてのコントローラー クラスは、app/Http/Controllers ディレクトリに保存されます。
Basic Controller
基本コントローラーは、AppHttpControllersController コントローラー クラスを継承する必要があります。
<?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 メソッドが実行され、ルート内のパラメータがこのメソッドに直接渡されます。
Controller & Namespace
コントローラーのルーティングを定義する場合、コントローラーの名前空間を指定する必要はなく、クラス名のみを指定する必要があることを知っておく必要があります。これは、RouteServiceProvider ファイルに自動的にロードされる Routes.php ファイルがすでに指定されているためです。ルーティング グループ AppHttpControllers のルート名前空間;
AppHttpControllers ディレクトリ内の php 名前空間を使用してコントローラーをネストまたは整理する場合は、AppHttpControllers 部分に関連するクラス名を指定するだけで済みます。 。したがって、コントローラーのクラス名全体が AppHttpControllersPhotosAdminController である場合、次のようにコントローラー ルートを定義できます。
Route::get('foo', 'Photos\AdminController@method');
名前付きコントローラー ルート
名前付きルートを定義するのと同じように、名前を付けることもできます。コントローラー ルート:
Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);
ルートに名前を付けると、ルート ヘルパー メソッドを通じて名前付きルートのリソース表現アドレスをすばやく生成できます:
$url = route('name');
コントローラー ミドルウェア
ミドルウェアは次のようにコントローラー ルートに割り当てることができます。
Route::get('profile', [ 'middleware' => 'auth', 'uses' => 'UserController@showProfile']);
もちろん、コントローラー クラスでミドルウェアを直接使用してミドルウェアを割り当てることもできます。また、クラス内の特定の動作のみを許可することもできます。
class UserController extends Controller { public function __construct() { $this->middleware('auth'); $this->middleware('log', ['only' => [ 'fooAction', 'barAction' ]]); $this->middleware('subscribed', ['except' => [ 'fooAction', 'barAction' ]]); }}
RESTful リソース コントローラー
リソース コントローラーは、RESTful コントローラーをすばやく構築できます。職人コマンドを使用すると、以下を簡単に作成できます。
php artisan make:controller PhotoController --resource
このコマンドは、appHttpControllersPhotoController.php ファイルを生成し、リソース コントローラーには、使用可能な各リソース操作に対応するメソッドが含まれます。次の方法でリソース ルートを登録できます。
この単純な宣言により、RESTful リクエストを処理するための複数のルートが作成されます。対応するリソース コントローラーは、コマンドを通じて生成されます。これらのリクエストに対しても、対応する処理メソッドが設定されます。 .
Route::resource('photo', 'PhotoController');
リソースコントローラーによって処理される動作
部分资源路由
有时候你可能并不想控制器处理全部的请求方式,那么你可以这么做:
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

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ホットトピック









