【Laravel入門】Bladeテンプレート
引き続きLaravelについて勉強していきたいと思います。
バックナンバー的なもの
・【Laravel入門】 インストールから起動まで - 人生の恥は書き捨て
・【Laravel入門】ルーティング - 人生の恥は書き捨て
LaravelのViewではBladeテンプレートという便利なテンプレートが使えるので、
それの紹介をします。
Bladeテンプレートとは
BladeテンプレートはLaravelの組み込みテンプレートです。
viewにphpをそのまま書くと煩雑になってしまうような、
テンプレートの継承、テンプレート処理、イテレーター処理などを、
簡単簡潔に記述することができます。
Bladeテンプレートのファイルは ファイル名.blade.phpで保存します。
使ってみる
レイアウト
app/views/layouts/master.blade.php
<html> <body> @section('sidebar') parent @show <div class="container"> @yield('content') </div> </body> </html>
ビュー
app/views/template.blade.php
@extends('layouts.master') @section('sidebar') @parent <p>child</p> @stop @section('content') <p>ここは本文のコンテンツ</p> @stop
こんな感じで使うことができます。
セクションの宣言をして
@yield('content')
セクションを実装します。
@section('contents') <p>ここは本文のコンテンツ</p> @stop
レイアウトで共通部分をだけを実装して、残りの部分の実装は個別のテンプレートに任せる場合は、
sidebar部分のように
宣言
@section('sidebar') parent @show
実装
@section('sidebar') @parent <p>child</p> @stop
というようにします。
@show と @stop
Bladeテンプレートは、正規表現を使って置換を行っているだけなので、
想定されない使い方をすると変わった挙動をするようです。
@showの部分は継承したときに個別のviewが表示されるところを表していて、
継承したときに末尾に@stopをつけるわけですが、
じゃあ2回継承した場合どうなるの?って思ったのでやってみました。
master.blade.php
@section('sidebar') master @show
master2.blade.php
@extends('layouts.master') @section('sidebar') @parent <p>master2</p> @show
template.blade.php
@extends('layouts.master2') @section('sidebar') @parent <p>template</p> @stop
これで2重継承できました。
でも書き方が直感的じゃないというか@stopが2回ってどうなの?
master2の@stopを@showに変えると表示がおかしくなってしまいます。
fuelPHPで同じ名前のファイルアップロードができない件
はじめに
fuelPHPで同じ名前のファイルがアップロードできないという事がありました。
応急処置的な対処をしたので、方法を書いておきます。
auto_rename
fuelのuploadでは同じ名前のファイルをアップロードする場合、
3つの方法が選べます。
auto_rename = true
として同じ名前のファイルがアップされたら元ファイル名_(数字).extensionとする。
auto_rename = false
として同じ名前のファイルがあったら書き込みをしない。
auto_rename = false overwrite =true
として同じ名前のファイルが来たら上書きする。
この3つです。
…ですが、auto_renameは正しく動いていないようです。
ここにauto_rename動いてねーよ!っていうプルリクが投げられた痕跡もあるようですが、
現状直ってない。
Fix auto_rename file checking logic by kenjis · Pull Request #1152 · fuel/core · GitHub
そもそもアップロードされた画像をそのままの名前で保存するのってどうなの?ってのもあるので、
今回は自分でrenameして保存することにします。
Uploadクラスのregistarメソッドでcallback関数を呼ぶ
詳しくはUpload 使い方 - クラス - FuelPHP ドキュメントに書いてあるのですが、
Uploadクラスのregistarメソッドでupload前の処理やあとの処理を設定できるようです。
registarの第1引数にvalidateを指定するとファイル保存前に処理を挟む事ができます。
これを使って、自分でファイル名を設定します。
Upload::register('validate',function(&$file){
$uid = uniqid("image_");
$file['basename'] = $uid;
$file['name'] = $uid;
$file['name'] .= ".".$file['extension'];
});
Upload::process();
if (Upload::is_valid())
{
Upload::save();
}
これでファイル名を指定してファイル保存ができます。
【Laravel入門】ルーティング
はじめに
前回Laravelのインストールをやりました。
詳細はこちら→【Laravel入門】 インストールから起動まで - 人生の恥は書き捨て
つい先日Laravelの日本語版サイトもできたということで、
なかなか盛り上がってきているようです。
Laravel - ウェブ職人のためのPHPフレームワーク
今回はLaravelのルーティングについて見て行きたいと思います。
routes.phpでのルーティング
Laravelでは、基本的にリクエストとレスポンスの対応をroutes.phpに書いていきます。
文字列を返す
Route::get('/', function() { return "Hello Laravel!" });
この記述でルートにgetリクエストが来たときに、"Hello Laravel""という文字列を表示します。
ここではPHP5.3以降からの無名関数が使われています。function(){~}の部分ですね。
リクエストに対して文字列を返す無名関数を返しています。
Route::get('/', function() { return "Hello Laravel!" });
Viewを返す
リクエストに対してViewを返します。
これもViewを返す記述をした無名関数を返しています。
Route::get('/', function() { return View::make('hello'); });
app/views/hello.php が表示されます。
関数を返す
リクエストに対して関数を指定して返します。
Route::get('/', 'HomeController@sayHello');
app/controllers/HomeController.phpのsayHelloメソッドが実行されます。
<?php class HomeController extends BaseController { public function sayHello(){ return View::make('hello'); } }
という風にHomeController.phpに記述しておけば、【Viewを返す】と同様になります。
更に詳しいルーティングについてはここに載ってます。
ルーティング
Controllerでのルーティング
Laravelでは基本的にはroutes.phpでルーティングを設定しますが、
Restfulコントローラーというのを使えば、Controller内でもルートごとのロジックを記述することができます。
routes.phpに
Route::controller('/', 'RestfulController');
と記述して
app/controllers/RestfulController.phpに
<?php class RestfulController extends BaseController{ public function getIndex(){ return "get"; } public function postIndex(){ return "post"; } public function getYo(){ return "Yo"; } }
と記述すれば、
/にgetリクエストをした時は、get
/にpostリクエストをした時は、post
/yoにgetリクエストした時は、yo
それぞれの文字列を表示できます。
さらに詳しくはここに載ってます。
コントローラー
【Laravel入門】 インストールから起動まで
はじめに
phpのframeworkで最近特に注目度が上がってきているLaravelのインストールです。
環境
php5.4以上の入っている環境を用意してください。
前にphpのセットアップについても書いてるので、
良ければどうぞ。
Vagrantのprovisioningを使ってapache2.4+php5.4+mysql5.6 - 人生の恥は書き捨て
インストール
LaravelはComposerというPHPのパッケージ管理プログラムを使用してインストールするので、
Composerを入れます。
curl -sS https://getcomposer.org/installer | php
成功するとだいたいこんなかんじのメッセージが出ます。
#!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /usr/local/apache2/htdocs/composer.phar Use it: php composer.phar
グローバルに配置して、いつでも使えるようにしておきましょう。
準備ができたら早速Laravelをインストールします。
composer create-project laravel/laravel プロジェクト名 --prefer-dist
なんかやたら時間がかかります。
最初の1分位で「あれ?動いてないのかな?」と思うかも知れませんが、
多分動いてるのでもう2、3分待ちましょう。
[RuntimeException] Error Output:
というエラーが出た時は、phpのモジュールが足りていない場合があります。
自分の場合はmcryptが入ってなかったので、入れてphpをコンパイルし直しました。
インストールが終わったら、
アクセスしてみましょう。
アクセスするところは プロジェクト名/public/ です。
ここで
Error in exception handler.
というエラーが出ました。
これはプロジェクト内のapp/storageに書き込み権限がないから起きるようです。
なので、
chmod -R 777 app/storage
します。
もう一回アクセスすると
こんな画面が表示されます。
うまくインストールできたようです。
Apache Solrのインストール
はじめに
Apache Solrのインストールについてです。
Solrは便利な全文検索システムです。
様々な機能があって、サイト内検索などに便利です。
フリーワード検索、類似語検索などが高速に行えます。
Solrのインストール
yum install java-1.7.0-openjdk.x86_64 yum install java-1.7.0-openjdk-devel.x86_64 yum install ant.x86_64
次に、Solrをダウンロードします。
wget http://ftp.riken.jp/net/apache/lucene/solr/4.9.0/solr-4.9.0.tgz tar xzf solr-4.9.0.tgz
ダウンロードしたファイル内に、サンプルのファイルがあるので、実行します。
cd solr-4.9.0/example java -jar start.jar
これで起動が確認できます。
コマンドの設定
便利に使うために、
solrをserviceとして登録して、
service solr startというふうに呼び出せるようにします。
起動用のスクリプトを/etc/init.d/solr として作成します。
1 #!/bin/sh 2 # chkconfig: 345 90 90 3 # description: Solr Boot 4 JETTY_HOME_DIR=/usr/local/solr/example/ 5 cd $JETTY_HOME_DIR 6 JAVA="/usr/bin/java" 7 LOG_FILE="/var/log/solr.log" 8 9 KEY=stopkey 10 CORE=solr 11 cd $JETTY_HOME_DIR 12 start() { 13 $JAVA -Dsolr.solr.home=${JETTY_HOME_DIR}${CORE} -DSTOP.PORT=8079 -DSTOP.KEY=$KEY -jar start.jar >> $LOG_FILE 2>&1 & 14 echo "Solr started!" 15 } 16 17 stop() { 18 $JAVA -DSTOP.PORT=8079 -DSTOP.KEY=$KEY -jar start.jar --stop 19 echo "Solr stopped!" 20 } 21 22 case "$1" in 23 start) 24 start 25 ;; 26 stop) 27 stop 28 ;; 29 restart) 30 stop 31 start 32 ;; 33 *) 34 echo "Usage: $0 {start|stop|restart}" 35 exit 1 36 esac
4行目のJETTY_HOME_DIRはsolrをインストールした場所を指定してください。
僕はusr/local/に解凍したフォルダをsolrという名前に変更して配置したのでこのようになっています。
solrは停止するときに、起動時とは違うポートを指定する必要があります。
solrの起動時のdefaultのポートは8983になっていて、停止時のポートは今回8079にしています。
ここまでできたら、
chkconfig --add solr
でsolrをserviceに登録できます。
chkconfig solr on service solr start
で自動起動とserviceコマンドからの起動ができます。
solrを使ってみる
solrのデータ登録と検索を簡単に試してみます。
データの登録
登録するためのxmlファイルを用意します。
lovelive.xml
<add> <doc> <field name="id">1</field> <field name="name">Honoka Kosaka</field> </doc> <doc> <field name="id">2</field> <field name="name">Umi Sonoda</field> </doc> ・ ・ ・ <doc> <field name="id">7</field> <field name="name">Nico Yazawa</field> </doc> <doc> <field name="id">8</field> <field name="name">Eri Ayase</field> </doc> <doc> <field name="id">9</field> <field name="name">Nozomi Tojo</field> </doc> </add>
そして、このファイルをsolrに向かってpostします。
curl 'http://localhost:8983/solr/collection1/update?commit=true&indent=true' --data-binary @lovelive.xml -H 'Content-Type: text/xml'
これでデータが登録されます。
solrではデータをsolrに渡して、それをcommitすることで初めて検索ができるようになります。
solrのcommitは時間がかかるので、普通は複数のデータをsolrに渡してからcommitで一度に書き込みます。
今回はcommit=trueとして、データ渡しとcommitを両方行っています。
エンジニアとして入社してから入れたMacの便利ツール5つ
入社してから先輩に便利だから入れるといいよと言われたツールを紹介します。
これでMacでの開発がよりはかどるかも。
Alfred
とっても便利なランチャーです。
検索は高速で、1文字打ち込むごとに対象がしぼられていきます。
アプリケーションの起動と終了はこれで一瞬
有償版にするとさらにいろいろな機能が使える様ですが、
無償版でも十分に便利です。
インストールはここから
Dash
リファレンスを探すときに便利なツールです。
あらかじめ、自分の使う言語を登録しておくと、
登録したすべての言語のリファレンスを検索できます。
さらに、先ほどのalfredとの連携設定をしておくと、
dash serchという形でそのままdashの検索機能が使えます。
alfredから直接リファレンスを検索できてなお便利です!
連携はalfredの設定から行います。
右下のAdd Custom Searchからdashを登録します。
キーワードはalfredからdash searchを呼び出すための文字列なので、
自分の使いたい文字を入れてください。
インストールはここから
Better Touch Tool
windowsの様にブラウザ等を簡単にディスプレイ全体に広げたり、
寄せたり等ができます。
インストールはここから
Great Tools For Your Mac By Andreas Hegenberg » BetterTouchTool, BetterSnapTool & SecondBar
KeyRemap4Mac
エディタを使っている時など、通常の設定だと移動速度が遅くて不便。
KeyRemap4Macを使えば、キーの連続入力の認識時間と間隔時間を変更できます。
KeyRepeatのDelay Until RepeatとKeyRepeatのところを設定してください。
早くしすぎると、打ち間違いの元になるので、適度な感じで。
インストールはここから
KeyRemap4MacBook - OS X用のソフトウェア
Sequel
MySQLフロントエンド用のアプリケーションです。
Macっぽいおしゃれで便利なUIでデータベースが扱えます。
当然、テーブルを作ったり、カラムの設定をいじったり、レコードを挿入したり、
スマートにできます。
もうphpMyAdminなんかにはおさらば
インストールはここから
Sequel Pro
Vagrantのprovisioningを使ってapache2.4+php5.4+mysql5.6
タイトル通りです。
apache2.4とphp5.4とmysql5.6で開発環境を作って、
vagrantのprovisioninigで使えるように、そのshellscriptを書き出しました。
apache2.4はソースからインストールしなければならず、
それならphpもソースからインストールするかーってな感じ。
これで、apache、php、mysqlがインストールされています。
しかし、この状態ではapacheを起動するhttpdコマンドがserviceに登録されていません。
かなり使いづらいので、コマンドのスクリプトをコピーしてきてサービスに登録します。
cp /usr/local/src/httpd-2.4.9/build/rpm/httpd.init /etc/init.d/httpd vim /etc/init.d/httpd
編集内容
60 httpd=${HTTPD-/usr/local/apache2/bin/httpd} 61 pidfile=${PIDFILE-/usr/local/apache2/logs/${prog}.pid} 62 lockfile=${LOCKFILE-/usr/local/apache2/logs/${prog}} ・ ・ ・ 67 CONFFILE=/usr/local/apache2/conf/httpd.conf
パスをapache2.4の方のコマンドに書き換えました。
httpdコマンドをserviceに登録
chkconfig --add httpd
これでserviceにhttpdが登録されたので、
service httpd start
でapacheが立ち上がります。