LaravelでPHPUnitを使ってNo tests executed!
Laravel5.4でPHPUnit6を使ったときに「No tests executed!」が出る。Laravel5.4はPhpunit6に対応していないので、vendor内にあるphpunitを使うと解決できる。
php vendor\phpunit\phpunit\phpunit
Image source not readableの対処
大きな画像を送って「Image source not readable」が出た場合はphp.iniの「upload_max_filesize」の値を大きくすれば対処できる。
storeとupdateで共通で使えるバリデーション
storeとupdateでバリデーションを共通化したいけど、updateの時だけユニークチェックしたい。という時の書き方。あまりキレイじゃないね。。。
public function valid() { $validator = \Validator::make($this->toArray(), [ 'code' => 'required|max:255', ]); if ($this->id && !$validator->fails()) { $validator = \Validator::make($this->toArray(), [ 'code' => 'unique:titles,code,' . $this->id ]); } return $validator; }
Requestに値を入れてテストする
コントローラーをテストする時にRequestの変数に値を入れる。
$request = new Request; $request->merge([ 'name' => 'testname', ]); $controller = new \Lb\Http\Controllers\TitleController($request); $controller->update($request, 100); $title = Title::find(100); $this->assertEquals($title->name, 'testname');
長くなったLaravelのModelを分割
長くなったLaravelのModelを分割する方法の一つとして、私は上位モデルを使うときがある。
Titleモデルのうち、Updateに関する機能を独立させるときはこんな感じ。テーブル名を指定するのがポイント。
class TitleUpdate extends Title { protected $table = 'titles'; public function myvalidator($request) { return \Validator::make($request->toArray(), [ 'releasedate' => 'date_format:Y/m/d', ]); } }
PostgreSQLで大文字小文字検索
「iLIKE」を使えば、PostgreSQLで大文字小文字関係なく検索できる。
Mymodel::where('name', 'iLIKE', $name)->first();
Laravel5.3のログインをメールアドレス以外にする
Laravel5.3で、またやり方が変わったみたい。編集対象のファイルは
App\Http\Controllers\Auth\LoginController.php
public function username() { return 'username'; }
Laravel5.2からコンテナ登録方法が変わった
古い書き方
$this->app['myapp'] = $this->app->share(function($app) { return new Myapp; });
新しい書き方
$this->app->singleton('myapp',function($app) { return new Myapp; });
Laravel5でajax
Laravel5.2系の古いバージョンでajax動かしていたんだけど、5.2系の新しいバージョンだと動かない。よくわからないけどTOKEN入れないとダメらしい。
js側
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
ヘッダ
<meta name="csrf-token" content="{{ csrf_token() }}" />
Laravelのmigrate:resetで外部キーエラー
Laravelで
php artisan migrate:reset
したら、以下のエラーが出た。外部キー関連のエラー。
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or upda te a parent row: a foreign key constraint fails (SQL: drop table if exists `tags`)
dropする順番間違えていた。先にキーの関連付けテーブル消すべきだった。以下が正しい順番。
public function down() { Schema::dropIfExists('title_tag'); Schema::dropIfExists('tags'); }
Laravelのログインをメールアドレス以外にする
AuthControllerに「protected $username = 'name';」を足す。
<?php namespace Song2\Http\Controllers\Auth; use Song2\User; use Validator; use Song2\Http\Controllers\Controller; use Illuminate\Foundation\Auth\ThrottlesLogins; use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; class AuthController extends Controller { /* |-------------------------------------------------------------------------- | Registration & Login Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users, as well as the | authentication of existing users. By default, this controller uses | a simple trait to add these behaviors. Why don't you explore it? | */ use AuthenticatesAndRegistersUsers, ThrottlesLogins; protected $username = 'name'; /** * Where to redirect users after login / registration. * * @var string */ protected $redirectTo = '/';
XserverにLaravelを置くときの.htaccess
<IfModule mod_rewrite.c> suPHP_ConfigPath /home/MyServerName/MyDomain/xserver_php/ AddHandler x-httpd-php5.5 .php .phps AddHandler fcgid-script .php .phps FCGIWrapper "/home/MyServerName/MyDomain/xserver_php/php-cgi -c /home/MyServerName/MyDomain/xserver_php/php.ini" .php FCGIWrapper "/home/MyServerName/MyDomain/xserver_php/php-cgi -c /home/MyServerName/MyDomain/xserver_php/php.ini" .phps <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
LaravelのPHPUnitでログインする
LaravelのPHPUnitでログインする。
class AccessTest extends TestCase { public function setUp() { parent::setUp(); $user = \App\User::where('name', 'dummy')->first(); $this->be($user); } public function testBasicExample() { $this->visit('home'); } }