构造函数中的CodeIgniter变量

时间:2013-04-05 07:54:31

标签: php arrays codeigniter constructor


我查看了周围的主题,但我没有看到我的情况 所以,我有控制器填充了方法,以及一个加载我在这个特定控制器中常用的模型的构造。 一切正常。 我需要在构造函数中设置一个数组,如

$data["content"]["something"] = "bla bla";

多数民众赞成。所以我将$ data [" content"]传递给了视图加载器,我希望能够访问

$something

,但没有。它将它作为未定义的变量,但为什么呢?当我把它放在特定的方法中时,一切正常,但是当它在构造函数中时它表示未定义。 有任何想法吗? 谢谢! :)

4 个答案:

答案 0 :(得分:0)

您无法在View中访问构造函数变量。您需要将它传递给控制器​​的方法并将其传递给视图。例如,

在构造函数中:

$data["content"]["something"] = "bla bla";

在Controller的方法中:

$data['something'] = $this->$data["content"]["something"];

现在,您可以通过$data查看和访问echo $something;

答案 1 :(得分:0)

好像你没有理解这个问题的变量范围。而不是创建局部变量$ data尝试使用$ this->数据,这些数据将可用于整个对象(控制器)

function __construct() {
    ...
    $this->data['content'] = array('test' => 'test');
    ...
}

您也可以使用变量$ this->数据将其传递给视图,并在执行期间随时添加/修改它。

$this->load->view('path/to/view', $this->data);

答案 2 :(得分:0)

   echo $content["something"];

在视图中像这样检索它

    public class CallingActivity extends AppCompatActivity {
  Button registeraccount;
    Bundle extras;
    String opponentid;
    public static final String sipdomen= "sip2sip.info";
    String myid;
    Button call;
    SipManager  mSipManager;
    SipProfile myprofile;
    SipProfile opponentprofile;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calling);
        call = (Button)findViewById(R.id.button5);
        registeraccount = (Button)findViewById(R.id.button4);
        extras = getIntent().getExtras();
        if(extras!=null){
            opponentid = extras.getString("opponentid");
            myid = extras.getString("myid");
        }
        registeraccount.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSipManager = SipManager.newInstance(CallingActivity.this);
                SipProfile.Builder builder = null;
                try {
                    builder = new SipProfile.Builder(myid, sipdomen);
                    builder.setPassword("000000");
                    myprofile = builder.build();
                    Intent intent = new Intent();
                    intent.setAction("android.SipDemo.INCOMING_CALL");
                    PendingIntent pendingIntent = PendingIntent.getBroadcast(CallingActivity.this, 0, intent, Intent.FILL_IN_DATA);
                    mSipManager.open(myprofile, pendingIntent, null);
                    try {
                        mSipManager.setRegistrationListener(myprofile.getUriString(), new SipRegistrationListener() {
                            @Override
                            public void onRegistering(String localProfileUri) {
                                Log.d("safhaskjfa","registering");
                            }

                            @Override
                            public void onRegistrationDone(String localProfileUri, long expiryTime) {
                                Log.d("safhaskjfa","Registration succesfull"+localProfileUri+"");
                            }

                            @Override
                            public void onRegistrationFailed(String localProfileUri, int errorCode, String errorMessage) {
                                Log.d("safhaskjfa","failed to register"+localProfileUri+"the error code is"+errorCode+"the error message is"+errorMessage);
                            }
                        });
                    } catch (SipException e) {
                        e.printStackTrace();
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                } catch (SipException e) {
                    e.printStackTrace();
                }

            }
        });
        call.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    mSipManager.makeAudioCall(myprofile,opponentprofile, new SipAudioCall.Listener(),100000);
                } catch (SipException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

答案 3 :(得分:-1)

你必须这样做:

$data["content"] = "bla bla";
$data["something"] = "bla bla";

$this->load->view('path/to/view', $data);

通过这种方式,您可以在视图中获得所有数据字符串。

<?php echo $something; ?>

<?php echo $content; ?>

在一个$ data字符串中传递2个变量不是一个好主意。