cakePHP使用時におけるクラスの呼び出し方法について

このQ&Aのポイント
  • cakePHP使用時におけるApp:import()の使用法について質問します。他クラスをController内で呼び出すことは可能なのでしょうか?
  • Categoryクラスを例に挙げ、コントローラ内でApp:import()を使用してクラスを呼び出す方法を説明します。
  • App:import()はcontroller/view/model/behaivior/helperクラスでのみ使用できる仕組みになっており、viewテンプレート内でも使用することができます。
回答を見る
  • ベストアンサー

cakePHP使用時におけるクラス

お世話になっています。 cakePHP使用時におけるApp:import()の使用法について質問します。 したいのが、他クラスをController内で呼び出したいのですが、 可能なのでしょうか? viewテンプレート内で呼び出しているようなのですが、本来view内で呼び出すものなのでしょうか? 例とし、 コントローラ時に渡されてきた値が、1,2,のとき common/Category.phpでそれに応じて「one」、「two」を返して、 viewに渡す つまり、 SampleController extends Controller { public index() { //ここでApp:import()したい App:import(); //common/categoryクラスのインポート Category cate = new Category(2); //ここでの値をviewに渡す(略) } } public class Category { private $key; public _construct(num){ if(num == 1) { $key="one"; else if(num == 2) { $key="two"; } else { $key="zero"; } return $key; } } 参考にしたURLは、 http://book.cakephp.org/ja/view/499/The-App-Classです。 全体として、App:import()でクラスを呼び出す場合は、 controller/view/model/behaivior/helperクラスでないとできないのでしょうか? また、App:import()が使用できるのは、view内だけなのでしょうか? 宜しくお願いします。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.1

App:importは、コントローラーのPHPファイルからでも呼び出せるはず。ロードできるのは、コントローラーやモデルの他、「venders」フォルダに入れてあるライブラリ。例えば、ここにmylib.phpというのを入れておいたら、App:import('vender','mylib');でロードできるはず。 ただ、それ以外の場所にあるものはどうだろうか。すべての場所のものをロードできるわけではなく、指定された場所からだったと思う。ライブラリとして使いたいものはvendersにおく、というのがCakePHPの基本ルールのように思った。とりあえず、vendersにおいて試してみてはどうか。

rena_mari
質問者

お礼

回答ありがとうございます。 vendersフォルダに置いたところ正常にロードできました ありがとうございました。

関連するQ&A

  • CakePHPでヘルパーが使えません

    CakePHPを使用して開発を行っています。 app/views/helpers/common_lib.php に、class CommonLibHelper extends AppHelper としてヘルパークラスを作り、コントローラーの$helpersにarray('CommonLib')を記述しました。 ビューファイルにて、$common_lib->function() として、ヘルパーで定義したメソッドを呼ぶと、 undefined variable: common_libと言われてしまいます。どうしてか教えていただけませんか? クラス名やファイル名は合っていると思うのですが・・・。 CakePHPのバージョンは、1.3.6です。

    • ベストアンサー
    • PHP
  • Cakephp AppControllerについて

    CakePHPにて、 AppControllerクラスに処理を記述しようと思い、 app/app_controller.php を設置したのですが、 app/app_controller.php がどうしても呼び出されません。 色々調べてるのですが、どうしても原因が分かりません。 原因等分かる方がおりましたら教えて頂けますでしょうか? ---------------------- ■cakephpのバージョンは1.3です。 ■app/app_controller.phpの中身は↓です。 class AppController extends Controller { function __construct() { parent::__construct(); } function beforeFilter() { echo "test"; ←これが呼ばれない。 } } ----------------------

    • ベストアンサー
    • PHP
  • CakePHPのディレクトリ構成について(app)

    CakePHPのapp内のディレクトリ名について教えてください。 CakePHPを使ってみたいと思いインストールまで実行しました。 作成したプログラムはappディレクトリ内に配置するようですが、 公式ドキュメントとapp内のディレクトリ名が違います。 バージョン:CakePHP ver 2.0.3 安定版 Cookbook(公式ドキュメント)を見ると 「2.3 CakePHPのフォルダ構造」 http://book.cakephp.org/ja/view/899/CakePHP%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E6%A7%8B%E9%80%A0 Appフォルダは controllers libs models views ・・・ と記載してあります。 実際にappディレクトリを見てみると Controller Lib Model View ・・・ というように始めの文字が大文字になっていて複数形がなくなっています。 これはバージョンの違いによるものなのでしょうか? 公式ドキュメントでappのcontrollerディレクトリにファイルを作ってアップロードとなっていたら、実際にはappのControllerディレクトリにファイルをアップロードすれば良いのでしょうか? それとも、Controllerディレクトリとは別にマニュアルと同じ名前controllerディレクトリを作成してその中にファイルをアップロードするのでしょうか?

    • ベストアンサー
    • PHP
  • CakePHP で、質問させていただきます。CakePHPは、初心者で

    CakePHP で、質問させていただきます。CakePHPは、初心者です。 app/controllers のコントローラ「mobilehellow_controller.php」で、以下のようにデータをセットして、DBにインサートしようとしていますが、何もDBには追加されません。 $saveData = array( "NUM" => $item[$hscan_offset]['kyujin_syokusyu'], "JOBTYPE" => 'kyujin_syokusyu', )); $this->Mobilehellow->create(); $this->Mobilehellow->save($saveData); 画面上には、こんな文字が表示されました。 Query: INSERT INTO "mobilehellows" ("NUM") VALUES ('nextval(''"helloworkmobilep01_NUM_seq"''') DBの構成はこれです。 NUM integer NOT NULL JOBTYPE text エラーも何も出なので、どうしてなのかわかりません。 どうか、ご存知の方お教えください。

    • ベストアンサー
    • PHP
  • CakePHPのコントローラの作成

    PHP初心者です。 CakePHPをインストールし試しにTestControlerを作成したのですが、ページが開きません。 PageNotFoundになります。 考えられる原因が分かれば教えて下さい。 【やったこと】 ・ [CakePHP root]\app\Controller に TestController.php を作成。 <?php App::uses('AppController', 'Controller'); class TestController extends AppController { } ・ URLにアクセス http://[CakePHP root]/Test ⇒ Not Found http://[CakePHP root]/test ⇒ Not Found http://[CakePHP root]/app/webroot/index.php?url=test ⇒ CakePHPのindex.phpが表示される。 http://[CakePHP root]/app/webroot/index.php?url=Test ⇒CakePHPのindex.phpが表示される。 以下のサイトを参考にしました。mod_rewriteが動いていない可能性がある ということなので、URL直接指定もしてみましたがダメでした。 http://codezine.jp/article/detail/768?p=2 よろしくお願いします。

    • ベストアンサー
    • PHP
  • cakephp エラーハンドリングができません

    cakephpを利用しているシステムで、2種類のエラーを作っておいてcontrollersの呼び出しで振り分けたいと思いますがうまくできません。 マニュアルページ(http://book.cakephp.org/ja/view/154/Error-Handling)を参考に、 app/app_error.phpを以下のように作成しました。 ((1)エラー:error(2)エラー:errorsta) ----------------------------------------------------------------- <?php class AppError extends ErrorHandler{ function error(){ $this->controller->viewPath = 'errors'; $this->__outputMessage('error'); } function errorsta(){ $this->controller->viewPath = 'errors'; $this->__outputMessage('errorsta'); } } ?> ----------------------------------------------------------------- 上記内容で、メソッドerrorは実行できるのですが、errorstaが一向に動いてくれず、404扱いになってしまいます。 app/app_error.php以外にも設定が必要なものがあるのでしょうか?

    • 締切済み
    • PHP
  • CakePHPでディレクトリ分けをしたい

    CakePHP2.3.4、サーバーはロリポップにて開発を行っております。 やりたいことは、コントローラーのディレクトリ分けです。 以下のようなディレクトリ構造にして、 app  |_Controller  |   |_admin  |    |    |_LoginController.php  ※メソッドはindex()のみと仮定  |    |    |_・・・.php  |    |  |    |_ListController.php  ※メソッドはindex()のみと仮定  |  |_View ※Viewも分けますが、今は省略しています。 アプリケーション「LoginCntroller.php」にアクセスする場合は http://○○.ne.jp/admin/login/index アプリケーション「ListController.php」にアクセスする場合は http://○○.ne.jp/list/index でアクセスしたいです。 自分なりに調べて、「bootstrap.php」に以下追加、 App::build(array(  'Controller' => array(ROOT.DS.APP_DIR.DS.'Controllers'.DS.'Admin'.DS,) )); 「route.php」に以下追加、 Router::connect('/admin/login', array('controller' => 'login', 'action' => 'index')); などと行ってみてはいるのですが、結果、以下のエラーになってしまいます。 Missing Controller Error: AdminController could not be found. Error: Create the class AdminController below in file: app/Controller/AdminController.php <?php class AdminController extends AppController { } Controller直下に配置したアプリケーションに関しては問題なく実行されます。 何が悪いのか見当もつかず困っております。 よろしければご教授いただけませんでしょうか。

    • 締切済み
    • PHP
  • CakePHPでのログイン画面生成について。

    CakePHPでのログイン画面生成について。 参考URLは以下です。 http://h2o-space.com/blog/1950 以上の記事の通り設定・アップロードをし、 add.phpにアクセスすると Missing Method in ViewsController Error: The action add.php is not defined in controller ViewsController Error: Create ViewsController::add.php() in file: app/controllers/views_controller.php. <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> とのエラーが出ます。 <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> をviews_controller.phpに書き込むと Parse error: syntax error, unexpected '.', expecting '(' in /home/rslitefc2/users/アカウント/public_html/login/app/controllers/views_controller.php on line 7 と、エラーが出ます。 7行目の記述はfunction add.php() {です。 どうしたらログイン画面を正しく生成することが出来るでしょうか? どなたかお教えいただければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Cakephp2.0で、PhantomJs

    Cakephp 2.0のConsole/Commandで、スクレイピングを行う処理を実装しようとしています。 PhantomJsを使おうとしていますがどうもうまくいきません。 composerを利用してPhantomJsを、 /XAMPP/xamppfiles/htdocs/cakephp/app/Vendor にインストールしました。 ”/XAMPP/xamppfiles/htdocs/cakephp/app/” に test.phpとして、 <?PHP require_once('vendor/autoload.php' ); use JonnyW\PhantomJs\Client; $client = Client::getInstance(); $client->getEngine()->setPath('vendor/bin/phantomjs'); $request = $client->getMessageFactory()->createRequest(); $response = $client->getMessageFactory()->createResponse(); $request->setMethod('GET'); $request->setUrl('https://pg.kdtk.net/sample/phamtomjs_test.html'); $client->send($request, $response); echo "request url: " . $request->getUrl() . "\n"; echo "response: " . $response->getStatus() . "\n"; if($response->getStatus() === 200) { echo "content: \n"; echo $response->getContent(); } ?> というサンプルプログラムを実行するとうまくいきました。 これを、Console/Commandで実装したいのですが、どのように実装したら良いかわかりません。 例えば /XAMPP/xamppfiles/htdocs/cakephp/app/Console/Command に、 SampleShell.php として保存し、 <?php class SampleShell extends AppShell { public function startup() { parent::startup(); App::import('Vendor', 'Client', array('file' => 'JonnyW/PhantomJs/Client.php')); } // メイン実行関数 public function main() { $client = Client::getInstance(); } } ?> php cake.php Sample を実装すると、 PHP Fatal error: Class 'Client' not found ・・・ とエラーとなります。 インスタンスを生成できるようにするにはどのようにすれば良いのでしょうか? ご教示いただきますよう、何卒宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • CakePHP 1.3について

    CakePHPが初心者です。 Views-userdetail-index.ctpにて <?php echo $form->create(null,array('type'=>'get','action'=>'./updateRecord')); ?> ~ <?php echo $form->textarea("User.remarks", array("cols" => 22,"rows" => 2)); ?> ~ を記述し、userdetail_controllerにて function updateRecord(){ if (!empty($this->data)){ $this->User->id = 1; $this->User->saveField('remarks','exists'); } else { $this->User->id = 1; $this->User->saveField('remarks','empty'); } $this->redirect('.'); } を記述しています。 しかし、どうしても「!empty($this->data)」の判別によってemptyとなってしまいます。 User.remarksの部分をUserdetailにして色々ためしましたが、どうしても値の受け渡しがうまくいかないのです。 どなたかご教授を宜しくお願い致します。

    • ベストアンサー
    • PHP