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

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

Pydio vs Owncloud

ファイル管理のためのソフトが欲しかったけど、PydioとOwncloudのどっちが便利か悩んで決められなかった。だから両方ともサーバに入れてみた。

ところがOwncloudはちょっとバージョンアップしたらぶっ壊れてしまった。Pydioは5.2から6.0のバージョンアップもマウスクリックだけで無事終了。今後はPydio一本で行こう。でもPydioのAndroidクライアントの使いにくさはなんとかしてほしい。

Perlでn次ハッシュを使った時のメモ

Perlでn次ハッシュを使った時のメモ

use strict;

use warnings;

my %hash;

my @array1 = ('1','2','3');

my @array2 = ('a','b','c');

my @array3 = ('A','B','C');

foreach my $value1 (@array1) {

	foreach my $value2 (@array2) {

		foreach my $value3 (@array3) {

			push(@{$hash{$value1}{$value2}},$value3);

		}

	}
}

foreach my $key1 (keys(%hash)) {

	my %hash2 = %{$hash{$key1}};

	foreach my $key2 (keys(%hash2)){

		foreach (@{$hash{$key1}{$key2}}) {

			print "$_ ";

		}

	}
}

出力結果は

A B C A B C A B C A B C A B C A B C A B C A B C A B C

あんまり意味ないな。

4つの言語の感想

書くネタが無いので。

Perl → 昔は大好きだったけど、古くなりすぎた気がする。
Python → 楽しい。Pycharmエディタが便利。でもPython3の情報をググって読むのは大変。
PHPCMSとLaravel使うときだけ。
Ruby → 便利そうだけど覚える気はない。

Eloquentを使ってfindの前後を取得する

Eloquentを使ってfindの前後を取得するテクニックがあった。
How to get previous / next records in DB with Eloquent. (Page 1) / Laravel 3.x Code Samples / Laravel Forums

なるほど、モデルにそういうメソッドを追加すればいいのか。

idだったら上記のテクニックでOKだけど、id以外の要素だと工夫が必要だね。

public function get_next()
{
  return static::where('votes', '<', $this->votes)
    ->where('subject', $this->subject)
    ->orderBy('votes','DESC')
    ->first();

}

public function get_previous()
{
  return static::where('votes', '>', $this->votes)
    ->where('subject', $this->subject)
    ->orderBy('votes','DESC')
    ->first();
}

LaravelのEloquentでID値が指定できない

下記のようにidを指定してcreate()しても、指定した数ではなくて通番になっていた。

$name = Name::find(4);

Title::create(['id' => $name->id])

モデル上でidを保護しているのが原因だった。

<?php

class Title extends Eloquent {

  protected $guarded = ['id'];

モデルの保護を全消したら想定通りの動作になった。

<?php

class Title extends Eloquent {

  protected $guarded = [];

さくらのレンタルサーバにLaravel4.2をインストール

以前にも似たエントリ書きました。 さくらのレンタルサーバにLaravelをインストール - ふたりはララベル (Laravel PHP Framework)

以前との違いは

です。

インストールディレクトリを決める

今回は以下のフォルダに作ることにしました。

/home/mysakura/source

Composerをインストールする

例によってレンタルサーバにComposerをインストールする - ふたりはララベル (Laravel PHP Framework)を参照してください。composer.pharの置き場所は/home/mysakura/sourceです。

laravelをインストールする

以下のコマンドを実行すればインストールが始まります。

php composer.phar create-project laravel/laravel myproject --prefer-dist
Installing laravel/laravel (v4.2.11)
  - Installing laravel/laravel (v4.2.11)
    Downloading: 100%

Created project in myproject

シンボリックリンクを貼る

publicフォルダにシンボリックリンクを貼ります。

ln -s /home/mysakura/source/myproject/public/ /home/mysakura/www/myproject

ここでhttp:://mysakura.jp/myprojectにアクセスしてもまだエラーが出ます。

htaccessを編集する

htaccessのパスは

/home/mysakura/source/myproject/public/.htaccess

です。
「Options -MultiViews」の行をコメントアウトしてください。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        #Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

これでhttp:://mysakura.jp/myprojectにアクセスすればLaravelのアイコンが出ます。

LaravelのWorkbenchでdb:seedを実行する

LaravelのWorkbench内にSeederを作ってdb:seedしたい。

まず以下のフォルダを作る。

workbench\your_vendor_name\your_package_name\src\database\seeds

seedsフォルダ内で普通にSeederを作る。ちなみに以下の例ではFakerを使ってSeederを作ってみた。

<?php

use Faker\Factory as Faker;

class FakerSeeder extends Seeder
{

  public function run()
  {
    $faker = Faker::create();
    
    foreach(range(1, 100) as $index){
      
      Title::crate(['name' => $faker->name]);
      
    }
  }
}

workbenchのcomposer.jsonに最初に作ったseedsフォルダのパスを記述する。

"autoload": {
  "classmap": [
    "src/controllers",
    "src/database/seeds",
    "src/migrations",
    "src/models",
    "src/views"
  ]
}

dump-autoloadする。これで準備完了。

php artisan dump-autoload

あとはphp artisanで db:seedを実行する。

php artisan db:seed --class=FakerSeeder

Bootstrapのモーダルで枠外をクリックしても解除させない

Bootstrapで、モーダルウィンドウの枠外をクリックしても解除させないためには「data-backdrop="static"」を設定する。

<div class="modal hide fade" data-backdrop="static" id="myModal">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal">×</button>
    <h3>Settings</h3>
  </div>
  <div class="modal-body">
    <p>Here settings can be configured...</p>
  </div>
  <div class="modal-footer">
    <a href="#" class="btn" data-dismiss="modal">Close</a>
    <a href="#" class="btn btn-primary">Save changes</a>
  </div>
</div>

phpMyAdminからXMLエクスポートしたファイルをPHPで扱う

phpMyAdminからXMLエクスポートしたファイルをPHPで扱ったときのメモ。

$xmlData = simplexml_load_file('dare_comments.xml');

foreach ($xmlData->database->table as $xml) {

  $data = [
    'id' => $xml->column[0],
    'name' => $xml->column[1],
  ];

  Title::create($data);

}

Laravelでworkbenchのconfigをコピーする

Laravelでパッケージのconfigをコピーするときはconfig:publishを使う。

# php artisan config:publish vendor/package

しかし自作パッケージの場合は失敗する

# php artisan config:publish myvendor/mypackage

  [InvalidArgumentException]
  Configuration not found.

自作パッケージの場合はパスまで指定しよう。

# php artisan config:publish --path=workbench\myvendor\mypackage\src\config myvendor/mypackage

OctoberCMSをインストールしてみた

Wordpressに飽きてきたので、OctoberCMSをインストールしてみた。install.phpを使うとインストール前チェックでエラーが出るので、Composerを使ってインストールしたら成功した。

下記ページの「Composerによるコマンドラインからのインストール」に従えば出来る。
Laravel製のCMS 「October」 のインストール ~back to basics~|October CMS|スタッフブログ|京都のホームページ制作 株式会社Nextat(ネクスタット)

さっそくブログ用プラグインの「RainLab.Blog」を入れてみたけど、そもそもOctoberCMSの使い方がよくわからない。カスタマイズ前提なので敷居が高い。日本語情報サイトが増えるのを待つか…。