ITエンジニアSAIの技術関連備忘録

技術的な内容を忘れないようにメモ....

phpでCurlを利用してWebAPIを叩く方法

1.環境

  Mac macOS Sierra
  Vagrant1.9.3(CentOS 7.1)
   PHP5.4
   Fuelphp1.7.3
 

 
/**
* APIリクエストを行い結果を配列で受け取る
*
* @method sendApi
* @param [type] $url [description]
* @param [type] $request_param [description]
* @param [type] $option [description]
* @return [type] [description]
*/
public static function sendApi($url, $request_param, $options=null)
{
     $result = null;
 
     Log::debug($url);
     Log::debug(var_export($request_param, true));
 
     if (!empty($url))
     {
          $curl = curl_init(); //①
 
          if($options != null)
          {
               curl_setopt_array($curl, $options); //②
          }
 
          $result = curl_exec($curl); //③
          $getInfo = curl_getinfo($curl); //④
 
          $errno = curl_errno($curl); //⑤
          Log::debug("★Error Number : ".$errno);
    
          if(CURLE_OK == $errno)
          {
               //ヘッダサイズ除去
               $result = substr($result, $getInfo["header_size"]); //⑥
               Log::debug(var_export($result, true));
          } else {
               $result = null;
          }
 
          curl_close($curl);
          //Json形式から配列に変換
          //$result = json_decode($body, true);
     }
 
     return $result;
}
 
 
3.解説

 
① curl_init()
セッションを初期化する。
これは、必ず最初に行う。その戻り値として受け取ったセッションをパラメータに渡して以降の関数を呼び出す。
 
② curl_setopt_array($curl, $options)
curlでHTTPリクエストする際に付与するヘッダー情報やリクエストURL、リクエストパラメータなどを設定する。
上記の関数は配列でまとめて渡す場合の関数
ここに渡す場合は、curl_setoptを使用する。
 
③ curl_exec($curl)
HTTPリクエストを実行する。
 
④ curl_getinfo($curl)
リクエストした結果情報を受け取る。
この中にレスポンスボディも入っているので、その部分を取得することでリクエスト結果が取得できる。
抜き出し方は⑥を参照
 
⑤ curl_errno($curl)
リクエストの結果ステータスを取得することができる。
エラーが発生した場合はエラー情報なども取得が可能。
ソースコードでは、これをチェックしてOKならばレスポンスボディの値を取得する処理を実装している。
 
4.補足

 
以下はCurlOptionの参考までに
※詳しくはPHPリファレンスを参照
 
$curl_opt = array(
     CURLOPT_URL => $url,
     CURLOPT_POSTFIELDS => http_build_query($request_param),
     CURLOPT_RETURNTRANSFER => TRUE,
     CURLOPT_HEADER => TRUE,
     CURLOPT_POST => TRUE,
     CURLOPT_SSL_VERIFYPEER => FALSE,
     CURLOPT_HTTPHEADER => $header
);
 

FuelphpでRestfulなWebAPIを作成する方法

1.環境

  Mac macOS Sierra
  Vagrant1.9.3(CentOS 7.1)
   PHP5.4
   Fuelphp1.7.3
 
 
2.実装ポイント

 
ポイントとしては下記ソースコードの赤文字の部分
 
① コントローラークラスに「Controller_Rest」を継承させること。
 
② before関数に親のbefore関数を呼び出すparent::before();処理を追加
 
③ RestControllerと普通の画面などを返すControllerの場合では、return で返す際の書き方が異なるので注意
    ※「$this->response($result);」の部分
 
<?php
/**
 * Fuel is a fast, lightweight, community driven PHP5 framework.
 *
 * @package Fuel
 * @version 1.7
 * @author Fuel Development Team
 * @license MIT License
 * @copyright 2010 - 2015 Fuel Development Team
 */
USE \Model\Common;
 
/**
 * The Welcome Controller.
 *
 * A basic controller example. Has examples of how to set the
 * response body and status.
 *
 * @package app
 * @extends Controller
 */
class Controller extends Controller_Rest
{
     public function before()
     {
          parent::before();
     }
 
/**
  * POST送信をする
  *
  * @access public
  * @return Response
  */
public function action_sendPost()
{
     Log::debug("===== Controller_Tools_Postclient.sendPost =====");
 
     $result = array(
          "result_code" => "OK",
          "error" => "FALSE",
          "error_details" => "",
          "return_json" => ""
     );
 
     //*** 中間の処理は割愛 ***
 
     Log::debug("===== Controller_Tools_Postclient.sendPost =====");
 
     return $this->response($result);
  }
}
 

ローカルでVagrant内にMySQLを立てて複数人で使用する方法

1.環境

Windows7 32bit
※今回はVagrantを起ち上げて、その中でMySQLを起動させて設定を行う。
※前提条件として、利用するユーザーはローカルDBと同一ネットワークにいること。
 
下記、2と3に関しては、私の別記事「FuelPHPのWeb開発環境をVagrantで構築する No.1」を参考にして、Vagrantのセットアップまで行っていましたらすでにインストール済みであります。
 
そのため、下記2と3に記載されている内容はMySQLの再インストー
 
2.MySQLのダウンロード

 
適当な場所に移動する。
※ここでは/home内にrepoフォルダを作成して、その中にダウンロードする。
 
 
$ cd /home
 
 
$ mkdir repo
 
 
$ cd repo
 
 
 
 
 
 
3.MySQLセットアップ

 
3-0.MySQLのアンインストー
 
/home/repo内(ダウンロードしたリポジトリがあるディレクトリ内)で下記のコマンドを叩く
$ yum -y install mysql-community-server
 
 
5.7がインストールされていることを確認する
$ mysqld --version
 
インストールされていれば以下の内容が出力される
mysqld  Ver 5.7.18 for Linux on x86_64 (MySQL Community Server (GPL))
 
 
3-1.MySQLのアンインストー
 
MySQLのインストール状況を確認する
$ rpm -qa | grep -i mysql
 
 
おそらく以下のMySQL関連のソフトをアンインストールすればよい
$ yum -y remove mysql-server
$ yum -y remove mysql
 
 
MySQLファイルの削除
$ rm -rf /var/lib/mysql/
 
 
3-2.MySQL自動起動設定
 
$ sudo systemctl enable mysqld.serivce
 
 
3-3.MySQLの起動
 
sudo systemctl start mysqld.service
 
 
3-4.MySQLの状態確認
 
sudo systemctl status mysqld.service
 
 
3-5.MySQLの停止
 
sudo systemctl stop mysqld.service
 
 
3-6.ログイン
 
MySQLへログインする
 
 
$ mysql -u root -p
 
もしかしたら以下のようなエラーメッセージが表示されることがある。
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
 
その場合は以下の手順を実施する。
 
一旦停止させる
$ systemctl stop mysqld
 
 
権限テーブルの使用をスキップする
$ systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
 
 
再度起動
$ systemctl start mysqld
 
 
上記のエラーが表示されないことを確認する。
 
ただし、このままではrootパスワードが不明であるため、以下の手順で初期パスワードを確認する
 
【注意】
MySQL5.7 では、rootパスワードはランダムな文字のものが初期状態で設定される。
パスワードはインストール終了後に /var/log/mysqld.log に出力される。
 
設定時のパスワード確認
$ sudo grep 'temporary password' /var/log/mysqld.log
 
 
上記コマンド実行後以下の内容を出力され初期パスワードが確認できる。
2017-04-26T16:20:03.471444Z 1 [Note] A temporary password is generated for root@localhost: ○○○○○○○○○○○○
 
初期パスワードを使用して、ログインできることを確認する。
 
 
3-7.初期パスワード変更
 
MySQLログイン後
 
データベースを選択する
$ use mysql
 
 
新しいパスワードを設定する
$ UPDATE user SET authentication_string=password('新規パスワード') WHERE user='root';
 
 
再設定したパスワードをMySQLへ反映させる
$ flush privileges;
 
 
 
ログアウトする
$ exit
 
 
再度ログインして設定したパスワードでログインできることを確認する
 
 
4.ユーザーを登録する

 
新規作成
$ create mysql.user '[ユーザー名]'@'[ホスト]' identified by 'test';
 
※ここで指定するホストはIPアドレスで、接続する側のIPアドレスを設定する。
 
4-1.パスワードポリシーエラーが発生した場合
 
ユーザー新規作成時にパスワードが要件を満たしていないよというエラーが発生する
mysql> create user 'saiki-y'@'localhost' identified by 'test';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
 
開発環境であまりガッチリパスワードを指定したくないので、ポリシーレベルを下げる
 
ポリシーレベルの確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
 
パスワードポリシーがMIDIUMになっている
 
下記の表は、MySQLドキュメントから引用している。
ポリシー 実施されるテスト
0 または LOW 長さ
1 または MEDIUM 長さ。数値、小文字、大文字、および特殊文字
2 または STRONG 長さ。数値、小文字、大文字、および特殊文字。辞書ファイル
 
MIDIUMのままでは特殊文字も指定するのは面倒なので変更する。
あと長さも。
mysql> SET GLOBAL validate_password_length=4;
mysql> SET GLOBAL validate_password_policy=LOW;
 
変更されているか確認
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | OFF   |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
 
再度実行!
mysql> create user 'saiki-y'@'localhost' identified by 'test';
Query OK, 0 rows affected (0.00 sec)
 
問題なくできた!
 
5.ユーザーに権限を与える

 
権限変更(全権限を与える場合)
$  grant all privileges on *.* to '[ユーザー名]'@'[ホスト]';
 
権限を確認する
$ show grants for '[ユーザー名]'@'[ホスト]';
 
6.ファイアーウォールの設定を行う

 
5.)まで完了して実際に別PCから接続しようとしてもはじかれると思うので、
ファイアーウォールの設定を確認し、必要であれば設定を行う。
 
設定方法については、ネットでも情報がたくさんあるため、ここでは割愛しておく。
 
ファイアーウォールの停止方法などは
私の別記事「[PHP]FuelPHPのWeb開発環境をVagrantで構築する No.1」でも紹介している。
 
 
7.接続確認

 
別PCからコマンドプロンプトを開き以下のコマンドを叩く
 
$ mysql -h [IPアドレス] -u test -p -P [port番号]
 
 
無事接続できていれば完了。http://qiita.com/RyochanUedasan/items/9a49309019475536d22a
 

XMLをparseしてみる

 
XMLJava標準のAPIでparseした時のメモ
 
String  XMLString = "[XML文書]"
 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(XMLString);
 
Node root = doc.getFirstChild();
NodeList nodeList = root.getChildNodes();
 
for (int i = 0; i < nodeList.getLength(); i++) {
 
     Node node = nodeList.item(i);
 
     if (node.getNodeType() != Node.ELEMENT_NODE) {
 
          System.out.println( node.getNodeType() );
               continue;
     }
 
     Element element = (Element) node;
     System.out.println(element.getNodeName());
}
 

安全にパスワードをハッシュする方法

 
DBにパスワードを登録する際に、平文のまま保存するのではなくハッシュ化して保存するのが一般的かと思いますが、その際のハッシュ化する処理を以下にまとめました。
 
※コピペでそのまま使用可能
public static String getSafetyPassword(String password, String salt) {
 
     char subCharArry = password.toCharArray();
     byte hashedSalt = getHashedSalt(salt);
 
     PBEKeySpec keySpec = new PBEKeySpec(subCharArry, hashedSalt, 1000, 256);
 
     SecretKeyFactory skf;
     String hashSub = null;
 
     try {
 
          skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
 
     } catch (NoSuchAlgorithmException e) {
 
          throw new RuntimeException(e);
 
     }
 
     SecretKey secretkey;
     try {
 
          secretkey = skf.generateSecret(keySpec);
 
     } catch (InvalidKeySpecException e) {
 
          throw new RuntimeException(e);
 
     }
 
     byte passByteAry = secretkey.getEncoded();
     StringBuilder sb = new StringBuilder();
     for (byte b : passByteAry) {
 
          sb.append(String.format("%02x", b & 0xff));
 
     }
 
     hashSub = sb.toString();
 
     return hashSub;
 
}
 
private static byte getHashedSalt(String salt) {
 
     MessageDigest messageDigest;
 
     try {
 
          messageDigest = MessageDigest.getInstance("SHA-256");
 
     } catch (NoSuchAlgorithmException e) {
 
          throw new RuntimeException(e);
 
     }
 
     messageDigest.update(salt.getBytes());
     return messageDigest.digest();
 
}
 

Dom4Jを使用してXMLを組み立てる方法

 
Dom4Jを使用してプログラム上でXMLを作成する際のメモ
 
 
org.dom4j.Document doc = DocumentHelper.createDocument();
 
  org.dom4j.Element root = doc.addElement("SAMPLE_ROOT_ELEMENT");
 
  root.addElement("SAMPLE_CHILD_ELEMENT".setText(test1));
  root.addElement("SAMPLE_CHILD_ELEMENT" .setText(test2) );
  root.addElement("SAMPLE_CHILD_ELEMENT" .setText(test3) );
  root.addElement("SAMPLE_CHILD_ELEMENT" .setText(test4) );
 
  String xmlString = root.asXML();
 
上記のxmlStringをコンソール出力なり、ファイル出力なりすると以下の結果が得られる。
 
出力結果:
<?xml version="1.0"?>
<SAMPLE_ROOT_ELEMEN>
     <SAMPLE_CHILD_ELEMEN> test1</SAMPLE_CHILD_ELEMEN>
     <SAMPLE_CHILD_ELEMEN> test2</SAMPLE_CHILD_ELEMEN>
     <SAMPLE_CHILD_ELEMEN> test3</SAMPLE_CHILD_ELEMEN>
     <SAMPLE_CHILD_ELEMEN> test4</SAMPLE_CHILD_ELEMEN>
</SAMPLE_ROOT_ELEMEN>

 

 

 

以上

Fuelphp1.7でTwigを利用する方法

 
前回、「FuelPHPのWeb開発環境をVagrantで構築する No.2」で構築したFuelPHP環境を利用して、Twigの利用からレンダリングまでを行っていきたいと思います。
 
1.TwigをFuelPHPで利用できるようにする

 
まずはVagrantの起動から、、、
 
 
$ vagrant up
 
そして、sshでサーバーへログインする
 
 
 
/vagrant/project/fuelphp/fuelphp-1.7.3へ移動する
 
移動したディレクトリ内にある、composer.jsonを開く
$ vi composer.json
 
開いたらその中に以下のようにrequireの記述があるので、そこへ「"twig/twig": "1.*"」の1行を追加する。
"require": {
        "php": ">=5.3.3",
        "composer/installers": "~1.0",
        "fuel/docs": "dev-1.7/master",
        "fuel/core": "dev-1.7/master",
        "fuel/auth": "dev-1.7/master",
        "fuel/email": "dev-1.7/master",
        "fuel/oil": "dev-1.7/master",
        "fuel/orm": "dev-1.7/master",
        "fuel/parser": "dev-1.7/master",
        "fuelphp/upload": "2.0.2",
        "monolog/monolog": "1.5.*",
        "michelf/php-markdown": "1.4.0",
        "twig/twig": "1.*"
},
 
記述が完了したらcomposer.jsonを保存して以下のコマンドを実行する
 
$ php compser.phar update
 
もし、以下のエラーが発生した場合は、composer自体を更新する
Could not parse version constraint ^2.0.0: Invalid version string "^2.0.0"
 
composer自体を更新コマンド
 
$ php composer.phar self-update
 
再度実行!
 
今度は正常に更新処理が完了しました。
 
※コンソールメッセージ
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing twig/twig (v1.33.2): Downloading (100%)
Writing lock file
Generating autoload files
 
次にfuel/app/configへ移動し、config.phpを開く
 
$ vi config.php
 
その中にあるコメントアウトされた、'always_load' => array(  ),内の'packages' => array(  ),のコメントアウトをはずしてその中に'parser',を追加する
 
 
  /**************************************************************************/
  /* Always Load */
  /**************************************************************************/
  'always_load' => array(
                 /**
                 * These packages are loaded on Fuel's startup.
                 * You can specify them in the following manner:
                 *
                 * array('auth'); // This will assume the packages are in PKGPATH
                 *
                 * // Use this format to specify the path to the package explicitly
                 * array(
                 *     array('auth'     => PKGPATH.'auth/')
                 * );
                 */
                 'packages'  => array(
                        //'orm',
                        'parser', ←ここに追加
                 ),
 
                /**
                 * These modules are always loaded on Fuel's startup. You can specify them
                 * in the following manner:
                 *
                 * array('module_name');
                 *
                 * A path must be set in module_paths for this to work.
                 */
                // 'modules'  => array(),
 
                /**
                 * Classes to autoload & initialize even when not used
                 */
                // 'classes'  => array(),
 
                /**
                 * Configs to autoload
                 *
                 * Examples: if you want to load 'session' config into a group 'session' you only have to
                 * add 'session'. If you want to add it to another group (example: 'auth') you have to
                 * add it like 'session' => 'auth'.
                 * If you don't want the config in a group use null as groupname.
                 */
                // 'config'  => array(),
               
                /**
                 * Language files to autoload
                 *
                 * Examples: if you want to load 'validation' lang into a group 'validation' you only have to
                 * add 'validation'. If you want to add it to another group (example: 'forms') you have to
                 * add it like 'validation' => 'forms'.
                 * If you don't want the lang in a group use null as groupname.
                 */
                // 'language'  => array(),
 
         ),
 
 
 
2.TwigでHTMLを書いてみる

 
まずは、app/classes/controller内のwelcome.phpを修正する
 
welcome.php
public function action_index()
{
     //return Response::forge(View::forge('welcome/index'));
     return Response::forge(View_Twig::forge('welcome/index'));
}
※「return Response::forge(View::forge('welcome/index'));」のままでも良いのだが、そのまま使用する場合は以下の用に修正する。
 
return Response::forge(View::forge('welcome/index.twig'));
 
 
そして、次にapp/views/welcome内に以下のhtmlを作成する。
 
index.twig
<DOCTYPE html>
<html>
<head>
     <meta charset="utf-8">
     <title>FuelPHP Framework</title>
     {{ asset_css('bootstrap.css') }}
</head>
<body>
     Hello Twig!!
</body>
</html>
 
 
 
3.TwigをFuelPHPレンダリングしてみる

 
上記HTML作成や修正が終了したら、アクセスしてみましょう
 
そしたら以下のようなエラーが、、、、
Fatal Error!
ErrorException [ Fatal Error ]:
Uncaught exception 'Fuel\Core\FuelException' with message 'Unable to create or write to the log file. Please check the permissions on /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/app/logs/. (fopen(/vagrant/project/fuelphp/fuelphp-1.7.3/fuel/app/logs/2017/04/22.php): failed to open stream: Permission denied)' in /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/log.php:106 Stack trace: #0 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/log.php(48): Fuel\Core\Log::initialize() #1 [internal function]: Fuel\Core\Log::_init() #2 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/autoloader.php(375): call_user_func('Log::_init') #3 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/autoloader.php(249): Fuel\Core\Autoloader::init_class('Log') #4 [internal function]: Fuel\Core\Autoloader::load('Log') #5 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/base.php(102): spl_autoload_call('Log') #6 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/error.php(123): logger(400, 'Error - The
 
調べてみると
ドキュメントルートをvagrantの共有フォルダにしているからだそう。
 
httpd.conf内の以下の箇所のapachevagrantに修正すれば直るそう
 
# User apache
# Group apache
User vagrant
Group vagrant
 
再度アクセス、、、
 
直ってました!
 
 
前回、「FuelPHPのWeb開発環境をVagrantで構築する No.2」で構築したFuelPHP環境を利用して、Twigの利用からレンダリングまでを行っていきたいと思います。
 
1.TwigをFuelPHPで利用できるようにする

 
まずはVagrantの起動から、、、
 
 
$ vagrant up
 
そして、sshでサーバーへログインする
 
 
 
/vagrant/project/fuelphp/fuelphp-1.7.3へ移動する
 
移動したディレクトリ内にある、composer.jsonを開く
$ vi composer.json
 
開いたらその中に以下のようにrequireの記述があるので、そこへ「"twig/twig": "1.*"」の1行を追加する。
"require": {
        "php": ">=5.3.3",
        "composer/installers": "~1.0",
        "fuel/docs": "dev-1.7/master",
        "fuel/core": "dev-1.7/master",
        "fuel/auth": "dev-1.7/master",
        "fuel/email": "dev-1.7/master",
        "fuel/oil": "dev-1.7/master",
        "fuel/orm": "dev-1.7/master",
        "fuel/parser": "dev-1.7/master",
        "fuelphp/upload": "2.0.2",
        "monolog/monolog": "1.5.*",
        "michelf/php-markdown": "1.4.0",
        "twig/twig": "1.*"
},
 
記述が完了したらcomposer.jsonを保存して以下のコマンドを実行する
 
$ php compser.phar update
 
もし、以下のエラーが発生した場合は、composer自体を更新する
Could not parse version constraint ^2.0.0: Invalid version string "^2.0.0"
 
composer自体を更新コマンド
 
$ php composer.phar self-update
 
再度実行!
 
今度は正常に更新処理が完了しました。
 
※コンソールメッセージ
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing twig/twig (v1.33.2): Downloading (100%)
Writing lock file
Generating autoload files
 
次にfuel/app/configへ移動し、config.phpを開く
 
$ vi config.php
 
その中にあるコメントアウトされた、'always_load' => array(  ),内の'packages' => array(  ),のコメントアウトをはずしてその中に'parser',を追加する
 
 
  /**************************************************************************/
  /* Always Load */
  /**************************************************************************/
  'always_load' => array(
                 /**
                 * These packages are loaded on Fuel's startup.
                 * You can specify them in the following manner:
                 *
                 * array('auth'); // This will assume the packages are in PKGPATH
                 *
                 * // Use this format to specify the path to the package explicitly
                 * array(
                 *     array('auth'     => PKGPATH.'auth/')
                 * );
                 */
                 'packages'  => array(
                        //'orm',
                        'parser', ←ここに追加
                 ),
 
                /**
                 * These modules are always loaded on Fuel's startup. You can specify them
                 * in the following manner:
                 *
                 * array('module_name');
                 *
                 * A path must be set in module_paths for this to work.
                 */
                // 'modules'  => array(),
 
                /**
                 * Classes to autoload & initialize even when not used
                 */
                // 'classes'  => array(),
 
                /**
                 * Configs to autoload
                 *
                 * Examples: if you want to load 'session' config into a group 'session' you only have to
                 * add 'session'. If you want to add it to another group (example: 'auth') you have to
                 * add it like 'session' => 'auth'.
                 * If you don't want the config in a group use null as groupname.
                 */
                // 'config'  => array(),
               
                /**
                 * Language files to autoload
                 *
                 * Examples: if you want to load 'validation' lang into a group 'validation' you only have to
                 * add 'validation'. If you want to add it to another group (example: 'forms') you have to
                 * add it like 'validation' => 'forms'.
                 * If you don't want the lang in a group use null as groupname.
                 */
                // 'language'  => array(),
 
         ),
 
 
 
2.TwigでHTMLを書いてみる

 
まずは、app/classes/controller内のwelcome.phpを修正する
 
welcome.php
public function action_index()
{
     //return Response::forge(View::forge('welcome/index'));
     return Response::forge(View_Twig::forge('welcome/index'));
}
※「return Response::forge(View::forge('welcome/index'));」のままでも良いのだが、そのまま使用する場合は以下の用に修正する。
 
return Response::forge(View::forge('welcome/index.twig'));
 
 
そして、次にapp/views/welcome内に以下のhtmlを作成する。
 
index.twig
<DOCTYPE html>
<html>
<head>
     <meta charset="utf-8">
     <title>FuelPHP Framework</title>
     {{ asset_css('bootstrap.css') }}
</head>
<body>
     Hello Twig!!
</body>
</html>
 
 
 
3.TwigをFuelPHPレンダリングしてみる

 
上記HTML作成や修正が終了したら、アクセスしてみましょう
 
そしたら以下のようなエラーが、、、、
Fatal Error!
ErrorException [ Fatal Error ]:
Uncaught exception 'Fuel\Core\FuelException' with message 'Unable to create or write to the log file. Please check the permissions on /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/app/logs/. (fopen(/vagrant/project/fuelphp/fuelphp-1.7.3/fuel/app/logs/2017/04/22.php): failed to open stream: Permission denied)' in /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/log.php:106 Stack trace: #0 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/log.php(48): Fuel\Core\Log::initialize() #1 [internal function]: Fuel\Core\Log::_init() #2 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/autoloader.php(375): call_user_func('Log::_init') #3 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/autoloader.php(249): Fuel\Core\Autoloader::init_class('Log') #4 [internal function]: Fuel\Core\Autoloader::load('Log') #5 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/base.php(102): spl_autoload_call('Log') #6 /vagrant/project/fuelphp/fuelphp-1.7.3/fuel/core/classes/error.php(123): logger(400, 'Error - The
 
調べてみると
ドキュメントルートをvagrantの共有フォルダにしているからだそう。
 
httpd.conf内の以下の箇所のapachevagrantに修正すれば直るそう
 
# User apache
# Group apache
User vagrant
Group vagrant
 
再度アクセス、、、
 
直ってました!
 

f:id:y_saiki:20170426203827p:plain

 
以上でFuelphpでTwigを利用して画面表示までができました。