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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

Q&A

3回答

1455閲覧

protectedプロパティのアクセスの方法

pegy

総合スコア243

PHP

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

0グッド

0クリップ

投稿2021/06/18 04:47

sentinel phpという外部ライブラリを利用しており、以下のようなコードの結果、

php

1<?php 2ini_set('display_errors', 1); 3function prep($str){ 4 echo "<pre>"; 5 print_r($str); 6 echo "</pre>"; 7} 8function predump($str){ 9 echo "<pre>"; 10 var_dump($str); 11 echo "</pre>"; 12} 13// Import the necessary classes 14use Cartalyst\Sentinel\Native\Facades\Sentinel; 15use Illuminate\Database\Capsule\Manager as Capsule; 16// Include the composer autoload file 17require __DIR__.'/../vendor/autoload.php'; 18// Setup a new Eloquent Capsule instance 19$capsule = new Capsule; 20$capsule->addConnection([ 21 'driver' => 'mysql', 22 'host' => 'localhost', 23 'database' => 'sentinel', // データベース名を変更していたら合わせて変更 24 'username' => 'XXXX', // xxxxを、データベースのユーザー名に変更 25 'password' => 'XXXX', // xxxxxxを、データベースのパスワードに変更 26 'charset' => 'utf8', 27 'collation' => 'utf8_unicode_ci', 28]); 29$capsule->bootEloquent(); 30 31$credentials = [ 32 'email' => 'example@example.com', 33 'password' => 'password', 34]; 35var_dump(Sentinel::authenticate($credentials)); 36//

下記のようなオブジェクトが返ってきました。

object(Cartalyst\Sentinel\Users\EloquentUser)#34 (32) { ["table":protected]=> string(5) "users" ["fillable":protected]=> array(5) { [0]=> string(5) "email" [1]=> string(8) "password" [2]=> string(9) "last_name" [3]=> string(10) "first_name" [4]=> string(11) "permissions" } ["casts":protected]=> array(1) { ["permissions"]=> string(4) "json" } ["hidden":protected]=> array(1) { [0]=> string(8) "password" } ["persistableKey":protected]=> string(7) "user_id" ["persistableRelationship":protected]=> string(12) "persistences" ["loginNames":protected]=> array(1) { [0]=> string(5) "email" } ["connection":protected]=> string(7) "default" ["primaryKey":protected]=> string(2) "id" ["keyType":protected]=> string(3) "int" ["incrementing"]=> bool(true) ["with":protected]=> array(0) { } ["withCount":protected]=> array(0) { } ["preventsLazyLoading"]=> bool(false) ["perPage":protected]=> int(15) ["exists"]=> bool(true) ["wasRecentlyCreated"]=> bool(false) ["attributes":protected]=> array(9) { ["id"]=> int(6) ["email"]=> string(20) "example@example.com" ["password"]=> string(60) "XXXXXXX" ["permissions"]=> NULL ["last_login"]=> object(Carbon\Carbon)#23 (3) { ["date"]=> string(26) "2021-06-18 04:41:14.473640" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" } ["first_name"]=> NULL ["last_name"]=> NULL ["created_at"]=> string(19) "2021-06-17 06:50:57" ["updated_at"]=> string(19) "2021-06-18 04:41:14" } //以下省略

ライブラリのExample Responseにあるように

php

1{ 2 id: "1", 3 email: "john.doe@example.com", 4 permissions: { 5 admin: true 6 }, 7 last_login: { 8 date: "2014-02-17 03:44:31", 9 timezone_type: 3, 10 timezone: "UTC" 11 }, 12 first_name: "John", 13 last_name: "Doe", 14 created_at: "2014-02-17 02:43:01", 15 updated_at: "2014-02-17 02:43:37" 16}

の形式で返ってこないじゃないか・・・・という疑問符は残るのですが、ここで例えば実際に帰ってきたオブジェクトでデータにアクセスしたいのですが、方法がわかりません。。["table":protected]な形式は初めてみるのですが、Sentinel::authenticate($credentials)->tableやSentinel::authenticate($credentials)["table"]でもアクセスできずにNULLが返ってきます。
アクセス方法などについてご存知の方がいらっしゃればアドバイスを頂けると幸いです。

よろしくお願い申し上げます。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pegy

2021/06/18 05:17

コメントありがとうございます。まだ存じ上げないため、一度該当箇所を勉強してみます。
guest

回答3

0

Sentinelについてはあんまり知らないので文法的なところだけの回答になります。

ドキュメントには戻り値について

Returns: Cartalyst\Sentinel\Users\UserInterface or false.

とあり、
object(Cartalyst\Sentinel\Users\EloquentUser)#34 (32) {

帰ってきているオブジェクトのクラス名は分かっているので

sentinel/src/Users/EloquentUser.php

にあるpublicメソッド経由で情報にアクセスが可能です。

例えば

PHP

1 2$user = Sentinel::authenticate($credentials); 3var_dump($user->getLoginNames()); 4

みたいな感じ。

投稿2021/06/24 07:22

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どうしてもアクセスしたいのであればリフレクションクラスを使ってみてください。
ただし、禁じ手です。
モンキーパッチ当てるくらいしか使いみちが無いですが・・・

投稿2021/06/24 03:57

deo_deo

総合スコア198

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pegy

2021/06/24 06:51

コメント有難うございます。裏技はあるんですね。。ただ、ライブラリーが提供する形でレスポンスがないのでどうやって結果を取得するのか、、、困ったものです。。
deo_deo

2021/06/24 09:21

$user = Sentinel::authenticate($credentials); echo $user->toJson(); これでExample Responseに近いものが出力されるのではないでしょうか!?!?
guest

0

["table":protected]=> のように表示されるものは、アクセス権 が protected として指定されたプロパティのため、外部からはアクセスできません。

投稿2021/06/19 15:02

yh1224

総合スコア653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pegy

2021/06/24 06:50

有難うございます。理解を致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問