インストール
http://readouble.com/laravel/5/0/dev/ja/installation.html
に従ってインストール。
1.ドキュメントルートは生成したプロジェクトのpublicディレクトリに設定する。
2.プロジェクトのディレクトリ内でphp artisan key:generateを実行する
3.app/storage/をHTTPサーバが書き込み可能にする
4.app/storage/sessions/をHTTPサーバが書き込み可能にする
5.apacheを使っている場合、ドキュメントルートの「AllowOverride」を「All」に変更する
Laravel4のインストールと初期設定|Laravel|PHP|開発ブログ|株式会社Nextat(ネクスタット)
インストール(5.3、2017/01/25追記)
composer require "laravel/installer" laravel new project #laravelコマンドはvender/binにあるので適時 cd project composer update #これやらないと謎のエラーがでる chmod -R 777 storage chmod -R 777 bootstrap/cache mv .env.example .env php artisan key:generate php artisan config:clear
インストール 5.3 Laravel
さくらのVPS(CentOS7)にLaravel5.3をインストールする - Qiita
Hello Laravel 5! しようとしたら一瞬つまづいた時の対応 - Qiita
Laravel、デモ画面までに行き着かなかったら
routes/web.phpにルーティングを書いても反映されない
ドキュメントルートを設定したhttpd.confのDirectoryタグのAllowOverrideをAllにする
Laravelでroutingは合ってるはずなのに404not foundが出るときにやること|Laravel|私の生き方にタイトルなど要らない
return Redirect::to('')->withInput()
パラメータをリダイレクト先でも使用出来るようにする。
リダイレクト先ではInput::old()を使ってアクセスする
Viewでデータを加工したい
- Modelで頑張る
- Viewに処理を書く
- robclancy/presenterを使う
robclancy/presenterのインストール
Model
public function(Request $request){ $model->fill($request->all())->save(); return view("hoge"); }
Modelクラスを継承した場合、fillを使うとprotected $fillableに書かれたもの以外の値は無視される。
なので、$request->all()を使用すると楽。カラム名がコントローラに記載されないので、DBとHTMLのパラメータが一致するならなお楽。
jsonとして出力する時、リレーションの対象になっているテーブルの値も出したい
namespace App; use Illuminate\Database\Eloquent\Model; class Hoge extends Model { protected $fillable = []; public function user(){ //Hogesテーブルのuser_idを元にリレーションを構成。 return $this->belongsTo('App\User'); } } Hoge::create($data)->with('user')->get();
withを使用しないと遅延ローディングの影響でjsonとしては出力されないっぽい。
withは自分自身のクラスに定義されたメソッド名を指す。また、jsonのキー名としても使用される為、必要に応じてメソッド名を変更すると良い。
Controller
コントローラとURLの紐付け
コントローラのメソッド名をURLにする事が出来る。
楽ちんではあるけど、コントローラのメソッド名変わる時に大変そうなので注意が必要。
routes
Route::controller('url名', 'HogeController');
controller
class HogeController extends BaseController { #HTTPのPOSTで「url名/aaa」でアクセスすると、jsonが取得出来る #HTTPのGETで取得したい場合、prefixはgetになる public function postAaa(){ return Response::json([ "test" => "はらへった" ]); } }
参考:LaravelでRest APIを開発する | Webエンジニアブログ
参考:Controllers - Laravel - The PHP Framework For Web Artisans
フォームからのファイルが渡ってこない
formの属性にenctype="multipart/form-data"を追加する
テーブルのマイグレーション
php artisan migrate:make クラス名
上記のコマンドが使えない場合は、appフォルダの親までディレクトリを移動すると良い。
app/database/migrations/に上記クラス名に日付がついたものが生成される。
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateHogeTable extends Migration { public function up() { Schema::create("hoge", function(Blueprint $table){ #自動採番 $table->increments('id'); #$table->date('created_time'); #タイムスタンプ。default now()にしたい場合は下記のようにする $table->timestamp('created_time')->default(DB::raw('CURRENT_TIMESTAMP')); #stringはvercharらしい $table->string('title'); #text型を使いたい場合はtextメソッドを使う $table->text('body'); }); } public function down() { } }
upメソッドには追加のSQL文を。
downメソッドには追加を取り消すSQL文を書く。
upメソッドのみ書いても動くが、バージョンを下げたい時には苦労するのだと思われる。
php artisan migrate
実行されていないマイグレーションが全て実行される。
参考:初めてのLaravel(PHP Framework) - Qiita
参考:Laravel のマイグレーションで MySQL の COMMENT を扱う - takaya030の備忘録
エラーと対応策
ServerException in Client.php
ServerException in Client.php line 370: MOVED 15807 10.0.0.243:6379
ElastiCacheのRedisを設定した場合におこる。
database.phpの設定を変更すると解決する場合がある
'redis' => [ 'client' => 'predis', 'clusters' => [ 'default' => [ [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, ], ] ] ],