やったこと

webサービスを作るときに考えたことを垂れ流します

プログラミング

【CakePHP3】ルーティング設定で複数の引数をアクションに渡す!

CakePHP3のRouting設定でずいぶんつまづいてしまいました・・。例えば以下のようなURLでサイトにアクセスするとしますよね。 http://hogege.com/edit/hoge123/hoge456このときコントローラー側のdisplayアクションに以下のような引数が渡されるようにしたか…

【CakePHP3】ページネーションのデザインを指定したらエラー発生!

CakePHP3には「Pagination機能」というのがありますよね。「前へ」とか「次へ」みたいなボタンを配置して、違うページに遷移する処理を簡単に作れる機能です。 (参考ページ)http://book.cakephp.org/3.0/ja/controllers/components/pagination.htmlあの遷…

ajaxでjsonデータを送るとき連想配列が送信できないケース!

jquery ajaxでjsonのデータを送信しようとしたのですが、データがサーバ側へ届きませんでした(サーバ側で受信すると空になってる)。この原因ですが、送ろうとしているデータが「object型」ではなくて「array型(連想配列)」だったせいみたいです。以下のよ…

Javascriptで配列をオブジェクトに変換する!

Javascriptで配列をオブジェクトに変換する方法です。以下のようにして配列「arr」をobject「obj」に変換できます。 var arr = new Array(); arr["aaa"] = 111; arr["bbb"] = 222; arr["ccc"] = 333; //オブジェクトに変換! var obj = {}; for(key in arr){…

Twitter Bootstrapのラジオボタンを初めからチェック済みにする!

ブートストラップのRadioボタンを最初からチェック済みにする方法です。 <div class="radio"> <label class="radio-inline"> <input type="radio" name="is_publish" id="check_publish" value="yes"checked> 公開 </label> <label class="radio-inline"> <input type="radio" name="is_publish" id="check_unpublish" value="no"> 非公開 </label> </div>こんな風に「…

【CakePHP3】プライマリキーを指定してデータを保存したい!

CakePHP3で、主キー(Primary Key)を指定してデータを保存しようとしたのですが、「Field 'hogehoge_id' doesn't have a default value」とエラーが出て保存失敗してしまいました・・。コードは以下のようなもの。 $tweet_info->hogege_id = 100; //主キー…

【CakePHP3】existsInチェックはレコードの存在を確認するチェックだよ!

CakePHP3に「existsIn」チェックってありますよね。Modelでデータを変更するときに走るチェック処理です。テーブル設定ファイルの「buildRules」のとこに書いてありますよね。私このチェックの意味を勘違いしていました。これはテーブルの構造(フィールドの…

Twitterのアンケート内容はAPIで取得できない!

ツイッターにアンケート機能ってありますよね。つぶやきの中でフォロワーの人達に投票を呼びかけることが出来る機能です。あのアンケート内容ですが、今のところAPIで取得することはできません。通常、つぶやき中の「画像」や「動画」といったメディア情報は…

Twitterの埋め込み動画がうまく表示されないとき!

ツイッターの埋め込み動画を自分のサイトに載せようとしたのですが、なかなか苦労してしまいました・・。下記の「Twitter oembed API」によって埋め込みコードを取得して、それをサイトにjqueryで動的に追加しようとしたのですが、なかなか上手くいきません…

ツイッターの絵文字が化けてしまってうまく表示されないとき!

Twitterには絵文字を使える機能があります。「ニコちゃんマーク」とか「ハートマーク」とか、いろいろカラフルな文字が使えます。女子高生とかがよく使っていますよね。あの絵文字ツイート、自分のサイトで表示するときになんだか文字化け?してしまって、モ…

【CakePHP3】containによるデータ取得で主キー以外のバインド条件を指定!

CakePHP3でDBからレコードを検索するときに「contain」という命令がありますよね。以下のような感じの命令です。 $authors = TableRegistry::get('Authors'); $records = $authors->find()->where(['Authors.author_id' => 1234])->contain(['Users']); これ…

【CakePHP3】例外処理 Exception() が使えないとき!

CakePHP3で例外を発生させたいのですが「Exception()」を使おうとすると「Error: Class 'App\Controller\Exception' not found 」とエラーが表示されて使用出来ません。「Exception()」を使うには、下記のように「use \Exception;」しないとダメなんですね~…

【CakePHP3】コンポーネントからテーブルを呼び出す!

CakePHP3でComponentの中からTableを呼び出す方法です。以下のように「TableRegistry::get('Hogege')」といった感じで、Hogegeテーブルを呼び出します。 use Cake\ORM\TableRegistry; class AbababaComponent extends Component { public function check() {…

【CakePHP3】コンポーネントの中からコンポーネントを呼び出す!

CakePHP3でComponentの中から他のComponentを呼び出す方法です。例えば自分で作った「CookieChkComponent」から「CookieComponent」を呼び出すには以下のようにします。 class CookieChkComponent extends Component { //Cookieコンポーネント呼び出し publi…

【CakePHP3】標準クラス「stdClass」を呼びだすとエラーになる!

CakePHP3で空のオブジェクトを作りたくて「stdClass()」を呼び出したんだけどエラーになってしまった・・。CakePHP3では以下のように「\」とグローバルの名前空間を指定しないといけないみたい。下記のようなコードでちゃんとstdClassが使えたよ。 $user = n…

【CakePHP3】RouterでトップページのURLを取得!

CakePHP3でトップページのURLを取得する方法です。下記のように「Router」を利用するとお目当ての階層のURLを生成できます。第二引数をtrueにすると「FULL_BASE_URL」を付けてURLを出力します。 //「http://hogege.com/」を出力 $url = Router::url('/', …

【CakePHP3】SQLから引き出してきた時刻をフォーマットして出力する!

CakePHP3で時刻を所定フォーマットで出力する方法です。たとえば「$tweet->tweet_time」に「DateTime型」の時刻が入っているとします。このとき「i18nFormat()」というメソッドを使うと、「2016-04-27 12:00:00」みたいなフォーマットで時刻を出力できます。…

【Cakephp3】テンプレート内で使うのこの記法→「<?=・・・?>」ってなんなの?

Cakephp3のテンプレート内で「」という記法がよく使われているけども、一体これはなんなんでしょうか。何かの省略形?それとも特別な意味がある表現なのでしょうか?公式によるとこれは「Alternative Echos」という表現。 「」 は 「」と同じ意味だそうです…

【CakePHP3】コントローラーから他の名前のテーブルを参照する!

CakePHP3でControllerからテーブルを参照する方法です。デフォルトでは「$this」の配下にコントローラーと同名のテーブルがあって、それを叩くことでDBを操作できます。 Users->find()->limit(10)->all(); $this…

CakePHP3で日付(Datetime)をMySQLに保存できない!

CakePHP3で時刻(DataTime型)を保存しようと思ったんだけど、なかなかできなくて躓いてしまった・・。下記のようなコードで現在の日時をsaveしようとしたけども、保存されるのは「"0000-00-00 00:00:00"」というMySQLに設定したデフォルト値になってしまう・…

get_comments()でヒットするコメントがないときの 戻り値!

ワードプレスの「ユーザーコメント」を取得する関数に「get_comments()」というものがあります。この関数、ヒットするコメントがなかったときは「空の配列(empty array)」すなわち「array()」が返却されます。公式ヘルプにもちゃんとそう書いてありますね…

ワードプレスRSS出力の「description」文から特定文字を削除!

ワードプレスのRSS出力で「description」のフィールドってありますよね。各記事の概要が記載されるフィールドです。この文章中で「ある特定の文字列」をカットして出力させる方法です。記事に乗せている広告の宣伝文とかが表示されてうざいんですよね、それ…

phpMyAdminの「A_I」ってなんなの?

phpMyAdminのカラムの設定をする箇所で「A_I」っていうチェック項目があります。これは「auto increment」のこと。idを自動的に連番で付けてくれる機能のことですね。「A_I」という文字から「オートインクリメント」は中々連想できないですね、わかりづらい…

CakePHP3でBootstrapのglyphiconが使えないとき!

CakePHP3でTwitter Bootstrap(bootstrap-uiでインストール)を使用してるんだけども、アイコン(glyphicon)が使えなくて困りました。↓こんな感じでハートマークを表示させようとしてもフォントファイルを見つけられません。ふぉんと困った・・。 <span class="glyphicon glyphicon-heart"></span> これは、…

CakePHP3を泣きながらインストールした記録

CakePHP3をヒーヒー言いながらなんとかインストールできました(環境はCentOS 6.5)。 いろんなエラーが発生しまくって超めんどくさかった・・。以下頑張りの記録です。 その1「CakePHP3をインストール」 初めにやること、それは下記コマンドを実行してComp…

idiormで複数のDBを使う方法!

PHPのデータベース操作ライブラリ「idiorm」で複数のDB(SQLite)を使う方法です。 //hogege.dbからレコードを取得 ORM::configure('sqlite:'.'./hogege.db', null, 'db1'); $rec_hogege = ORM::for_table('table1', 'db1')->where('id', '123')->find_one(); …

ajaxで「false」の値を送信してもPHPでは「true」と判定される

クライアント側とサーバ側の「Boolean」の値に注意してください。例えば、下記のようにjquery ajaxでクライアントからサーバにBooleanの値を送信します。 var name="hogege"; var is_dead = false; //★falseの値をセット $.ajax({ url : "./post.php", type …

JavascriptでURL文字列中のクエリパラメータを削除する

GETメッセージのうしろにクエリパラメータとかが付きますよね。「http://hogege.jp/check.php?age=98&weight=120&height=148」みたいな感じで「?」の後ろに付くやつです。このパラメータをJavascriptで削除する方法です。正規表現で文字列置換しています。 …

Goutteでクッキーをserializeによって保存する方法!

PHPのスクレイピングライブラリ「Goutte」で、Cookieを保存する方法を考えました。現在の「Goutte」はまだ開発途上で、Cookieをファイルとしてセーブしたりロードしたりする機能がないみたいです・・。Githubでは「FileCookieJar」というのを組み込んで、Coo…

GoutteでDOM要素が存在するか確認する方法

PHPのスクレイピングライブラリ「Goutte」でお目当てのDOM要素が存在するか確認する方法です。 require_once './goutte/vendor/autoload.php'; use Goutte\Client; $client = new Client(); $crawler = $client->request('GET', 'http://hogege.com/'); $for…

「Fabric.js」のcanvasの参照の仕方・オブジェクトの参照の仕方

「Fabric.js」はHTML5のcanvas要素を扱いやすくしてくれる便利なjavascriptライブラリです。 例えばFabric.jsを使ってcanvas上に「○」を描くときは以下のようにします。 var canvas = new fabric.Canvas("mycanvas"); var circle = new fabric.Circle({ left…

【PHP】「idiorm」でエラーハンドリングする

以前PHPのデータベース操作ライブラリ「idiorm」というのを紹介しました。 ↓ PHPのデータベース操作ライブラリ「Idiorm」でSQLiteが楽々使えた - やったこと これでエラーハンドリングをするときの一例です try { //レコードをセーブ $record = ORM::for_tab…

【PHP】ニコニコ動画ランキングのRSSを読み込んで情報をパースする!

ニコニコ公式のRSSを利用して「動画ランキング」の情報を取得することができます。例えば「政治カテゴリ」の「本日の動画ランキング」の情報は以下URLで取得できます。 http://www.nicovideo.jp/ranking/view/daily/politics?rss=2.0上記URLを叩くと、以下の…

画面全体にオーバーレイがかかって広告を閉じるまで抜けられないえげつないトラップを作った!

サイト閲覧中に画面全体に薄くオーバーレイがかかって、真ん中の広告の閉じるボタンを押すまで抜けられない、えげつないトラップを作りました。海外のあやしい動画サイトとかでよく見ますよねこういうの。サイトにアクセスしてから一定時間経つとこの処理が…

ワードプレスSimplityのブログでアップロード可能なMIMEタイプを追加する

WordPress Simplityのブログで、メディアファイルをアップロードしようとしたら「 このファイルタイプはセキュリティの観点から許可されていません」とエラーが出て怒られてしまった。「pcap」っていう形式のパケットのキャプチャファイルをアップしようとし…

ワードプレスのXML-RPC機能で記事を非公開にセットする

ワードプレスのXML-RPC機能を使って、特定の記事を非公開にする方法です。 以下がPHPコードです。「IXR_Library.php」というライブラリを使用しています。$page_idで指定した記事を非公開にセットしています。 require_once '../IXR_Library.php'; $xml_url …

ワードプレスのXML-RPC機能で記事情報を取得する

ワードプレスのXML-RPC機能を使って、特定の記事の情報を取得する方法です。 以下がPHPコードです。「IXR_Library.php」というライブラリを使用しています。 require_once '../IXR_Library.php'; $xml_url = "http://hogege.com/xmlrpc.php"; $user_name = "…

PHPでクラス内のメンバ変数にオブジェクトを指定する場合

PHPで以下のようにクラス内のメンバ変数にオブジェクトをセットするとエラーがでてしまう。 class Test1 { public $hoge = new Test2(); } ↓ エラー文:「PHP Parse error: syntax error, unexpected 'new' (T_NEW)・・・」メンバ変数にオブジェクトをセット…

ワードプレスのXML-RPCによる外部投稿で「抜粋」フィールドをセットする方法

「XML-RPC」というプロトコルを使うと、WordPressに記事を外部から投稿することができる。WordPressのディレクトリ直下に「xmlrpc.php」というのがあるけど、ここにメッセージを送ると記事を遠隔投稿できるんだ。以下はPHPを使った自動投稿処理のコードだよ…

PHPのforeachを参照渡しで回したら最後の要素が上書きされちゃった!

PHPのforeachを参照渡しで回したら最後の要素が別の値に上書きされてしまったという話。 以下のコードをご覧下さい。 $test1 = array("111","222","333"); $test2 = array("aaa","bbb","ccc"); foreach($test1 as &$val){} foreach($test2 as $val){} print_…

ワードプレスのキャッシュプラグイン「W3 Total Cache」のログ

ワードプレスのキャッシュプラグイン「W3 Total Cache」の設定画面で以下の謎のログが出てきた。「The plugin is currently enabled in community mode.」これは「あなたはW3 Total Cacheの無料版を使っていますよ」という意味。有料版を買えば消えるらしい…

PHPのデータベース操作ライブラリ「Idiorm」でSQLiteが楽々使えた

「Idiorm」っていうPHPライブラリでデータベースが楽々操作できるよ!めんどくさいSQL構文ともこれでおさらばだよ!以下使い方だよ!①インストール 下記のgithubページでzipがダウンロードできるよ! https://github.com/j4mie/idiormzipを解凍するといっぱ…

「Goutte」で対象ページ中の全リンクURLを取得する

最近GoutteというPHPのスクレイピングライブラリをいじって遊んでる。 いろんなブログをスクレイパーで巡回して、良さそうな記事をピックアップして楽しむのが目的。以下のコードは、GoutteでHTMLページを読み込んで、その中の全「aタグ」を解析してリンクし…

phpをスクリプトで実行すると「mysql.soが読み込めません!」とエラーが出る件

最近用意したばかりのcentOS上で、phpのスクリプトを実行しようとしたら以下のようなWarningが出てしまった。 PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/msql.so' - /usr/lib64/php/modules/msql.so: cannot open …

javascriptで画像読み込みエラーを検知する

javascriptで画像(img)の読み込みエラーを検出しようと思ったけどうまくいかなかった。下記のようなコードを書いたけど、errorのイベントが発生しなかった。 function set_image_err(){ $("#img_hoge").error(function(){ //ここにエラー時の処理を書く }); …

cakePHP 2でエラー404ページを作りたい

CakePHP(2.x系)でエラー404ページを作る方法です。いろんなブログにやり方が書いてありますが、どれも試してもなかなかうまくいかない・・。そんな中で、自分が試してうまくいった方法を書きます。(ちなみに下記作業は /Config/core.php の debugを0にセッ…

bootstrapのモーダルの縦位置を調整する

twitter bootstrapのモーダルウィンドウの縦位置の調整の仕方。以下のようにcssに新しいクラスを宣言して、お目当てのモーダルに付けてあげるとtop位置が調整できるます。 /* css */ .modal-dialog-center { padding-top: 40%; } /* html */ <div class="modal fade" tabindex="-1"> <div class="modal-dialog modal-sm modal-dialog-center"> <div class="modal-content"> </div></div></div>

bootstrap progressbarの目盛りを線形に変化させたい

twitter bootstrapのプログレスバーの目盛りを連続的に変化させる処理を書いてるんだけど(ゲームキャラの行動タイマーです)、指定した値にビョイ~ンとした動きで移動してしまって困った。もっと直線的な動きで変化してほしいんだよね・・。以下のようにcs…

twitter API制限の「ユーザー単位」「アプリケーション単位」ってなんだ?

■twitterのAPI制限 twitterのAPI(version 1.1)には使用回数の制限(リミット)が設けられている。例えば「GET users/show」というユーザーアカウント情報を取得するAPIには「ユーザー単位で180回/15分」「アプリケーション単位で180回/15分」と制限が付いて…

要素一個の配列を宣言するときに注意すべきこと

javascriptで、要素一個の配列を宣言するときにありがちな間違い。以下のように記述してしまうと、空の値をもつ長さ10の配列が生成されてしまう。 var test = new Array(10); console.log(test); 以下のように記述すれば、「10」の値が格納された長さ1の配列…