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

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

humhubでCSSを追記する

humhubでオリジナルなCSSを追加したい。編集するファイルは
humhub\protected\humhub\assets\AppAsset.php

<?php

namespace humhub\assets;

use yii\web\AssetBundle;

class AppAsset extends AssetBundle
{

    /**
     * @inheritdoc
     */
    public $css = [
        'css/temp.css',
        'css/bootstrap-wysihtml5.css',
        'css/flatelements.css',
        'css/blueimp-gallery.min.css',
        'css/mystyle.css' #追加
    ];
<||

Humhubでダッシュボードに書き込みを置く

Humhubでダッシュボードに書き込みを置いてみた。
編集するのは
humhub\modules\dashboard\views\dashboard\index.php

<?php
/**
 * @var \humhub\modules\user\models\User $contentContainer
 * @var bool $showProfilePostForm
 */

use humhub\modules\dashboard\widgets\DashboardContent;
use humhub\modules\dashboard\widgets\Sidebar;
use humhub\modules\activity\widgets\Stream;
use humhub\widgets\FooterMenu;

use humhub\modules\post\widgets\Form; # 追加

?>

<div class="container">
    <div class="row">
        <div class="col-md-8 layout-content-container">
            <?= Form::widget(['contentContainer' => Yii::$app->user->getIdentity()]); ?> <!-- 追加 -->
            <?= DashboardContent::widget([
                'contentContainer' => $contentContainer,
                'showProfilePostForm' => $showProfilePostForm
            ]);
            ?>
        </div>

環境変数を使わずにopenssl_pkey_newを使う

Windows+Xampp環境だと、openssl_pkey_newが動かない。いろいろ設定頑張れば出来そうだけど、下記のようにソースコードにフルパス書けば成功することに気がついた。

$res = openssl_pkey_new([
 'config' => 'D:\xampp\apache\conf\openssl.cnf',
 'digest_alg' => 'sha1',
 'private_key_bits' => 4096,
 'encrypt_key' => false
]);

xserverでは、shell_execの一部が動かない

謎の仕様。Xserverではshell_execは使える。ところが

shell_exec('php -v')

を使うとプロセスが返ってこないし、

shell_exec('python -V')

だと結果がNULLになる。

この仕様のせいで、friendicaが使えなくて困った。

Xserverにgitをインストールする

ググった情報のコピペだけでは出来なかったよ。まず

wget https://github.com/git/git/archive/master.zip

はOpenSSLのバージョンの関係で失敗するので

wget https://www.kernel.org/pub/software/scm/git/git-2.17.0.tar.gz

にした。ところがmakeが出来なかった。

tar zxvf git-2.17.0.tar.gz
cd git-2.17.0
./configure --prefix=$HOME/opt
make -i all
make -i install
~/opt/bin/git --version

make -i でエラー無視インストールすると上手くいった。

Excelの書式を全て削除するマクロ

Excelで書式が増えすぎた場合は手で削除するのはムリ。マクロで一気に消しましょう。

Sub Excelの書式を全て削除()

    Dim myStyle As style

    On Error Resume Next

    For Each myStyle In ActiveWorkbook.Styles
    
        If Not myStyle.BuiltIn Then
            myStyle.Delete
        End If

    Next

End Sub

humhubをWindowsにインストールする

PHPSNS、どれを使うか悩んでいる。OXWALLは実際に運用したけど、すごく使いにくかった。Minds、Movimもイマイチ。Elggはバージョン3が中々出ない。というわけでhumhubにチャレンジ。Yiiフレームワークはあまり好きじゃないんだが…。

バージョンの注意事項

humhub 1.2以前はPHP7.2では動作しないので注意。PHPのバージョンを下げるか、humhub 1.3以降を使う。

ダウンロード

php.iniの設定

php.iniの「php_ldap.dll」「php_intl.dll」のコメントを外す。

composer-asset-pluginをインストール

D:\xampp\source\humhub>composer global require "fxp/composer-asset-plugin:^1.2.0"
Changed current directory to C:/Users/AppData/Roaming/Composer./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing fxp/composer-asset-plugin (v1.4.2): Downloading (100%)
Writing lock file
Generating autoload files

このあとcomposer Update。時間はかなりかかる。

f:id:laravel:20180623052348p:plain

LaravelでPHPUnitを使ってNo tests executed!

Laravel5.4でPHPUnit6を使ったときに「No tests executed!」が出る。Laravel5.4はPhpunit6に対応していないので、vendor内にあるphpunitを使うと解決できる。

php vendor\phpunit\phpunit\phpunit

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