コントローラ内のすべてのビューのレイアウトを変更したい。私はINIT()を使用し、期待通りに働いていたYii2:特定のコントローラのレイアウトを設定する
Call to a member function getUniqueId() on null
コントローラ内のすべてのビューのレイアウトを変更したい。私はINIT()を使用し、期待通りに働いていたYii2:特定のコントローラのレイアウトを設定する
Call to a member function getUniqueId() on null
を試してみてください.... sitecontrollerで親コントローラにコンストラクタを作成することはできませんが、プロジェクトのレイアウトとしての主なレイアウトを使用し、それはですコントローラーには別のレイアウトを使用するか、レイアウト名を変更してそのコントローラーのレイアウトを使用してコントローラークラスのレイアウトプロパティを定義し、レイアウトの名前をそのプロパティの文字列値。
これにより、そのコントローラのレイアウトが、選択した名前の要求されたレイアウトに変更されます。ここで
は、あなたのケースでは、コードです:
class SiteController extends Controller
{
public $layout = '[Your Layout Name]';
.
.
.
}
はP.S:コンストラクタは、あなたのクラスのインスタンスを作成するたびに実行され、この場合には、それを使用することは論理的ではない方法です。
:だから私はこのように設定したい:
class SiteController extends Controller {
public function __construct(){
$this->layout = 'admin';
}
.....
をしかし、私は次のエラーを取得しています。私は自分のコードを次のように変更しました:
class SiteController extends Controller {
public function init() {
$this->layout = 'admin';
}
....
あなたのsitecontrollerは親コントローラにも及んでいます。だから、
は、デフォルトのyii2ではサイトコントローラに
public function init(){
}
を使用して
init()に入れる必要はありません... Sobhan Bagheriのようにクラスメンバーとして入れるだけで十分です。この方法でコードが短くなり、不要な操作をしない –