コントローラの利用
コントローラ:webページの具体的な処理を行う。MVCアーキテクチャの基本となるもの
MVCアーキテクチャ
Model:データ処理全般担当(データベースアクセスに関する処理全般)
View:画面表示担当
controller:全体の制御担当。必要に応じてModelをつかってデータを取得したり、Viewをつかって画面表示する
つまりwebアプリケーションにアクセスするとコントローラーが処理を行う。必要に応じてビューやモデルをつかって画面表示やデータベースを扱う。
コントローラーの作成
コントローラーはPHPスクリプトファイルとして作成。artisanコマンドを使用。
php artisan make:controller コントローラー名
コントローラーはapp/Http/Controllers内に作成
アクションを追加
コントローラーに処理を追加することです。
メソッドの形で記載する
記載した後アクションを使うためにアクションにルートを割り当てる設定が必要
ルート情報の準備
routesフォルダ内web.phpにて
Route::get('hello''コントローラー名@アクション名')
こういった記述をする。これによって
第一引数(今回はhello)のアドレスにアクセスすると第二引数(コントローラー名@アクション名)に記載されたアクションが実行される
第一引数ではルーティングの追加で記載した任意パラメータと必須パラメータがあります。任意パラメータをとアクセス時に引数を記載しなくてもエラーにならない
複数アクションするとき
まずコントローラーに二つアクションするためのメソッドを記述する。
ex)
class HelloController extends Controller
{
public function index() {
global $end;
$html =
'<a href="/hello/other">go to Other page</a>' //aタグを押したらotherへ飛ばす
. $end;
return $html;
}
public function other() {
//処理を記載
}
}
つづいてroutesでルーティングする
ex)
Route::get('hello','HelloController@index');
Route::get('hello/other','HelloController@other');
このようにすることで複数のページに対応できる
アクションとアドレスの関係はwebの暗黙の了解に従うこと
シングルアクションコントローラー
複数アクションを用意するのとは逆に「一つのコントローラーに一つのアクションしか用意しない」というスタンスの設計
この場合シングルアクションコントローラーとしてクラスを用意する
class コントローラ extend Controller
{
public function __invoke() {
//アクション処理
}
}
見てわかる通り「__invoke」というメソッドを使う
ちなみにinvokeは「呼び出す」という意味です。
ルート情報の設定としては
Route::get('アドレス名','コントローラー名');
とすればよい
RequestとResponse
リクエスト:クライアントからサーバーに送られる情報
レスポンス:サーバーからクライアントに返送される情報
アクションメソッドの引数定義
Request,Responseを利用するためにuse文を追記
use Illuminate\Http\Request;
use Illuminate\Http\Respomse;
これで両方のクラスが使える
アクションメソッドの引数に盛り込む
public function index(Request $requst,Response $response){
//アクション処理
}
Reqestの主なメソッド
$request->url(); ①
$request->fullUrl(); ②
$request->path(); ③
①:アクセスしたurlをクエリー一文字列省略して返す
②:アクセスしたurlを完全な形で返す
③:ドメイン下のパスだけ返す
Responseの主なメソッド
$this->status(); ①
$this->content(); ②
$this->setContent(値); ③
①:アクセスに関するステータスコード(正常なら200)
②:コンテンツの取得
③:引数の値にコンテンツを更新