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

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

ただいまの
回答率

91.87%

  • PHP

    12496questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CakePHP

    1691questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

cakephp3のshellでデータベースへの接続について

解決済

回答 1

投稿 2016/10/05 05:39

  • 評価
  • クリップ 0
  • VIEW 690

HIROWADA

score 13

こんにちは。

cakephp3でshellの実行をしたいと考えております。

ProcsShellを作り、モデルのUsersを呼び出そうとしております。
プログラムは下記のとおりです。

src/shell/ProcShell.php

use App\config\app;



class ProcsShell extends Shell
{
    public function main()
    {
        parent::initialize();
        $this->loadModel('Users');   
    }
}


こちらを実行させると下記のようなエラーメッセージが出ます。
config/app.phpが走っておらず、defaultクラスがないと怒られているようです。

Datasource class default could not be found.  in [/home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/Datasource/ConnectionRegistry.php, line 57]

config/app.php

'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => "xxxxx",
            'username' => "xxx",
            'password' => "xxxxx",
            'database' => "xxxxxxx",
            'encoding' => 'utf8',
            'timezone' => 'Asia/Tokyo',
            'cacheMetadata' => true,
            'quoteIdentifiers' => false,
        ],

config/app.phpが実行されていないようなのですが
useの使い方が間違っているのでしょうか?

よろしくお願い致します。

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

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

    クリップした質問はマイページの「クリップ」タブからいつでも見ることができます。

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

同じコードを自分の環境で実行しても、同じようなエラーにならないですね
ちなみに、use App\config\app;という宣言はいらないです。内部で勝手に実行してくれています。
またparent::initialize();の処理もinitializeをオーバライドしていないなら、明示的に実行する必要はありません。コードは上記ですべてでしょうか。処理が他にあるのでしょうか。

もっともシンプルなシェルを書いてみたので実行してみてもらえますか

<?php
namespace App\Shell;

use Cake\Console\Shell;

class ProcsShell extends Shell
{
    public function main()
    {
        $this->loadModel('Users');
        debug($this->Users->find()->limit(5));
    }
}

(追記) 10/5 6:36

同じエラーを再現させることができました。
※app.phpのDatasources.default.classNameの設定を削除すると発生しますね

'Datasources' => [
         'default' => [
             //'className' => 'Cake\Database\Connection', // これがないとおきる
             'driver' => 'Cake\Database\Driver\Mysql',

投稿 2016/10/05 05:59

編集 2016/10/05 06:40

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/10/05 06:13

    icchiiさん

    いつもご教授いただきありがとうございます。非常に助かります。

    >同じコードを自分の環境で実行しても、同じようなエラーにならないですね
    するとどこかのコードを書き換えてしまっている可能性がありますね。

    >コードは上記ですべてでしょうか。処理が他にあるのでしょうか。
    useで幾つか宣言しておりましたが、一度全て消しicchiiさんの例へ変更し実行を致しました。

    >$this->loadModel('Users');

    で、エラーとなりdebugまでいけてないようです。
    下記がエラーの明細です。




    Exception: Datasource class default could not be found. in [/home/ubuntu/workspace/xxx/vendor/cakephp/cakephp/src/Datasource/ConnectionRegistry.php, line 57]
    2016-10-04 21:04:39 Error: [Cake\Datasource\Exception\MissingDatasourceException] Datasource class default could not be found.
    Exception Attributes: array (
    'class' => 'default',
    'plugin' => NULL,
    )
    Stack Trace:
    #0 /home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/Core/ObjectRegistry.php(91): Cake\Datasource\ConnectionRegistry->_throwMissingClassError('default', NULL)
    #1 /home/ubuntu/workspace/xxxxxx/vendor/cakephp/cakephp/src/Datasource/ConnectionManager.php(202): Cake\Core\ObjectRegistry->load('default', Array)
    #2 /home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/ORM/Locator/TableLocator.php(171): Cake\Datasource\ConnectionManager::get('default')
    #3 /home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/Datasource/ModelAwareTrait.php(114): Cake\ORM\Locator\TableLocator->get('Users')
    #4 /home/ubuntu/workspace/xxxxxx/src/Shell/ProcsShell.php(28): Cake\Console\Shell->loadModel('Users')
    #5 [internal function]: App\Shell\ProcsShell->main()
    #6 /home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/Console/Shell.php(456): call_user_func_array(Array, Array)
    #7 /home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php(217): Cake\Console\Shell->runCommand(Array, true, Array)
    #8 /home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php(181): Cake\Console\ShellDispatcher->_dispatch(Array)
    #9 /home/ubuntu/workspace/xxxxx/vendor/cakephp/cakephp/src/Console/ShellDispatcher.php(127): Cake\Console\ShellDispatcher->dispatch(Array)
    #10 /home/ubuntu/workspace/xxxxx/bin/cake.php(33): Cake\Console\ShellDispatcher::run(Array)
    #11 {main}

    キャンセル

  • 2016/10/05 06:33

    あれ? app.phpのDB設定ってurlを使ってませんでしたっけ??
    前の質問でそういう話になったような? 現状は、質問文のような設定間違いないですか?

    キャンセル

  • 2016/10/08 13:30

    コメント遅くなり、申し訳ございません。

    色々いじり、cakephpの設定が変わってしまっているのではないかと思い
    いちから入れ直しました。結果、同様のエラーでした^^;

    はい!前回のときは、
    環境変数に値が入っていたためurlを使用しておりました。
    今回は環境変数に値が入っていなかったためurlを使用しませんでした。

    ①class ProcsShell extends Shell
    {
    public function main()
    {
    ConnectionManager::config('default', [
    'url' =>'mysql:xxxx',
    ]);
    }
    }

    ②class ProcsShell extends Shell
    {
    ConnectionManager::config('default',
    [
    'username' => 'bxxxxx',
    'password' => 'xxxxx',
    'host' => 'xxxxx',
    'database' => 'xxxxxx',
    'scheme' => 'mysql',
    'driver' => 'Cake\Database\Driver\Mysql',
    'name' => 'default'
    ]
    );
    }

    と①と②プログラムを変え、実行致しました。
    エラーは相変わらず出てきます。

    Exception: Cannot reconfigure existing key "default" in [/home/ubuntu/workspace/myapp/vendor/cakephp/cakephp/src/Core/StaticConfigTrait.php, line 98]

    defaultが再設定できないとでます。

    エラーを追っていくと下記のディレクトリを参照しているようで
    *****を正しい値に変更すると動くようになりました。

    vendor/cakephp/src/Database/Connection.php

    ・初期の設定
    public function __debugInfo()
    {
    $secrets = [
    'password' => '*****',
    'username' => '*****',
    'host' => '*****',
    'database' => '*****',
    //'port' => '*****'
    ];



    ・変更後の設定
    public function __debugInfo()
    {
    $secrets = [
    'password' => '正しい値',
    'username' => '正しい値',
    'host' => '正しい値',
    'database' => '正しい値',
    //'port' => '*****'
    ];

    と変更すうるとコネクションが作成できました。
    まだちゃんと動きを理解出来ていないのですが、、、

    もう少しプログラムをおってみようと思います。

    ありがとうございました。

    キャンセル

teratailには29人のエキスパートがいます

今すぐはじめる

もっと詳しく

関連した質問

  • 解決済

    Cakephp3でcronを実行したい

    前提・実現したいこと CakePHP3でデータベースのバックアップシステムを作っています。   cronにて定期的にシステムを走らせてバックアップさせたいのですが、 cake

  • 解決済

    CakePHP3系のインストールに関して

    cakephpをcomposerを使ってインストールしました。 cakephp自体はローカル環境にインストールは出来て、cakephpのサーバーにアクセスするとデータベースに

  • 解決済

    cakephp3のDB接続について

    こんにちは。 エラーが消えずに困っています。 わかる方がいましたらご教授ください。 cakephp3でプロジェクトを作成しherokuにデブロイしました。

  • 解決済

    CakePHP3で CakeDC/Usersのカスタマイズ

    CakePHP3で CakeDC/Usersを利用しています。 ユーザ登録を行う際のバリデーションの内容を変更したいのですが、どうすればいいでしょうか? /vendor/c

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

  • PHP

    12496questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • CakePHP

    1691questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

閲覧数の多いPHPの質問