Ionic - 将用户详细信息传递到个人资料页面

时间:2018-04-11 13:40:48

标签: php angular ionic-framework

您好我想在点击链接后传递用户详细信息(名字,姓氏,传记,电话等)。我用NavParams这样做了。

home.html的

<p (click)="UserPage(item.uid_fk, item.username)" [innerHTML]="item.username | linky"></p>

home.ts

UserPage(uid_fk,username) {
    this.navCtrl.push(UserPage, { uid_fk: uid_fk, username:username });
}

userProfile.ts

constructor(
    public common: Common,
    public navCtrl: NavController,
    public app: App,
    public menuCtrl: MenuController,
    public navParams: NavParams,
    public authService: AuthService
) {
    this.uid_fk = navParams.get('uid_fk');
    this.username = navParams.get('username');
    this.userProfile();
}

userProfile.html

<ion-content padding>
<p >{{uid_fk}}</p>
<p>{{username}}</p>
</ion-content>

它工作正常。但我想知道我是否可以使用像这样的PHP函数调用用户详细信息。

PHP功能

function userDetails() {
$request = \Slim\Slim::getInstance()->request();
$data = json_decode($request->getBody());
$uid=$data->uid;

$sql = "SELECT uid,tour,username,name,emailNotifications,bio,email,friend_count,profile_pic,conversation_count,updates_count,profile_bg,group_count,profile_pic_status,profile_bg_position,verified,notification_created,photos_count,facebookProfile,twitterProfile,googleProfile,instagramProfile,gender,emailNotifications FROM users WHERE uid=:uid AND status='1'";
try {
    $db = getDB();
    if($uid>0)
    {   
    $stmt = $db->prepare($sql);
    $stmt->bindParam("uid", $uid, PDO::PARAM_INT);
    $stmt->execute();
    $userDetails = $stmt->fetchAll(PDO::FETCH_OBJ);

    $db = null;
    echo '{"userDetails": ' . json_encode($userDetails) . '}';
    }
} catch(PDOException $e) {
    echo '{"error":{"text40":'. $e->getMessage() .'}}'; 
}
}

我想在userProfile.ts

上使用此函数调用此函数
userProfile() {
    this.common.presentLoading();
    this.authService.postData(this.userPostData, "userDetails").then(

        result => {
            this.resposeData = result;
            if (this.resposeData.userDetails) {
                this.common.closeLoading();
                this.dataSet = this.resposeData.userDetails;
                console.log(this.dataSet);

            } else {
                console.log("No access");
            }
        },
        err => {
            //Connection failed message
        }
    );
}

但我不知道如何将user_id(uid)传递给PHP函数我知道this.authService.postData( this.userPostData ,&#34; userDetails&#34 )。它是错的,但我如何将uid_fk作为uid传递?

$request = \Slim\Slim::getInstance()->request();
$data = json_decode($request->getBody());
$uid=$data->uid;

1 个答案:

答案 0 :(得分:0)

您似乎不知道如何制作php slim框架响应。您的代码不适合我在文档中看到的任何内容。如果请求到达函数,则应使用slim中提供的简单响应对象。

$userDetails = $stmt->fetchAll(PDO::FETCH_ASSOC); //better use array

return $response->withJson($userDetails);//will return app/json with utf-8 encoding

您必须在路由定义中包含ResponseInterface $ response。但是您的代码没有$app->post(...,或者您只显示其中的一部分。

问题的另一部分,如何从角度获取请求:

$parsedBody = $request->getParsedBody();

同样,如果你用你想要的路线定义$app->post...,答案就会自行解决。

答案的第二部分 - 如何获得uuid?

您可以使用https://github.com/chadicus/slim-oauth2程序包进行无状态登录并获取用于安全登录的令牌。

从前端部分使用路线上的警卫。 F.E. https://medium.com/@ryanchenkie_40935/angular-authentication-using-route-guards-bf7a4ca13ae3会解释很多。

当您实施这两项时,您的身份验证将从两个端完成。