0

私はYiiフレームワークを使用してソーシャルネットワーキングウェブサイトのようなFacebookを開発しています。ログインしたユーザーは、検索中またはその他の方法で取得したすべてのユーザーのプロファイルを表示できます。Facebookでは次のようになります

facebook.com/marthajoseph/photos

ここで、ユーザーは「marthajoseph」のプロファイルを表示しています。yiiで達成したいのと同じこと。現在、私はこのようなことをしました

myapplication.com/index.php?r=u/default/index?uid=110

ここで「u」はユーザー向けのモデルです。ここでは、ユーザーIDが「110」のユーザーのプロファイルを表示しています。問題は、ユーザーの写真、プロフィール、投稿などを切り替えるたびに、このuidクエリ文字列にURLを追加する必要があるため、不安定になることです。

どうすればFacebookのようなものを実現できますか?

4

1 に答える 1

1

上記のernieが述べたように、YiiURLManagement使用してURLを完全に書き直すことをお勧めします

まず、URLにパス形式を使用します。これは、最初にprotected / config / main.phpurlManagerの行のコメントを解除することによって行われます(デフォルトでは34行目あたり)。これにより、たとえば、次のようなURLの代わりに、「きれいなURL」を使用できるようになります。

www.example.com/index.php?r=user/profile?uid=110

あなたはそれを次のようにすることができます:

www.example.com/user/110

したがって、たとえば、構造を持つURLをprofile/<a users id>ユーザーコントローラーのビューアクション(actionView)にルーティングする場合は、次のようにすることができます。

'urlManager'=>array(
    'urlFormat' => 'path',
    'showScriptName' => false,
    'rules' => array(
        'user/profile/<id:.+>' => 'user/view',
        ...

したがって、配列の左側には「URLがどのように表示されるか」が表示され、右側には「それが指している場所」が表示されます。id次に、を使用して、ビューまたはコントローラーの値にアクセスできます。次に$_GET例を示します。

echo "You are viewing user id ".$_GET['id'];

この値を使用して、写真やプロフィールコンテンツ、またはそのユーザーに関連付けられているものをクエリできます。URLにユーザー名を含めるという点では(Facebookの方法、例:) facebook.com/myusername、ユーザーがバニティURLを行のどこかに入力し、それをデータベースに保存できるようにする可能性があります。次に、ルールを次のように変更できます。

'user/profile/<user_vanity_url:.+>' => 'user/view',

次に、を使用して上記と同じようにその値にアクセスします$_GET。このルートを使用する場合のアドバイスの1つは、ユーザーが表示を許可されていないコンテンツを表示できないようにする必要があることです。たとえば、友達ではない人の写真を表示する場合などです。これらの関係を格納するある種のテーブルがあると思いますか?

URLを介して渡すIDまたは値を追加する必要がある場合は、ビューまたはHTMLが作成されている場所に追加するだけで済みます。たとえば、ユーザーの写真へのリンクを表示する場合は、プロフィールページあなたは次のようなことをすることができます:

<a href="<?php echo Yii::app()->request->baseUrl; ?>/photos/<?php echo $_GET['id']; ?>"></a>

urlManagerのURLルールに関するもう1つの点は、ルールが上から下に解釈され、最初に一致したルールが使用されることです。

うまくいけば、これは正しい道にあなたを助けるでしょう。それでも行き詰まっている場合は、次の投稿を確認してください。

于 2013-02-11T23:54:24.213 に答える