質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.33%

FuelPHPに対しjQueryのajaxを利用していいね機能を実装したく、その際の$.get関数に関する質問

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,204
退会済みユーザー

退会済みユーザー

前提・実現したいこと

PHP(FuelPHP)を使って、多数の画像を提示するページを作っているのですが、
画像ごとにいいねボタンがあり、いいねボタンを押すとjsファイルのclickイベントが発生し、
$.getメソッドにより、classes/helper以下のファイルにアクセスし、
そのhelperの中でDBとやりとりするようなコードを書こうとしています。
(ちなみに、質問にはあまり関係ありませんが、DBのいいねを管理するテーブルのフィールドは、
id, user_id, image_id です。classes/helper以下のファイル中で、このテーブルに対しての操作や読み取りを行い、jsにその結果を返します。)

質問したいこと

classes/helper以下のファイルの中には、いいね!といいね取り消しを扱うメソッド、特定の画像のいいね数をcountするメソッドを定義します(以下)

<?php

class Helper_LikeImage
{
       public static function InsertLike()
       {
          //usr_idといいねした画像のimage_idをDBにinsertする
          self::LikeCount(); //jsに画像のいいね数をreturnする
       }

      public static function DeleteLike()
      {
          //いいね取り消しボタンが押されたとき、該当レコードをdeleteする
         self::LikeCount();  //jsに画像のいいね数をreturnする
      }

      public static function LikeCount()
      {
         //指定したimage_idの画像のいいね総数をDBからcountしてreturnする
      }


}


このとき、jQueryの$.getメソッドの第一引数にurlを指定すると思うのですが、
上記のhelperで定義したクラス中の特定のメソッドを選択してアクセスすることは可能でしょうか。
(可能でない場合は、同じ機能を実装できる代替策を知りたいです。)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

もしかしたら目的としていることとずれているかもしれませんが、helperのメソッドを呼び出すコントローラを定義して、そちらにajaxでアクセスすればよいのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/07 06:06

    回答ありがとうございます。
    質問事項をもっと具体化します。
    僕は、$.getの第一引数でファイル名のみ指定する方法しか知らないのですが、
    ファイルの中のクラスの特定の関数を指定して実行する方法があるか伺いたいです。

    キャンセル

  • 2016/06/07 23:41

    > 僕は、$.getの第一引数でファイル名のみ指定する方法しか知らないのですが、
    > ファイルの中のクラスの特定の関数を指定して実行する方法があるか伺いたいです。

    その、リクエストURIに応じて特定の処理を実行しレスポンスを返す
    という役割を担っているのがコントローラです。

    初期状態ではhttp://インストールパス/welcome/indexを開くと
    welcomeという画面が表示されると思います。
    これはファイル「app/controller/welcome」のaction_indexメソッド
    の実行結果です。

    なのでsearch_searchさんの回答のとおり、
    「コントローラを作成し目的の機能を呼び出す」で解決すると思われます。


    公式ドキュメントのリンクです。
    ajax用途の場合RESTコントローラを使ったほうが簡単です。

    コントローラ
    http://fuelphp.jp/docs/1.8/general/controllers/base.html

    RESTコントローラ
    http://fuelphp.jp/docs/1.8/general/controllers/rest.html

    キャンセル

  • 2016/06/07 23:59 編集

    $.getの第一引数はファイル名ではなくURLですね。
    FuelPHPはルーティング機能があるので、URLを特定のコントローラの特定の関数と結びつけることができます。なので、それを利用すればよいかと。

    デフォルト設定だと、URLの各セグメントはそれぞれ
    /コントローラ名/関数名/引数...
    に対応しています。

    ```php
    class Controller_Helper extends Controller {
    public function get_insert_like() {

    }
    }
    ```
    コントローラをこのように定義したとき、
    対応するURLは /helper/insert_like になります。
    なので、$.getで上記URLを指定すれば処理が走ります。

    -----
    更新してなかったのでコメントがかぶってしまいました(汗

    キャンセル

  • 2016/06/10 01:07

    解決しました!ありがとうございました!!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • FuelPHPに対しjQueryのajaxを利用していいね機能を実装したく、その際の$.get関数に関する質問