<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>FuelPHP | みんたく</title>
	<atom:link href="https://mintaku-blog.net/category/develop/fuelphp/feed/" rel="self" type="application/rss+xml" />
	<link>https://mintaku-blog.net</link>
	<description>みんたくの技術ブログ</description>
	<lastBuildDate>Wed, 20 Feb 2019 13:45:08 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/06/cropped-ipad-820272_640.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>FuelPHP | みんたく</title>
	<link>https://mintaku-blog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">144480658</site>	<item>
		<title>【FuelPHP】複数のファイルを添付してメールを送る方法</title>
		<link>https://mintaku-blog.net/fuelphp-files/</link>
					<comments>https://mintaku-blog.net/fuelphp-files/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 20 Feb 2019 13:46:12 +0000</pubDate>
				<category><![CDATA[開発技術]]></category>
		<category><![CDATA[FuelPHP]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=862</guid>

					<description><![CDATA[<p>複数のファイルを添付してメールを送信する方法メモしておきます。 FuelPHPで複数のファイルを添付してメールを送る方法 メール送信入力画面に以下のようなフ …</p>
The post <a href="https://mintaku-blog.net/fuelphp-files/">【FuelPHP】複数のファイルを添付してメールを送る方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>複数のファイルを添付してメールを送信する方法メモしておきます。</p>
<h2>FuelPHPで複数のファイルを添付してメールを送る方法</h2>
<p>メール送信入力画面に以下のようなファイル添付フォームを用意します。</p><pre class="crayon-plain-tag">&lt;?= Form::open(['action' =&gt; '/path/to/controller/send', 'method' =&gt; 'post', 'enctype' =&gt; 'multipart/form-data']); ?&gt;

…

&lt;?php foreach($file_numbers as $index =&gt; $file_number):?&gt;
    &lt;li&gt;
        &lt;dl&gt;
            &lt;dt&gt;添付資料&lt;?php echo $index ?&gt;&lt;/dt&gt;
            &lt;dd&gt;
                &lt;input type="file" name="&lt;?php $file_number ?&gt;”&gt;
            &lt;/dd&gt;
        &lt;/dl&gt;
    &lt;/li&gt;
&lt;?php endforeach;?&gt;

&lt;p&gt;
    &lt;input type="submit" value="送信する" onClick="return confirm('メール送信します。よろしいですか？');"&gt;
&lt;/p&gt;


…

&lt;?= Form::close(); ?&gt;</pre><p>ファイルの添付はattachメソッドを使います。このメソッドは、config/email.phpのattach_pathsにセットされたパスの中からファイルを検索します。パラメーターは以下の通りです。</p>
<p>第一引数は必須です。</p>
<ul>
<li>$file string</li>
</ul>
<p>false。同封したいファイルのパス。</p>
<ul>
<li>$inline bool</li>
</ul>
<p>false。インラインでファイルを添付するかどうか。</p>
<ul>
<li>$cid string</li>
</ul>
<p>null。コンテンツ ID 。インライン画像として添付する場合に使用。</p>
<ul>
<li>$mime string</li>
</ul>
<p>null。デフォルトでは、mimetype は core/config/mimes の配列から検索。</p>
<ul>
<li>$name string</li>
</ul>
<p>null。上書きする添付名。</p>
<p>\Input::post()でメールアドレスや本文などのメール送信内容を取得し、\Upload::get_files()で添付ファイルを取得します。</p>
<p>取得した添付ファイルをforeach()でまわし、バリデートに成功した場合、メールにファイルを添付します。</p>
<p>その後はいつものメール送信のように、送信先メールアドレス・送信元メールアドレス・題名・本文をセットし、完了です。</p>
<p>本文はnl2br()関数を使い、改行文字の前にHTMLの改行タグを挿入しています。</p><pre class="crayon-plain-tag">/**
* 複数ファイルを添付してメール送信
*/
public function post_send()
{
    try {
        // 送信内容取得
        $params = \Input::post();

        // 全ファイル取得
        $file_details = \Upload::get_files();

        // インスタンス生成
        $email = \Email::forge();

        // メールにファイル添付
        $target_file_index = 0;
        foreach ($file_details as $file_no =&gt; $file_detail) {
            if ($file_detail['name']) {
                $target_file_index = $file_no;

                // ファイルバリデーション
                $file_valid = \Upload::is_valid($target_file_index);
                if (! $file_valid) {
                    throw new \Exception();
                }

                // 対象のファイルを取得
                $upload_file_detail = \Arr::get(\Upload::get_files(), $target_file_index);
                $file = $upload_file_detail['file'];

                // 対象ファイルのパスとファイル名取得
                $path_and_name = explode('/', $file);
                $tmp_path = DS . $path_and_name[1] . DS;
                $tmp_name = $path_and_name[2];

                // 対象ファイルを添付
                $email-&gt;attach($tmp_path.$tmp_name, false, null, null, $file_detail['name']);
            }
        }

        $email-&gt;to($params['email'])
        -&gt;from(sample@example.com)
        -&gt;subject($params['title'])
        -&gt;html_body(nl2br ($params['message']))
        -&gt;send();
    } catch (\EmailValidationFailedException $e) {
        Log::warning($e-&gt;getTraceAsString());
        Log::warning($e-&gt;getMessage());
        throw $e;
    } catch (\EmailSendingFailedException $e) {
        Log::warning($e-&gt;getTraceAsString());
        Log::warning($e-&gt;getMessage());
        throw $e;
    } catch (\Exception $e) {
        Log::warning($e-&gt;getTraceAsString());
        Log::warning($e-&gt;getMessage());
        throw $e;
    }
}</pre><p>以上、複数のファイルを添付してメールを送る方法でした。</p>
<p>参考：</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="http://fuelphp.jp/docs/1.9/packages/email/methods.html">メソッド - Email パッケージ - FuelPHP ドキュメント</a>
			</p>
										<div class="ys-blog-card__domain">fuelphp.jp</div>
					</div>
	</div>
</div>The post <a href="https://mintaku-blog.net/fuelphp-files/">【FuelPHP】複数のファイルを添付してメールを送る方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/fuelphp-files/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">862</post-id>	</item>
		<item>
		<title>【FuelPHP】バリデーションの使い方。エラーメッセージを表示させるには？</title>
		<link>https://mintaku-blog.net/fuelphp-validation/</link>
					<comments>https://mintaku-blog.net/fuelphp-validation/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 26 Jan 2019 05:50:14 +0000</pubDate>
				<category><![CDATA[開発技術]]></category>
		<category><![CDATA[FuelPHP]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=819</guid>

					<description><![CDATA[<p>FuelPHPでバリデーションを使う方法を値入力からエラーメッセージ表示までをまとめてみました。 FuelPHPでバリデーションを使い、エラーメッセージを表 …</p>
The post <a href="https://mintaku-blog.net/fuelphp-validation/">【FuelPHP】バリデーションの使い方。エラーメッセージを表示させるには？</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>FuelPHPでバリデーションを使う方法を値入力からエラーメッセージ表示までをまとめてみました。</p>
<h2>FuelPHPでバリデーションを使い、エラーメッセージを表示させる</h2>
<p>バリデーションの引っかかった場合に、エラーメッセージを表示させます。エラーメッセージが複数ある場合を考慮し、implode()で配列要素を文字列として表示させています。</p>
<p>・edit.php</p><pre class="crayon-plain-tag">...

&lt;?php if (Session::get_flash('errors')): ?&gt;
    &lt;div class="alert alert-danger"&gt;
        &lt;p class="errorTxt"&gt;
            &lt;?php echo implode('&lt;/p&gt;&lt;p class="errorTxt"&gt;', e((array) Session::get_flash('errors'))); ?&gt;
        &lt;/p&gt;
    &lt;/div&gt;
&lt;?php endif; ?&gt;

...
&lt;?= Form::open('action' =&gt; '/user/update/' . $user-&gt;id, 'method' =&gt; 'post']);?&gt;
    &lt;ul&gt;
        &lt;li&gt;
            &lt;dl&gt;
                &lt;dt&gt;氏名&lt;/dt&gt;
                &lt;dd&gt;
                    &lt;?php echo Form::input('name', Input::post('name', isset($user-&gt;name) ? $user-&gt;name : ''), ['placeholder'=&gt;'氏名']); ?&gt;
                &lt;/dd&gt;
            &lt;/dl&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;dl&gt;
                &lt;dt&gt;メールアドレス&lt;/dt&gt;
                &lt;dd&gt;
                    &lt;?php echo Form::input('email', Input::post('email', isset($user-&gt;email) ? \Crypt::decode($user-&gt;email) : ''), ['placeholder'=&gt;'メールアドレス']); ?&gt;
                &lt;/dd&gt;
            &lt;/dl&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;dl&gt;
                &lt;dt&gt;電話番号&lt;/dt&gt;
                &lt;dd&gt;
                    &lt;?php echo Form::input('phone_number', Input::post('phone_number', isset($user-&gt;phone_number) ? $user-&gt;phone_number : ''), ['placeholder'=&gt;'電話番号']); ?&gt;
                &lt;/dd&gt;
            &lt;/dl&gt;
        &lt;/li&gt;
    &lt;/ul&gt;

...

&lt;p class="btn"&gt;
    &lt;input type="submit" value="登録する" class="main" onClick="return confirm('登録します。よろしいですか？');"&gt;
&lt;/p&gt;

&lt;?= Form::close(); ?&gt;</pre><p>&nbsp;</p>
<p>バリデーションの処理は以下のように実装しました。</p>
<p>バリデーションを実行するメソッドを呼び出し、引っかかった場合はエラーメッセージと共にViewにリダイレクトします。すると、先ほどViewで書いたif (Session::get_flash(&#8216;error&#8217;))がtrueになるのでバリデーションのエラーメッセージが表示されます。</p>
<p>例えば、氏名を空で送信すると、「氏名は必須入力です。」のようなエラーメッセージが表示されます。</p>
<p>バリデートに成功した場合は、try・catch内でトランザクションを張って更新処理を実装するような形になります。</p>
<p>バリデーションのルールは公式リファレンスに詳しく書いてあります。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="http://fuelphp.jp/docs/1.5/classes/validation/validation.html">Validation - クラス - FuelPHP ドキュメント</a>
			</p>
										<div class="ys-blog-card__domain">fuelphp.jp</div>
					</div>
	</div>
</div>

<p>・users.php</p><pre class="crayon-plain-tag">...

private $validator;

/**
* 更新処理
* @param int $id
*/
public function post_update(int $id)
{
    // Viewから送られてきた入力値を取得する(今回の場合は、氏名・メールアドレス・電話番号)
    $params = \Input::post();

    // バリデーション実行
    $validator = $this-&gt;validate($params);

    // バリデートに失敗した場合はリダイレクトし、エラーメッセージを表示
    if (!$validator) {
        \Session::set_flash('errors', $this-&gt;validator-&gt;error());
        \Response::redirect('/user/edit/' . $id);
    }

    // 更新処理
...

}

/**
* バリデーション実行
* @param array $params
* @return bool
*/
private function validate(array $params)
{
    $validator = \Validation::forge('user');
    $validator-&gt;add_callable('\Api\Validation_MyRules');
    $validator-&gt;add_field('name', '氏名', 'required|max_length[50]');
    $validator-&gt;add_field('email', 'メールアドレス', 'required|valid_email|max_length[50]');
    $validator-&gt;add_field('phone_number', '電話番号', 'required|max_length[15]|valid_string[numeric]');

    if (!$validator-&gt;run($params)) {
        $this-&gt;validator = $validator;
        return false;
    }

    return true;
}

...</pre><p>&nbsp;</p>
<p>バリデーションを独自で拡張する場合は、以下のように新規ファイルを作成して独自ルールのメソッドを追加します。<br />
・myrules.php</p><pre class="crayon-plain-tag">&lt;?php

class Validation_MyRules
{
    /**
    * ユーザーIDの存在チェック
    *
    * @param int $val
    * @return boolean
    */
    public static function _validation_check_user_id($val)
    {
        $user = \Model_Db_User::find($val);
        return isset($user);
    }

...

}</pre><p>使うときは以下のようにして呼び出します。</p><pre class="crayon-plain-tag">$val = Validation::forge();
$val-&gt;add_callable('Validation_MyRules');</pre><p>非静的に追加すると、静的メソッドも非静的メソッドも使用できます。</p><pre class="crayon-plain-tag">$val-&gt;add_callable(new Validation_MyRules());</pre><p></p>The post <a href="https://mintaku-blog.net/fuelphp-validation/">【FuelPHP】バリデーションの使い方。エラーメッセージを表示させるには？</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/fuelphp-validation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">819</post-id>	</item>
		<item>
		<title>FuelPHPのマイグレーションの作成と実行方法</title>
		<link>https://mintaku-blog.net/fuelphp-migration/</link>
					<comments>https://mintaku-blog.net/fuelphp-migration/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 09 Jan 2019 15:01:48 +0000</pubDate>
				<category><![CDATA[開発技術]]></category>
		<category><![CDATA[FuelPHP]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=807</guid>

					<description><![CDATA[<p>FuelPHPのマイグレーションの作成と実行方法の流れをサクッとまとめてみました。 マイグレーション機能 マイグレーション機能を活用することで、簡単にDBの …</p>
The post <a href="https://mintaku-blog.net/fuelphp-migration/">FuelPHPのマイグレーションの作成と実行方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>FuelPHPのマイグレーションの作成と実行方法の流れをサクッとまとめてみました。</p>
<h2>マイグレーション機能</h2>
<p>マイグレーション機能を活用することで、簡単にDBのテーブルの変更や削除などの操作や管理を行うことできます。</p>
<p>マイグレーションファイルを実行することで、ファイルの中身に基づいてテーブルを生成してくれるため、複数人で開発しているときなどDB環境をあわせるのに役立つ機能となっています。</p>
<h3>FuelPHP バージョンを確認</h3>
<p>以下のコマンドでFuelPHPフレームワークのバージョンを確認しておきます。</p><pre class="crayon-plain-tag">$ php oil -v
Fuel: 1.8 running in "local" mode</pre><p></p>
<h3>FuelPHP マイグレーションファイルの自動生成</h3>
<p>以下のコマンドでマイグレーションファイルを自動生成します。</p>
<p>オプションのコマンドで、テーブルのカラムを追加することができます。001は最初のファイルの番号で、続けて002、003とファイル名の先頭に追加されます。</p><pre class="crayon-plain-tag">$ php oil generate migration create_members
Creating migration: /var/www/fuel/app/migrations/001_create_members.php</pre><p>自動生成されたファイルを確認すると、以下のようになっています。今回は、自動生成されたマイグレーションファイルを編集していきます。</p>
<p>up()は、マイグレーションのテーブル作成コマンド実行時に処理が流れます。down()は反対にテーブル削除実行時に流れます。</p><pre class="crayon-plain-tag">001_create_members.php

&lt;?php

namespace Fuel\Migrations;

class Create_members
{
    public function up()
    {
        \DBUtil::create_table('members', array(
        'id' =&gt; array('constraint' =&gt; 11, 'type' =&gt; 'int', 'auto_increment' =&gt; true, 'unsigned' =&gt; true),
    ), array('id'));
}

    public function down()
    {
        \DBUtil::drop_table('members');
    }
}</pre><p></p>
<h3>FuelPHP マイグレーションファイルの編集</h3>
<p>仮としてmembersテーブルのマイグレーションファイルを作成しました。array()の部分は使用しているPHPのバージョンが5.4以上なので[]に置換しておきました。</p>
<p>マイグレーションファイルにインデックスを作成することもできます。インデックスを作成することで、対象のカラムのデータを高速に検索し、取り出すことができます。</p>
<p>データ検索時はインデックスの方を検索するため、大量のデータを格納する場合はインデックスを作成しておきましょう。</p><pre class="crayon-plain-tag">&lt;?php

namespace Fuel\Migrations;

class Create_members
{
    const TABLE_NAME = 'members';
    public function up()
    {
        // create table
        \DBUtil::create_table(self::TABLE_NAME, [
            'id' =&gt; ['constraint' =&gt; 11, 'type' =&gt; 'int', 'unsigned' =&gt; true, 'auto_increment' =&gt; true],
            'name' =&gt; ['constraint' =&gt; 32, 'type' =&gt; 'varchar'],
            'type' =&gt; ['constraint' =&gt; 11, 'type' =&gt; 'int', 'unsigned' =&gt; true],
            'email' =&gt; ['constraint' =&gt; 1024, 'type' =&gt; 'varchar', 'null' =&gt; false],
            'phone_number' =&gt; ['constraint' =&gt; 11, 'type' =&gt; 'int', 'unsigned' =&gt; true],
            'status' =&gt; ['constraint' =&gt; '"active","inactive","banned"', 'type' =&gt; 'enum'],
            'created_at' =&gt; ['type' =&gt; 'datetime'],
            'updated_at' =&gt; ['type' =&gt; 'datetime', 'null' =&gt; true],
            'deleted_at' =&gt; ['type' =&gt; 'datetime', 'null' =&gt; true],
        ], ['id']);

        // create index
        \DBUtil::create_index(self::TABLE_NAME, 
            ['type'],
            'idx_type'
        );
    }

    public function down()
    {
        // drop table
        \DBUtil::drop_table(self::TABLE_NAME);

        // drop index
        \DBUtil::drop_index(self::TABLE_NAME, 'idx_type');
    }
}</pre><p></p>
<h3>FuelPHP マイグレーションファイルの実行</h3>
<p>作成したマイグレーションファイルを以下のコマンドで実行します。</p>
<p>エラーになる場合は、エラーメッセージからマイグレーションファイルを修正しましょう。</p><pre class="crayon-plain-tag">$ php oil refine migrate
Performed migrations for app:default:
001_create_members</pre><p>データベースを確認すると、テーブルが追加されていることが確認できます。</p>
<p><img data-attachment-id="814" data-permalink="https://mintaku-blog.net/fuelphp-migration/members_table/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/members_table.png?fit=928%2C219&amp;ssl=1" data-orig-size="928,219" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="members_table" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/members_table.png?fit=300%2C71&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/members_table.png?fit=800%2C189&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-814" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/members_table.png?resize=800%2C189" alt="" width="800" height="189" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/members_table.png?w=928&amp;ssl=1 928w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/members_table.png?resize=300%2C71&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2019/01/members_table.png?resize=768%2C181&amp;ssl=1 768w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>テーブルを削除する場合は、downコマンドを実行します。するとテーブルが削除されていることが確認できます。</p><pre class="crayon-plain-tag">$ php oil refine migrate:down
Reverted migrations for app:default:
- 001_create_members</pre><p>再度、テーブルを作成するときはupコマンドを実行しましょう。</p><pre class="crayon-plain-tag">$ php oil refine migrate:up
Newly installed migrations for app:default:
- 001_create_members</pre><p></p>
<h3>FuelPHP マイグレーションファイルの操作</h3>
<p>他にもマイグレーションの操作には、以下のようなコマンドがあります。</p>
<p>現在のマイグレーションのバージョンを取得し、最新の状態に向けてマイグレーションファイルを実行していきます。</p><pre class="crayon-plain-tag">$ php oil refine migrate:current</pre><p>以下のコマンドで、指定したバージョンに更新します。</p><pre class="crayon-plain-tag">$ php oil refine migrate --version='バージョン'</pre><p>以上、簡単にマイグレーション作成と実行の流れをまとめてみました。</p>The post <a href="https://mintaku-blog.net/fuelphp-migration/">FuelPHPのマイグレーションの作成と実行方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/fuelphp-migration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">807</post-id>	</item>
	</channel>
</rss>
