PHPもSQLもわからないけどLaravelをやる為のメモ
いよいよ業務でphpをやらなければなくなったので、自分用のメモとして残そうと思います。
見てもあまり参考にならないと思います。
Composerについて
phpをインストールする際に、Composerを利用すると便利っぽいです。
npmのようなものでしょう。
Composerは、PHPプログラミング言語向けのソフトウェアおよび必要なライブラリの依存関係を管理する標準形式を提供するアプリケーションレベルのパッケージ管理システムである。 Composer - ウィキペディア
Homebrewの場合は以下でインストール
brew install composer
laravelをインストールしてプロジェクトを起動する
インストール
composer global require "laravel/installer"
プロジェクトを作成
laravel new hogehoge
ファイル構成は以下
. ├── app ├── artisan ├── bootstrap ├── composer.json ├── composer.lock ├── config ├── database ├── package.json ├── phpunit.xml ├── public ├── resources ├── routes ├── server.php ├── storage ├── tests ├── vendor ├── webpack.mix.js └── yarn-error.log
もし実行時に、以下のエラーが出た場合は環境変数を変更する必要があります。
-bash: laravel: command not found
環境変数を変更。
export PATH="~/.composer/vendor/bin:$PATH"
環境変数を確認。
echo $PATH
ローカルサーバーを立ち上げ
cd hogehoge php artisan serve
こんな画面が起動します。
WEBのルーティングを変更
webのルーティングを変更する場合は以下のファイルを変更する。
src/routes/web.php
こんな感じで設定していきます。
Route::get('/', function () { return view('welcome'); }); Route::get('about', function () { return view('about'); });
ルートティングでパラメーターを設定する
ルーティングを設定する際に、/detail/1のようにURLのパスをパラメーターとして設定したいことはよくある。
設定方法としては、以下のような感じになる。
Route::get('/detail/{id}', function ($id) { });
ルーティングにcontrollerクラスを利用する
ルータの設定に直接controllerクラスを指定する場合は、以下のように指定する。
※パラメーターの最後に?をつけると、未設定も許容するようになる。
Route::get('/hello/{name?}', 'HelloController@hello');
controller
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class HelloController extends Controller { public function hello($name='suzuki') { return view('hello', ['name' => $name]); } }
関数を指定しない場合は、controller側で__invokeを利用する。
Route::get('/hello/{name?}', 'HelloController');
controller
class HelloController extends Controller { public function __invoke($name='suzuki') { return view('hello', ['name' => $name]); } }
WEBのViewを変更
合わせて表示するViewの設定もみていきます。
webのViewを変更する場合は以下のファイルを変更する。
welcome.blade.phpの.bladeの部分はlaravelのテンプレートエンジンのようです。
src/resources/views ├── resources │ └── views │ ├── about.blade.php │ └── welcome.blade.php
viewへ変数を渡す
routerからviewに変数をおくってみます。
※普通routerから変数を送ったりするのかはよくわかりません。
src/routes/web.php
Route::get('/', function () { return view('welcome',[ 'name' => 'Suzuki' ]); });
src/resources/views/welcome.blade.php
<h1>Hello,<?= $name; ?></h1>
結果
withをつかってviewに変数を渡す
Route::get('/', function () { return view('welcome') -> with('name','Kato'); });
compactをつかってviewに変数を渡す
Route::get('/', function () { $name1= 'Tanaka'; $name2 = 'Sasaki'; return view('welcome',compact('name1','name2')); });
配列とかも渡せます。
Route::get('/', function () { $tasks = [ 'Tanaka', 'Sasaki', 'Kato' ]; return view('welcome',compact('tasks')); });
それをfor文したり。
<?php foreach ($tasks as $task) : ?> <li><?= $task; ?></li> <?php endforeach; ?> <!--これでもOK--> @foreach ($tasks as $task) <li>{{$task}}</li> @endforeach
データベースに関する設定
データベースに関する設定は以下のファイルを変更する。
src/config/database.php
環境ごとの設定
開発環境やステージング環境、本番環境など、環境毎での設定は以下のファイルを変更する。
src/.env
このあたりをDBの設定にあわせて修正する。
DB_HOST=host DB_DATABASE=database DB_USERNAME=username DB_PASSWORD=password
.envファイルはキャッシュが優先されるので、キャッシュをクリアする。
php artisan config:cache
ModelからDBに値を入れてみる
①テーブルを作る
↓のようなテーブルをまずつくります。
CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(80) NOT NULL DEFAULT '', `email` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), UNIQUE KEY(`email`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
②Modelクラスをつくる
Modelクラスを作る
php artisan make:model Models/User
Modelsフォルダ配下にUser.phpが作成されます。
中身は一旦↓のようにします。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = 'users'; protected $primaryKey = 'id'; protected $guarded = ['id']; //create()、fill()、update()で値が代入されない public static function create_user($param) { $item = null; \DB::transaction(function() use($param, &$item) { $data = [ 'name' => 'taro', 'email' => 'taro@sample.co.jp', 'password' => '12345678', ]; //データを追加 $item = self::create($data); }); return $item; } public static function get_user($param) { } }
controllerは以下のようにします。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class HelloController extends Controller { public function users() { $param = [ 'name' => 'taro', 'email' => 'taro@sample.co.jp', 'password' => '12345678' ]; $users = User::create_user($param); return view('user', $users); } }
viewはこんな感じ。
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <table> <tr> <th>id</th> <td>{{$id}}</td> </tr> <tr> <th>名前</th> <td>{{$name}}</td> </tr> <tr> <th>email</th> <td>{{$email}}</td> </tr> </table> </body> </html>
結果はこんな感じ。
phpコマンド
# バージョン確認 php -v # ローカルサーバーを起動 php artisan serve #laravelコマンド一覧を表示 php artisan #controllerを作成 php artisan make:controller HogeController #階層を持ったcontrollerを作成 php artisan make:controller Hoge/HogeController
まとめ
phpがよくわかっていないのでハマります。。。