ラベル PHP の投稿を表示しています。 すべての投稿を表示
ラベル PHP の投稿を表示しています。 すべての投稿を表示

2016年3月18日金曜日

僕はLaravelを使う事にした(3):RoutingからViewまで

このエントリーをはてなブックマークに追加
シリーズものだったりするのでこれまでのエントリを並べておく。


Routing

RutingとはアクセスしてきたURLとHTTPメソッドに対して実行するコントローラがクロージャを記載する。これはapp/Http/routes.phpにコーディングする。チュートリアルにある例をそのままもってくるとこんな感じ。

use App\Task;
use Illuminate\Http\Request;

/**
* 全タスク表示
*/
Route::get('/', function () {
//
});

/**
* 新タスク追加
*/
Route::post('/task', function (Request $request) {
//
});

/**
* 既存タスク削除
*/
Route::delete('/task/{id}', function ($id) {
//
});

Route::の後がHTTPメソッドになっていて、第1引数にURLを指定しているのがわかる。第2引数はクロージャになってる。

チュートリアルの内容的には全タスクを表示だとかなんだとか書いているけども”/”にアクセスされた時の挙動としてViewを表示した時の処理を足す。
/**
 * 全タスク表示
 */
Route::get('/', function () {
 // resourcse/views配下のtasksテンプレートを表示させる
 return view('tasks');
});
ここで指定したtasksというViewをresources/views配下に作っていく。

View

ViewもRailsやSymfonyと同じでページ共通部分(ヘッダー、フッター、ナビゲーションなど)を共通化できるlayoutという概念をもっており、その中で各ページで異なる部分は各ページのviewで担うようになっている。

layoutで使用するViewはresources/views/layoutsに置かれる。ここでつくるのはapp.blade.phpになる。わかりやすくするためにこんな感じで作ってみた。



layoutだよ
 
@yield('content')
body> 


tasks.blade.phpresources/viewsに置く。

@extendで指定したlayouts.applayouts/app.blade.phpを指定し、@section〜@endsectionまでの間が@yield('content')に挿入される。
@extends('layouts.app')

@section('content')
tasks.blade.phpの部分だよ
@endsection

これでサイト上で確認してみよう。http://IP Address/test1/でアクセスするとこのように見えた!

2016年3月10日木曜日

僕はLaravelを使う事にした(2):チュートリアルをやってDB周りになじむ

このエントリーをはてなブックマークに追加
さてLaravelをインストールしてみたものの使い方はSymfonyをwrapしているので、似たようなものと思っているけど実際のところは分からないので用意されているチュートリアルをやってみる事にした。内容すっごい分かりにくいけど。


DBのテーブルを作成する。

SymfonyやRailsと同じようにMigrationを行ってデータベース管理をする。tasksテーブルを作成するためのMigrationの雛形を作成する。
$ php artisan make:migration create_tasks_table --create=tasks
Created Migration: 2016_03_10_084136_create_tasks_table
artisanの使用方法についてはこんな感じ。
$ php artisan make:migration <Migration File Name> --create=<Table Name>
これを実行するとProject/database/migrations配下に2016_03_10_084136_create_tasks_table.phpというようなファイルが作成される。中身はこんな感じ。
increments('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('tasks');
    }
}
レコードのIDとタイムスタンプのカラムがデフォルトで設定されているので、これにタスク名を格納するためのカラムを追加で設定する。こんな感じ。ハイライト部分が追記した部分。
public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }
このMigrationを実行する前に。やっておく事が2つ。
  • データベースの作成
  • .envとconfig/database.phpへのデータベース設定
今回はMySQLを利用し、データベースは'Laravel_tutorial'として、mysqlに対して事前に作成しておく。

データベース設定はユーザはめんどくさいのでrootを使った。.envとconfig/database.phpに両方設定しておく必要があるが、.envは開発用、.envに設定がない場合はconfig/database.phpの値が利用される。.envに設定されている値がなければconfig配下の設定ファイルの値が利用される。
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=Laravel_tutorial
DB_USERNAME=root
DB_PASSWORD=password

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'Laravel_tutorial'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', 'password'),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],
これが終わったらようやくMigrateできる。
php artisan migrate
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table
Migrated: 2016_03_10_084136_create_tasks_table
MySQLでデータベースLaravel_tutorialにtasksテーブルが出来ているかみてみる。
mysql> show tables;
+----------------------------+
| Tables_in_Laravel_tutorial |
+----------------------------+
| migrations                 |
| password_resets            |
| tasks                      |
| users                      |
+----------------------------+
4 rows in set (0.00 sec)

mysql> desc tasks;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.15 sec)
出来ているのを確認したらテーブルtasksへアクセスするためのモデルTaskを作成する。
$ php artisan make:model Task
Model created successfully.
テーブル名は複数形、モデルは単数形という暗黙のルールがあるので明示的にtasksテーブルを指定せずともTaskというモデルはtasksテーブルを参照するモデルがapp配下に作成される。
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    //
}
疲れてきた。

僕はLaravelを使う事にした(1):導入〜確認まで

このエントリーをはてなブックマークに追加
ずっとPHPのフレームワークはSymfonyを使っていたんだけれど、そろそろ新しいイケてるやつも出てきてるんじゃないかということで調べてみるとPHPフレームワークおすすめ一覧【10選】2015年⇒2016年へ向けて。という記事に当たり、その中からLaravelを試してみようと思ったので、導入〜確認まで。


Composerのインストール

Laravelでは依存関係の解決にComposerを使っているそうなので事前にインストールしておく。

Download Pageから1.0.0-beta1をダウンロードし、/usr/local/bin配下にcomposerという名前でリネームして移動させる。
$ wget https://getcomposer.org/download/1.0.0-beta1/composer.phar
$ mv composer.phar /usr/local/bin/composer
最後、コマンドとして実行するためにパーミッションを付与する。
$ chmod +x /usr/local/bin/composer

Laravelのインストール

これは簡単。先ほどインストールしたcomposerコマンドを叩くだけ。
$ composer global require "laravel/installer=~1.1"
Changed current directory to /root/.config/composer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing symfony/process (v3.0.3)
Downloading: 100%

- Installing symfony/polyfill-mbstring (v1.1.1)
Downloading: 100%

- Installing symfony/console (v3.0.3)
Downloading: 100%

- Installing guzzlehttp/promises (1.1.0)
Downloading: 100%

- Installing psr/http-message (1.0)
Downloading: 100%

- Installing guzzlehttp/psr7 (1.2.3)
Downloading: 100%

- Installing guzzlehttp/guzzle (6.1.1)
Downloading: 100%

- Installing laravel/installer (v1.3.1)
Downloading: 100%

symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing psr/log (For using the console logger)
Writing lock file
Generating autoload files
最後に~/.composer/vendor/binにPATHを通しておく。

Laravelを利用したProjectの作成

これも簡単。Projectを作りたいディレクトリでLaravelのコマンドを実行する。今回は作成されたProject配下のpublicへDocumentRootにシンボリックリンクを作成したいので、その場合DocumentRootと同列のディレクトリにProjectを作成する。何かもっといい方法がありそうだけど。。。

参考:http://stackoverflow.com/questions/30301573/laravel-symbolic-links-without-losing-prefix
$ cd /usr/local/apache2
$ laravel new test1
$ ln -s ../test1/public test1
実行する前にstorageディレクトリにパーミッションを付与する。
chmod -R o+w storage

確認

URLにアクセスする。


できた、できた。

2015年12月8日火曜日

PHP 7.0.0が正式にリリースされたのでインストールしてみる

このエントリーをはてなブックマークに追加
PHP 7.0.0が2015/12/3に正式リリースされたのでインストールだけやってみた。フレームワークとか何が対応済みかとかまでは調べていない。

PHP7.0.0の公式リリースノートによれば以下のような変更が実装されたという感じ。

Improved performance: PHP 7 is up to twice as fast as PHP 5.6
ーーPHP5.6に比べて2倍速くなった
Significantly reduced memory usage
ーーメモリ使用量が減った
Abstract Syntax Tree
ーー抽象構文木の採用
Consistent 64-bit support
ーー本格的な64bitサポート
Improved Exception hierarchy
ーー例外階層の改善
Many fatal errors converted to Exceptions
ーー多くの致命的なエラーを例外へ
Secure random number generator
ーーセキュアな乱数生成
Removed old and unsupported SAPIs and extensions
ーー古くてサポートされなくなったSAPIと拡張の削除
The null coalescing operator (??)
ーーnull 合体演算子(??)の実装
Return and Scalar Type Declarations
ーー関数のretrun値とスカラー型の宣言
Anonymous Classes
ーー匿名クラス
Zero cost asserts
ーー低コスト化


ちなみに試す同一環境には既にPHP5.6.15がインストールされているので共存できる環境を目指してみる。OSはCentOS7、Apacheは2.4.17がインストールされている環境。

とりあえずインストール先のprefixは/usr/local/php7としてインストールするようにすれば既存のものには影響がない"はず"

# ./configure --enable-mbstring=all --enable-mbregex --with-apxs2=/usr/local/apache2/bin/apxs --with-openssl --with-zlib --with-pdo-mysql=/usr/local/mysql --prefix=/usr/local/php7
# make
# make install


ここまで行うとhttpd.confに
LoadModule php7_module modules/libphp7.so
が追加されている。

前のPHP5のモジュール読み込み部分に関してはコメントアウトしておく
#LoadModule php5_module modules/libphp5.so

一応、php.iniを新しいのに置き換えてやる。

# mv /usr/local/lib/php.ini /usr/local/lib/php-5.ini.20151208
# cp -ipr /usr/local/src/php-7.0.0/php.ini-development /usr/local/lib/php.ini

Apacheを再起動してphpinfo()で確認してみる。

# systemctl start httpd.service


手順的には今までのPHP5.6系とほとんど変わっていなかった。

今日の作業

目標みつからず全然遊んでました。。。

2015年11月8日日曜日

MySQL 5.7.9とPHP5.6.15をインストールした時のお話

このエントリーをはてなブックマークに追加


昨日、MySQLをインストールしたので、今日はPHPをインストールした。

ちなみにこの辺はいつもやってるので、慣れてるし、手順もconfigureオプションも確立している...はずなのにはまった。。

このようなオプションでPHPをconfigureしようとするとエラーが出て全く進まない。
# ./configure --enable-mbstring=all --enable-mbregex --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache2/bin/apxs --with-openssl --with-zlib --with-pdo-mysql=/usr/local/mysql

checking for specified location of the MySQL UNIX socket... no
configure: error: Cannot find libmysqlclient_r under /usr/local/mysql/.
Note that the MySQL client library is not bundled anymore!

いろいろ調べてやってみた。

...けど結局は同じエラーメッセージが出て解決しない。

  • /etc/ld.so.confに/usr/local/mysql/libを追加してldconfig
  • configureオプションに--with-libdir=lib64を追加して/usr/local/mysql/lib64を/usr/local/mysql/libのシンボリックリンクとして作成
  • 関係ないと思うのにconfigureオプションに--with-mysqli=/usr/local/mysql/bin/mysql_configを追加した
  • configureオプションにおまけで--with-mysql-sockを追加した
  • やぶれかぶれに環境変数にLD_LIBRARYPATHに/usr/local/mysql/libを追加

しかし、/usr/local/mysql/libを見るとlibmysqlclient_rらしきものが本当にない。
libmysqlclient.soがあるので問題ないかと思ったけど、どうやらconnectorがないのではないかと思い、C Driver for MySQL (Connector/C)をインストールしてみた。
# wget http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-6.1.6-src.tar.gz
# tar -xvzf mysql-connector-c-6.1.6-src.tar.gz
# cd mysql-connector-c-6.1.6-src
# ccmake .
# make
# make install

なんと上手くいった!ちなみに上記の箇条書きで試した方法は全て削除している。
こんなことしてたかなぁ。。。