[5.6]concrete5のパッケージにLaravel5を組み込む
2015.04 20

[5.6]concrete5のパッケージにLaravel5を組み込む 環境 ディレクトリ構成は、CPI ACE01 SSHではphpコマンドを打てないので、ローカルで諸々の環境を作ってからサーバー上で展開 ローカルのPH […]

[5.6]concrete5のパッケージにLaravel5を組み込む

環境

  • ディレクトリ構成は、CPI ACE01
  • SSHではphpコマンドを打てないので、ローカルで諸々の環境を作ってからサーバー上で展開
  • ローカルのPHPはphpenvで環境にあわせてバージョンを指定
└── html
    ├── blocks
    ├── concrete
    ├── config
    ├── controllers
    ├── css
    ├── elements
    ├── files
    ├── helpers
    ├── jobs
    ├── js
    ├── languages
    ├── libraries
    ├── mail
    ├── models
    ├── packages
    ├── packages
    │   └── example
    │       ├── controllers
    │       │   └── dashboard
    │       │       └── example
    │       │           └── sandbox
    │       ├── laravel
    │       └── single_pages
    │           └── dashboard
    │               └── example
    │                   └── sandbox
    ├── page_types
    ├── single_pages
    ├── themes
    ├── tools
    └── updates

Laravel5の導入

composerインストール

  • プロジェクトのルートディレクトリにcomposerをインストール
  • ローカルで運用
> curl -sS https://getcomposer.org/installer | php

Laravel5のインストール

> php composer.phar create-project laravel/laravel html/packages/example/laravel --prefer-dist

composer.jsonにForm・HTMLヘルパーを追加

Upgrade Guide – Laravel – The PHP Framework For Web Artisans

    "require": {
        "laravel/framework": "5.0.*",
        "laravelcollective/html": "~5.0" // 追加
    },

Call to undefined method Illuminate\Foundation\Application::getCachedCompilePath()

先ほど追加したForm・HTMLヘルパーを入れるためにupdateを実行して上記エラーが出た場合の対処

Call to undefined method Illuminate\Foundation\Application::getCachedCompilePath() · Issue #8127 · laravel/framework

> rm vendor/compiled.php
> php composer.phar update

パッケージ内のコントローラーからLaravel5を読み込む

パッケージのパスを取得して、autoload.phpなどをrequireしていく
concrete5 :: Get the Package Path in a Dashboard Single Page Controller

<?php
defined('C5_EXECUTE') or die("Access Denied.");

use \App\User;

class DashboardExampleSandboxController extends DashboardBaseController {

    public $helpers = array('html', 'form');

    public $laravel;

    public function on_start() {
        parent::on_start();
        $packagePath = Package::getByID($this->c->pkgID)->getPackagePath();
        require $packagePath . '/laravel/bootstrap/autoload.php';
        $this->laravel = require_once $packagePath . '/laravel/bootstrap/app.php';
    }

    public function view() {
        // Laravel5標準の認証用ユーザーモデル
        $user = new User();
    }

まとめ

強引な方法だけれども、Laravel5内のリソースにアクセスできた。Eloquentも普通に使えるはずなので検証を継続。

もっとスマートな方法があれば情報求む。

情報提供

パッケージコントローラーのon_start()で読み込むとスッキリだった。あとはPSR-0準拠として、Laravel側のnamespaceを置き換えれば良さそう

この記事へのコメント

Sublime Text 2 + MAMP + Xdebug でPHPデバッグをする方法
2012.12 18

Sublime Text 2(以下、ST2)がすっかりメインエディタに定着したのですが、デバッグ環境が未整理でした。そういえば・・・と思って探してみると、やはりプラグインがありました。ST2とMAMPによるPHPデバッグ環境の導入方法を解説します。

MAMPのphp.iniに設定を追加する

MAMPを使用している場合、私はPROなのでファイルメニュー -> テンプレートを編集 から編集できますが、PROでない場合はphp.iniを直接開いての編集となります。各phpバージョンごとに設定が必要なので、利用環境に合わせて設定を追加していきます。例えば以下。zend_extensionの部分はコメントアウトされているだけなので、行頭のセミコロンを削除でOKです。

[xdebug]
zend_extension=“/Applications/MAMP/bin/php/php5.3.14/lib/php/extensions/no-debug-non-zts–20090626/xdebug.so”
xdebug.remote_enable=On
xdebug.remote_host=“localhost”
xdebug.remote_port=9000
xdebug.remote_handler=“dbgp”
xdebug.remote_autostart=Off
xdebug.profiler_enable = On
xdebug.profiler_dir = “/Applications/MAMP/tmp/php5.3.14/xdebug/”
xdebug.collect_vars=on
xdebug.collect_params=4
xdebug.dump_globals=on
xdebug.dump.GET=*
xdebug.dump.POST=*
xdebug.show_local_vars=on

SublimeXdebugを追加する

SublimeXdebugというXdebugクライアントのプラグインがあります。実行すると、ST2上にXdebugによるPHPデバッグメニューとデバッグ状況を表示する分割ウィンドウを表示します。

.sublime-projectファイルに設定を追加する

ST2のプロジェクトとして保存している場合は、以下の様な設定を追加します。例えばWordPressを利用時にwpフォルダを作っている場合は、http://your.web.server/wpと記述します。


{
    "folders":
    [
        {
            "path": "..."
        },
    ],

    "settings": {
        "xdebug": { "url": "http://your.web.server" }
    }
}

ブレークポイントを指定する

ST2上で止めたい処理の行で Shift + F8 を押し、Add/Remove Breakpoint を実行します。すると行番号の左に●が表示されます。デバッグ実行時に該当する行まで処理がくるとストップして、そこの部分で現在の変数はどうなっているか?といった情報を確認できます。

デバッグを開始する

Shift + F8 でクイックメニューが表示されます。Run Debugging
選択するとデバッグを開始できます。
メニューからデバッグを開始すると、http://your.web.server?XDEBUG_SESSION_START=sublime.xdebugというURLで規定ブラウザ上にページが表示されます。URLは先ほどの.sublime-projectで指定した値です。

注意しなければいけないのは、セッションキーとしてURLに XDEBUG_SESSION_START=sublime.xdebug という値が追加されていることです。デバッガにXdebug使ってるよーと通知するための値です。デバッガのメニューから Rub debugging を実行した場合に自動で追加されますが、表示されたページ上でPOSTや別ページへのリンクにジャンプしようとした時は、その値がクリアされるので注意が必要です。
Chromeエクステンション Xdebug helper の設定でもセッションキーを指定するので、使用する場合には忘れずに。

ショートカットで効率良くデバッグ

ごく基本的なステップ実行によるデバッグをショートカットで実行できます。プラグインのページにもありますが、よく使うものとしては以下でしょうか。

  • Ctrl + Shift + F5: 次のブレークポイントまで実行
  • Ctrl + Shift + F6: ステップオーバー(次の行へ)

Xdebugでリモートデバッグとなると、Eclipse PDTやNetbeansを使っている例が多数ですし、見やすさや使いやすさは一歩譲りますが、軽量なSublime Text 2でもできるようになるのは嬉しいですね。

この記事へのコメント

[FuelPHP] taskでRailsライクなseedを作る
2012.02 22

FuelPHPを使い始めているのですが、良いと評価できる点にコマンドラインから実行できる便利なタスクがあります。Railsではrake, railsというコマンドで各種タスクを実行でき、それを踏襲しています。今回はその中でも初期データ作成に便利なseedという機能をFuelPHP上に作ってみました。

FuelPHPを使い始めているのですが、良いと評価できる点にコマンドラインから実行できる便利なタスクがあります。Railsではrake, railsというコマンドで各種タスクを実行でき、それを踏襲しています。今回はその中でも初期データ作成に便利なseedという機能をFuelPHP上に作ってみました。

taskを拡張するクラスを配置する

置き場所は fuel/app/tasks/*.php です。そして、seedファイルの置き場所は fuel/app/seeds/*.php としました。今回、実行できるタスクとしては以下の3つという設計にしました。

  • モデル名を指定して同名のseedを実行
  • seeds以下をすべて実行
  • モデル名を指定して同名(複数形のはず)テーブルを初期化

上記の設計を反映したコードが以下のとおり。more better な実装あれば是非ご意見いただきたく。

このソースを参考に、というか reset はパクr


それぞれのタスクを実行する場合のコマンドは以下のようになります。

  • oil r seed model_name
  • oil r seed:all
  • oil r seed:reset model_name

そして、実行されるseedファイルの中身はこんな感じに。

 'テスト1',
		'summary' => '1つめのテストデータ'
	),
	array(
		'name' => 'テスト2',
		'summary' => '2つめのテストデータ'
	)
);

foreach ($seeds as $key => $seed) {
	$model = Model_Test::forge($seed);
	$model->save();
}
?>	

この記事へのコメント

[解決]xampp 1.7.0 でSQL実行時にApacheが落ちる
2010.10 07

状況 ローカルの開発環境ではxampplite1.7.0を利用しています。バンドルされているPHPのバージョンは5.2.8。Symfonyからdoctrineを使用してSQL(SELECT)を発行すると、Apacheが強 […]

状況

ローカルの開発環境ではxampplite1.7.0を利用しています。バンドルされているPHPのバージョンは5.2.8。Symfonyからdoctrineを使用してSQL(SELECT)を発行すると、Apacheが強制終了するという現象が発生していました。save()は問題なく実行できていたので、コード側の問題かと思っていましたが、どうやらlibmysql.dllの不具合のようです。

解決策

libmysql.dllをlibmysql_5.0.51a.dllで置き換えるとApacheが落ちなくなりました。同じような現象で悩んでいる方が多いようですが、どれも具体的な原因を突き止められていない様子。DLLそのものの問題のようなので、修正版で置き換えがてっとり早いようです。

libmysql.dllが置かれているのは以下の場所です。

  • /path/to/xampplite/php/libmysql.dll
  • /path/to/xampplite/apache/bin/libmysql.dll

それぞれ同じ場所にlibmysql_5.0.51a.dllがあるので、置き換えてしまいましょう。

この記事へのコメント

[Rhaco]時間がない人のためのアプリケーション日本語化メモ
2009.12 21

Rhacoは国際化機能も持っています。 setup画面のi18nメニューから自分で用意したテンプレートを利用することも可能なようです。 とはいえ、Viewsを拡張して作った部分をとりあえず日本語化したい人(というか自分) […]

Rhacoは国際化機能も持っています。
setup画面のi18nメニューから自分で用意したテンプレートを利用することも可能なようです。

とはいえ、Viewsを拡張して作った部分をとりあえず日本語化したい人(というか自分)へのメモ。
これでvalidate後のメッセージなども日本語化されます。
以下の手順はRhaco本体をローカルに取得済みとします。

・Rhaco本体のresources/setup/po/message-ja.potをアプリケーション側のsetup/poに配置
・Rhaco本体のresources/locale/messages/message-ja.phpをアプリケーション側の同ディレクトリに配置
・アプリケーション側のindex.phpで以下の2行を追加

Rhaco::import("resources.Message");
Message::loadMessages("ja");

試しにconfirmedCreateで作成したフォームや一覧などで英語表記だった部分が日本語になっていればOKです。本当にとりあえずなので、エラーメッセージのカスタマイズ時の手順は、

POTファイル編集->setupのi18nからPHPファイル生成

となります。あまりにあっけなく終わりましたが、こういうのが嬉しかったりします。

この記事へのコメント

[Rhaco]viewでPHPコード埋め込みがうまく動かない場合がある
2009.09 03

相変わらずRhacoで現プロジェクトの開発をぼちぼち進めている。 Rhacoのレンタルサーバでも大丈夫!というポリシーは素晴らしい。 専用サーバやVPSを提案しなくとも良いので、運用費がコストダウン。 今、開発で困ってい […]

相変わらずRhacoで現プロジェクトの開発をぼちぼち進めている。

Rhacoのレンタルサーバでも大丈夫!というポリシーは素晴らしい。
専用サーバやVPSを提案しなくとも良いので、運用費がコストダウン。

今、開発で困っているのがviewへのPHP埋め込み。
下記のような状況でだけ、うまく動いたり動かなかったりする。

<a href=”<?php H::linkTo(‘hoge’) ?>”>どっかにリンク</a>

Hはhtmlヘルパークラスへのショートカットで、linkToメソッドは引数を受け取って、各アクションへのURLを生成する。

ググっても、なかなか情報がない。after railsならフレームワークだとしたら、上記のような書き方は真っ先に試しそうなものなのだけど、そうでもないのだろうか?

この記事へのコメント

Rhaco UrlsとFlowを利用して他クラスのメソッドを呼び出すときの注意事項
2009.08 20

Rhacoを使って開発してるのだけど、細かな情報はまだまだ把握しきれてないので手探りが多い。 自分用のメモ。 index.phpでやること generic.Urlsのインポート urlパターンの定義 取得したparser […]

Rhacoを使って開発してるのだけど、細かな情報はまだまだ把握しきれてないので手探りが多い。
自分用のメモ。

index.phpでやること

  • generic.Urlsのインポート
  • urlパターンの定義
  • 取得したparserでの実行

$parser = Urls::parser($pattern);
$parser->write();

他クラスでやること

  • extends TagParse
  • flowでテンプレートと変数を定義
  • $flow->parser()みたくparserを返す

この記事へのコメント

PDO For WordPressインストールでハマる
2009.03 23

レンタルサーバにWordPressをインストールというのはよくある話だけど、 SQLiteで動かそうとしたら、予想外に大ハマり・・・ というわけで、作業メモ。 環境: PHP 5.1.6 WordPress 5.7.1 […]

レンタルサーバにWordPressをインストールというのはよくある話だけど、
SQLiteで動かそうとしたら、予想外に大ハマり・・・

というわけで、作業メモ。

環境:
PHP 5.1.6
WordPress 5.7.1
PDO For WordPress 1.0.2

こちらを参考にさせてもらいつつ作業するも、なぜか画面が真っ白。
結局、PDO For WordPressのソースをさらに追ってみる。

こんな長時間のprintデバッグとか久し振り。
で、原因はここ。

line 206 on wp-content/pdo/driver_sqlite/pdo_sqlite_driver_create.php

//need this line to comment out.
//$this->_errors[] = preg_last_error();

preg_last_error() >= PHP 5.2.0
というわけで、5.1で未対応のメソッドを呼び出していたためにDBの初期化で停止していた模様。
ものすごい時間かけたわりに作業が1行いじっただけとかよくある話ですけどね。

この記事へのコメント

作者について

青森県内でソフトウェア・システム開発を行うフリーランスのプログラマー。元々は集中監視システム開発に従事。現在はウェブサイト製作・オンラインシステムの開発案件を中心に、プログラミングのスキルトレーニングや講演も行う。

TEL 0172-55-7030  FAX 0172-55-7031
10:00 - 18:00 土日祝休

恐れ入りますが、お急ぎの場合を除いて、メールにてお問い合わせください。