1

ユーザーが認証されていないときはいつでもログインフォームを表示するように「views/layouts/main.php」を変更したい。

そこで、「siteController」actionIndex を次のように変更しました。

public function actionIndex() {

$loginForm = new LoginForm();
    $this->render('index', array('loginForm'=>$loginForm)); 
}

そして、「views/layouts/main.php」で次のように呼び出します。

if(Yii::app()->user->isGuest):
    echo $loginForm;
else :
    echo 'JJJ';
endif;

次に、自分の Web サイトにアクセスすると、「未定義の変数: loginForm」というエラーが表示されます。

これを修正する方法がわかりませんか?:(

4

3 に答える 3

0

ここにはいくつかの問題があります。まず、というオブジェクトを作成し、$loginFormそれに値を割り当てます。new LoginForm();

$loginForm = new LoginForm();

これを意図的に行っているLoginForm()のか、何かを返す関数なのかメソッドなのかはわかりませんが、意図していたように感じます。

$loginForm = new LoginForm;

これにより、クラスLoginForm(デフォルトのYii webapp CFormModelクラス)の新しいインスタンスが作成されます。その場合でも、これを行うためのより良い方法があります。

最も簡単な方法は、 index.phpビュー内renderPartialの既存のlogin.phpビュー(protected / views / site / login.phpにあります)を次のように呼び出すことです。

if(Yii::app()->user->isGuest) {
    $this->renderPartial("loginform",array("model"=>new LoginForm));
} else {
    echo 'JJJ';
}

これにより、ビューlogin.phpがレンダリングされ(レイアウトは既にレンダリングされているため、レイアウトはレンダリングされません。ここにドキュメントrenderあります)、と呼ばれる変数に割り当てられrenderPartialたモデルの新しいインスタンスを渡します。LoginForm$model

多くの場合、login.phpビューの外観を編集して「適合」させる必要がありますが、このビューはSiteControlleractionLoginでも使用されていることに注意してください。

あとは、フォームの送信を処理するようにactionIndexを変更するだけです(既存のSiteController actionLogin機能をコピーするだけです) 。

もう1つの優れた解決策は、アプリケーション全体で使用できるログインフォームのウィジェットを作成することです。これについては説明しませんが、ここでSOで確認するか、このチュートリアルまたはこのチュートリアルを確認してください。

于 2013-01-28T14:16:22.230 に答える
0

これは、メイン テンプレートの前に index テンプレートが読み込まれるためです。したがって、より良い方法は、コントローラーでパブリック プロパティを定義することです。このプロパティは Controller クラスで定義することをお勧めします。これは、SiteController と *Controller が拡張するためです。

次に、これを実行できます。

if(Yii::app()->user->isGuest) {
    echo $this->loginForm;
} else {
    echo 'JJJ';
}

この作業では MVC パターンに出てしまうので注意してください。この作業方法では、各アクションで LoginForm を定義する必要があります。そうすることをお勧めします:

レンダリング ファイルへの呼び出しをクリーンなままにします。

public function actionIndex() {
    $this->render('index'); 
}

そして、取得する Controller クラスに getLoginForm メソッドを追加します。

if(Yii::app()->user->isGuest) {
    echo $this->getLoginForm();
} else {
    echo 'JJJ';
}
于 2013-01-25T12:17:18.653 に答える
0

コントローラー クラスで新しいプロパティを定義します。

public $loginForm;

あなたのmain.phpアクセスでは、次のようになります。

echo $this->loginForm;

メソッドで変数を渡すとrender、ビュー ファイル内でのみ使用できますが、レイアウト ファイルでは使用できません。

于 2013-01-25T12:03:15.370 に答える