-
CakePHP3 ビュー(Template)から独自Helperを使うサンプルコード
2017/12/02 -ビュー(Template)
サンプルコード, HelperCakePHP3 ビュー(Template)から独自Helperを使うサンプルコードです。 ◯ 独自Helper
123456789101112131415161718192021222324// ファイル名 「src/View/Helper/Cake3Helper.php」<?phpnamespace App\View\Helper;use Cake\View\Helper;class Cake3Helper extends Helper{public function initialize(array $config){parent::initialize($config);}// trailing slash(末尾スラッシュの統一)public function addslash($url){if (preg_match('/\/$/', $url)) {return $url;} else {return $url.DS;}}}…
-
CakePHP3 レコード更新時にmodifiedを更新しない方法
2017/12/02 -モデル(Model)
modified, レコード更新, setDirtyCakePHP3 レコード更新時に特定カラム(modified)を更新しない方法です。
12345678$user = $this->Users->get($id);$user['last_login'] = date('Y-m-d H:i:s');// modified更新しない$user->dirty('modified', true); // CakePHP ~3.3$user->setDirty('modified', true); // CakePHP 3.4~$this->Users->save($user);
-
CakePHP3 フラッシュメッセージを4秒後に非表示にする方法
2017/12/01 -ビュー(Template)
fadeOut, フラッシュメッセージ, サンプルコード, fadeIn, delay, 非表示CakePHP3 フラッシュ(flash)メッセージを4秒後に非表示にするサンプルコードです。
123456789// ctpファイルに追記する<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script><script>$(function(){$('div.message').fadeIn('slow', function() {$(this).delay(4000).fadeOut('slow');});});</script>
-
CakePHP3 ImageMagickで写真(画像)リサイズするサンプルコード
2017/12/01 -コントローラー(Controller)
リサイズ, ImageMagick, サンプルコード◯ CakePHP3 ImageMagickで写真(画像)リサイズするサンプルコードです。
123456789101112131415161718192021222324252627282930// サンプルコード// 縦: xxxpx -> 600px// 写真パス$photo_file_path = '写真パス';// 写真読み込み$imagick_img = new \Imagick($photo_file_path);// 写真サイズ取得$img_width = $imagick_img->getImageWidth();$img_height = $imagick_img->getImageHeight();// 写真リサイズ// 縦サイズ601px以上だったら縦サイズ600pxにリサイズ$max_height = 600;if (!empty($img_width) && !empty($img_height) && ($max_height < $img_height)) {// リサイズ処理if (!$imagick_img->resizeImage(0, $max_height, \Imagick::FILTER_POINT, 1)) {// resizeImageエラー}}// 写真上書き保存if (!$imagick_img->writeImage($photo_file_path)) {// 上書き保存エラー}// Imagick clear$imagick_img->clear();関連リンク:CentO …
-
CakePHP3 ImageMagickで写真(画像)圧縮するサンプルコード
2017/12/01 -コントローラー(Controller)
写真圧縮, 圧縮品質, ImageMagick, サンプルコード◯ CakePHP3 ImageMagickで写真(画像)圧縮するサンプルコードです。
123456789101112131415161718192021222324252627282930313233// サンプルコード// 対象ファイル:JPEG,PNG,GIF// 圧縮品質:80// 写真パス$photo_file_path = '写真パス';// 写真拡張子取得$file_extension = pathinfo($photo_file_path, PATHINFO_EXTENSION);// 写真読み込み$imagick_img = new \Imagick($photo_file_path);// 写真圧縮設定if ($file_extension == 'jpeg' || $file_extension == 'jpg') {$imagick_img->setImageFormat('jpg');$imagick_img->setImageCompression(\Imagick::COMPRESSION_JPEG);} elseif ($file_extension == 'png') {$imagick_img->setImageFormat('png');$imagick_img->setImageCompression(\Imagick::COMPRESSION_UNDEFINED);} else {$imagick_img->setImageFormat('gif');$imagick_img->setImageCompression(\Imagick::COMPRESSION_UNDEFINED);}$imagick_img->setImageCompressionQuality(80);// 写真上書き保存if (!$imagick_img->writeImage($photo_file_path)) {// 上書き保存エラー}// Imagick clear$imagick_img->clear();関連リンク:CentOS6 …
-
CakePHP3 ImageMagickでExifのOrientation情報あったら写真回転する
2017/12/01 -コントローラー(Controller)
写真回転, Orientation, ImageMagick, EXIF◯ CakePHP3 ImageMagickでExifのOrientation情報あったら写真回転する方法(JPEGのみ)。 [crayon-60115a7eb4fe1561803 …
-
CentOS6.9 PHP用ImageMagick(画像処理ツール)インストール方法
◯ CentOS6.9 PHP用ImageMagick(画像処理ツール)インストール方法です。
123456789101112131415161718192021222324// ImageMagick, ImageMagick-develインストール# yum install ImageMagick ImageMagick-devel// PHP用(imagick)インストール// 「Please provide the prefix of Imagemagick installation」表示されたらEnter入力# pecl install imagick// 「/etc/pnp.ini」最終行に追記extension=imagick.so// 下記コマンドでenabledであることを確認するphp -r "echo phpinfo();" | grep "imagick"imagick module => enabledimagick module version => 3.4.3~// パーミッション変更cd /usr/lib64/php/moduleschmod 755 imagick.so// php-fpm, nginx再起動sudo service php-fpm restartsudo service nginx restart
-
CakePHP3 写真から位置情報(GPS)を取得するサンプルコード
2017/12/01 -コントローラー(Controller)
EXIF, 高度, 経度, 緯度, exif_read_data, GPS, 位置情報, longitude, latitude, サンプルコード◯ CakePHP3 写真から位置情報(GPS)を取得するサンプルコードです。
1234567891011121314151617181920212223242526272829303132333435363738394041424344class UsersController extends AppController{public function index(){// Exif取得(EXIFヘッダを読み込む)$exif_data = @exif_read_data('画像パス');// GPS(緯度・経度)取得if (isset($exif_data) && !empty($exif_data['GPSLatitudeRef']) && !empty($exif_data['GPSLatitude']) && !empty($exif_data['GPSLongitudeRef']) && !empty($exif_data['GPSLongitude'])) {$gps_lat = $this->exif_get_10_from_60($exif_data['GPSLatitudeRef'], $exif_data['GPSLatitude']);$gps_long = $this->exif_get_10_from_60($exif_data['GPSLongitudeRef'], $exif_data['GPSLongitude']);}// GPS(高度)取得if (isset($exif_data['GPSAltitude']) && !empty($exif_data['GPSAltitude'])) {$gps_altitude = $this->exif_convert_float($exif_data['GPSAltitude']);if (isset($exif_data['GPSAltitudeRef']) && ($exif_data['GPSAltitudeRef'] == '1') && !empty($gps_altitude)) {// 海抜0m未満だったら$gps_altitude = ($gps_altitude * -1);}}var_dump($gps_lat); // 緯度:35.728466666667var_dump($gps_long); // 経度:139.70668055556var_dump($gps_altitude); // 高度:42.364415862808}// Exifの位置情報を60進数から10進数に変換private function exif_get_10_from_60($ref, $gps){// 60進数から10進数に変換$data = $this->exif_convert_float($gps[0]) + ($this->exif_convert_float($gps[1]) / 60) + ($this->exif_convert_float($gps[2]) / 3600);//南緯または西経の場合はマイナスにして返却return ($ref=='S' || $ref=='W') ? ($data * -1) : $data;}// 「x/y」という文字列を受け取り、「x÷y」の結果を返すprivate function exif_convert_float($str){$val = explode('/', $str);return isset($val[1]) ? ($val[0] / $val[1]) : $str;}}
-
jQuery3 Ajax通信のサンプルコードです。
1234567891011121314151617181920212223// ex) カテゴリ追加$(function(){$.ajax({url: '/add', // リクエスト送信先URLtype: 'POST', // get or postメソッドtimeout: 2000, // タイムアウト時間をミリ秒で設定cache: false, // キャッシュ無効data: {'category_name': category_name}, // サーバーに送信する値dataType: 'json' // サーバーから返されるデータ型}).done(function (response, textStatus, jqXHR) {// サーバー側[php] echo json_encode(['status' => true or false]);if (response.status) {// 追加成功alert('success.');} else {// 追加失敗alert('error.');}}).fail(function (jqXHR, textStatus, errorThrown) {// 通信失敗alert('error.');});});
-
CakePHP3 Ajax通信でコントローラーの途中で抜ける方法
2017/11/30 -コントローラー(Controller)
autoRender, echo, json_encode, return, AjaxCakePHP3 Ajax通信でコントローラーの途中で抜ける方法の参考コードです。
12345678910111213public function index(){$this->autoRender = FALSE;$flg = true; // true or falseif (!$flg) {// Ajax戻り値echo json_encode(['status' => false, 'err_msg' => __('サーバーエラーが発生しました。')]);// ここで処理終了return;}}
-
CakePHP3 コントローラーでのtry-catch例外処理の参考コードです。
1234567891011121314151617181920212223use Cake\Core\Exception\Exception; // Exceptionクラスインポートclass UsersController extends AppController{public function index(){try {$flg = true; // true or falseif (!$flg) {throw new Exception(); // 例外エラー投げる}echo 'OK';} catch(Exception $e) {echo 'NG';}}}// 「$flg==true」の場合出力ログ: 'OK'// 「$flg==false」の場合出力ログ: 'NG'
-
2017/11/29 -コントローラー(Controller)
データ整合性, ロールバック, トランザクション処理, ConnectionManagerCakePHP3 トランザクション(transaction)処理の流れです。 ※ 複数テーブル更新時などに使用(データ整合性を保つため) [crayon-60115a7eb5d60 …
-
CakePHP3 コントローラーでステータスコードを設定する方法
2017/11/29 -コントローラー(Controller)
ステータスコード, NotFound, ForbiddenCakePHP3 コントローラーでステータスコード(statusCode)を設定する方法です。
12345// 403 Forbidden$this->response->statusCode(403);// 404 Not Found$this->response->statusCode(404);
-
◯ free: メモリーの使用状況を表示 [-m 容量をMバイト単位]
12345# free -mtotal used free shared buffers cachedMem: 3830 525 3305 25 16 176-/+ buffers/cache: 331 3498Swap: 815 0 815◯ vmstat: メ …
-
2017/11/29 -PHP7
ディレクトリ, mkdir, file_existsPHP7 ディレクトリが存在しなければディレクトリ作成する方法。
12345// ディレクトリが存在しなければディレクトリ作成する$target_path = '/var/www/html/cakephp3.com/logs/'.date('Ymd');if (!file_exists($target_path)) {mkdir($target_path);}
-
CakePHP3の基本ディレクトリ構成(インストール直後)です。
1234567891011121314151617181920├── bin -- 実行コマンド├── config -- 設定ファイル├── logs -- ログ出力├── plugins -- プラグイン├── src -- 開発│ ├── Console│ ├── Controller -- コントローラー│ │ └── Component -- コンポーネント│ ├── Model -- モデル│ │ ├── Behavior -- ビヘイビア│ │ ├── Entity -- エンティティ│ │ └── Table -- テーブル│ ├── Shell -- シェル│ ├── Template -- テンプレート│ └── View│ └── Helper -- ヘルパー├── tests -- テスト関連├── tmp -- テンポラリ├── vendor -- 外部ライブラリ└── webroot -- WEB公開
-
CakePHP3 Sessionの保存先をDBに変更する方法
CakePHP3 Sessionの保存先(php)をDBに変更する方法です。 ◯ セッション保存用のテーブル作成
123456CREATE TABLE sessions (id char(40) NOT NULL,data text,expires INT(11) NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;◯&nbs …
-
2017/11/29 -コントローラー(Controller)
session, getSession, write, read, destroyCakePHP3 コントローラーでのセッション(session)の使い方です。
12345678910111213141516171819202122232425262728293031323334353637// ローカル変数にする$session = $this->request->getSession(); // CakePHP 3.5~$session = $this->request->session(); // CakePHP ~3.4// セッション書き込み$session->write('Config.language', 'ja');// セッション読み込み$session->read(); // 全て$session->read('Config.language'); // キー指定ex)var_dump($session->read()); // array('Config' => array('time' => int 1511915063 , 'language' => string 'ja'))var_dump($session->read('Config.language')); // 'ja'// セッション読み込み後に削除$session->consume('Config.language'); // キー指定ex)var_dump($session->read()); // array('Config' => array('time' => int 1511915063 , 'language' => string 'ja'))$session->consume('Config.language');var_dump($session->read()); // array('Config' => array('time' => int 1511915063))// セッション削除(キー指定)$session->delete('Config.language');// セッション破棄$session->destroy();// セッション存在確認(キー指定)$session->check('Config.language'); // 存在する: true, 存在しない: false