ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

XserverのPHPでエラー

Laravel5.3をXserverで動かそうとしたらエラーになった。

 [ERROR] Use of undefined constant STDIN - assumed 'STDIN'

bootstrap/autoload.phpの先頭にdefine('STDIN', fopen('php://stdin', 'r'));を置いたら収まった。何だったんだ。

<?php

define('LARAVEL_START', microtime(true));
define('STDIN', fopen('php://stdin', 'r'));

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');
    }
}

phpdocを準備しないで使う

私はphpDocumentorが好きなんだけど、Windows上だとインストールが大変苦労する。なので「phpDocumentor.phar」から直接実行している。

phpDocumentor.pharをダウロードする

ここにphpDocumentor.pharがあるのでダウンロードする。
github.com

phpDocumentor.pharを実行したいフォルダに置く

私はLaravelのartisanがある場所と同じところに置いている。

実行する

php phpDocumentor.phar -d app/

Windows Xammp環境にphpcsをインストールする

Windows Xammp環境だとphpcsのバージョンは1.3でだいぶ古い。これだとPSR2が使えない。最新のバージョンをインストールする。

pear install PHP_CodeSniffer-2.5.0
phpcs --config-set encoding utf-8
phpcs --config-set default_standard PSR2

参考サイト

PHP CodeSniffer ルールセットのカスタマイズ方法
blog.apar.jp

pear上でのインストールに失敗する

Pearの作業フォルダのデフォルトはCドライブなので、インストールに失敗することがある。

D:\xampp\source\futari>pear install PHP_CodeSniffer-2.5.0
downloading PHP_CodeSniffer-2.5.0.tgz ...
Starting to download PHP_CodeSniffer-2.5.0.tgz (480,157 bytes)
done: 480,157 bytes
ERROR: failed to mkdir C:\php\pear\tests\PHP_CodeSniffer\CodeSniffer\Core\File

正しいパスに変更する。

pear config-set doc_dir D:\xampp\php\pear
pear config-set cfg_dir D:\xampp\php\pear
pear config-set data_dir D:\xampp\php\pear
pear config-set test_dir D:\xampp\php\pear
pear config-set www_dir D:\xampp\php\pear

WindowsのXampp環境でphpDocumenterをインストールする

7-Zipが入っているにも関わらず「ERROR: unable to unpack」エラーが出る。どうやら旧バージョンじゃないと解凍できないみたい。

pear channel-discover pear.phpdoc.org

pear uninstall phpDocumentor

pear install phpdoc/phpDocumentor-2.8.1

Laravelでファイルを生成せずにファイルダウンロード

Laravelでファイルを生成せずにファイルダウンロードしたときのメモ

$stream = fopen('php://temp', 'w');

foreach (Title::all() as $title) {

  fputcsv($stream, $title->toArray());

}

rewind($stream);

$csv = mb_convert_encoding(str_replace(PHP_EOL, "\r\n", stream_get_contents($stream)), 'SJIS', 'UTF-8');

$headers = array(
  'Content-Type' => 'text/csv',
  'Content-Disposition' => 'attachment; filename="' . $filename . '"'
);

return Response::make($csv, 200, $headers);