2017/08/06
Laravel5.4 MySQLと接続その2の続きです。
おさらい(手順)
- php artisan make:model テーブル名(頭大文字単数形) -m でマイグレーションファイルとModelのPHPファイルを作成
- マイグレーションファイルを編集してテーブルのカラムを定義
- php artisan migrateでテーブル作成
- インストールフォルダ/Appの下のモデルファイルに protected $fillable =['カラム名','カラム名','カラム名'];を追記(編集していいカラム名)
- 手動でテーブルデーターを入力
- viewを作る。下の12の変数名を埋め込む
- web.phpでModelフィルをuseして変数=モデル内クラス::all();
-
return view('article',compact('変数名'));
とわかったようなわからない手順でした。
controlerからモデルにアクセスしてデータをviewに渡す
今回は上記7の手順をコントローラーにしてもらいます。
artisanを使います。
php artisan make:controller コントローラー名
コントローラー名はFooControllerのようなパスカル記法(単語の頭が大文字)がお作法のようです。
MySQLのArticleテーブルに対するコントローラーを作成しようと思います。インストールフォルダに移動して
php artisan make:controller ArticleController
これでインストールフォルダ/app/Http/Controllerの中にArticleController.phpが作成されました。
ArticleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
//
}
クラスの内容が空のファイルが作成されました。このクラス内に処理を書きます。
クライアントからサイトにアクセスがあるとweb.phpでviewを指定するのですがその時にcontroller(のメソッド)の指示でDBからデータを取得したり、登録したり、処理の結果をviewに渡すようにします。ですから今回はmodelからデータを引っ張ってきてすべてのデータを渡します。
modelは手順4(Laravel5.4 MySQLと接続その2)でできていますすべてのデータはmodelを呼んでテーブル名::all();で取得できます。今回はArticleController.phpにindexクラスを作りその中で$article = Article::all();をしてviewに返してあげます。
ArticleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Article; // モデルを呼ぶのに必要
class ArticleController extends Controller
{
public function index(){
$article = Article::all();
return view('article', compact('article'));
}
}
これでコントローラーからモデルを呼んですべてのデータを取得して$articleでそのデータを渡してあげられます。$articleは配列になるので複数形の$articlesの方がよかったですが、前回単数形でviewも作ってしまったので気にせず行きます。
あとはweb.phpでコントローラを呼ぶようにしてあげれば完成です。
前回のRouteが残っている場合は消します。
web.php
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/article','ArticleController@index'); // articleにアクセスがあったらArticleControllerのindexメソッドを実行せよ
それで、上記のコントローラーのメソッドが呼ばれてモデルからデータを取得。articleという配列をviewのarticleにreturnしてね。
viewのarticleはLaravel5.4 MySQLと接続その2の時と同じです。
簡単ではありますが、laravel5.4でのMVCモデルを実行してみました。