#php #oop #yii
#php #ооп #yii
Вопрос:
В контроллере (который является классом с именем MessageController) есть этот код, который отображает файл «view» с именем HelloWorld, а также задает массив, где переменная $theTime связана с ключом ‘time’.
$theTime = date("D M j G:i:s T Y");
$this->render('helloWorld',array('time'=>$theTime));
В файле view HelloWorld ключ ‘time’ от контроллера отображается здесь через переменную $time
<h3><?php echo $time; ?></h3>
это работает отлично. Однако в книге также предлагается попробовать другой способ. В нем говорится
Измените предыдущий пример, определив свойство открытого класса в MessageController, а не локальную переменную, значением которой являются текущие дата и время. Затем отобразите время в файле просмотра, обратившись к этому свойству класса через $this.
Я не смог понять, как это сделать. Кто-нибудь знает, как
Ответ №1:
class MessageController {
public $time;
public function beforeAction($action) {
$this->time = date("D M j G:i:s T Y");
return true;
}
public function someAction() {
$this->render('helloWorld');
в представлении:
echo $this->time;
Комментарии:
1. Я не думал, что у вас может быть выражение, вычисляющее подобную переменную, но я попытался, как вы предложили, и я получил эту ошибку Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный ‘(‘, ожидающий ‘,’или ‘;’ в /Applications/MAMP/htdocs/demo/protected/controllers/MessageController.php в строке 6
2. Я напутал там с кодом и сейчас редактирую.
Yii
Долгое время не вводил код. Я думаю, вам лучше поместить$this->time = date("D M j G:i:s T Y");
вbeforeAction($action)
метод.3. @Nemoden это (то, как вы опубликовали это первым) не зависит от Yii, вы не можете присвоить свойству значение по умолчанию, если оно не является скалярным. Смотрите больше о свойствах в PHP 5 . Но теперь все в порядке, если
beforeAction()
выполняется.4. @Tadeck, как я уже сказал: я напутал с кодом. Я это знаю 😉 Я просто сейчас часто переключаюсь с
Python
наPHP
и обратно, так что этоPythonical
особенность, вставленная в мойPHP
код. И я не имел в виду, что этоYii
особенность.5. @Nemoden Хорошо, я понял. Я нахожусь в аналогичной ситуации (переключение Py и PHP) 😉
Ответ №2:
// I defined $MyClassTime as a public class variable in "MessageController.php"
//as follows:
class MessageController extends Controller
{
public $MyClassTime;
public function actionHelloWorld()
{
$this->MyClassTime = "From Public Class Property: " . date("D M j G:i:s T Y");
$this->render('helloWorld');
}
public function actionIndex()
{
$this->render('index');
}
// And then did this in "helloWorld.com":
<?php
$this->breadcrumbs=array(
'Message'=>array('message/index'),
'HelloWorld',
);?>
<h1>Hello, World!!</h1>
<h3><?php echo $this->MyClassTime; ?></h3>
Ответ №3:
В controllers/MessageController.php файл
class MessageController extends Controller
{
public $theTime;
public function init()
{
$this->theTime = date("D M j G:i:s T Y");
}
public function actionHelloWorld()
{
$this->render('helloWorld',array('time'=>$this->theTime));
}
}
В views/message/helloWorld.php
<h3><?php echo $time; ?></h3><hr/>
Ответ №4:
Хорошо, инструкция в книге конкретно гласит: «Измените предыдущий пример, определив свойство открытого класса в MessageController … … затем отобразите время в файле просмотра, обратившись к этому свойству класса через $this.
При этом это то, что я придумал:
В MessageController.php:
class MessageController extends Controller
{
public $defaultAction = 'hello';
public $theTime; // as per book's instructions
public function actionHello()
{
$this->theTime = date("D M j G:i:s T Y");
$this->render('hello');
}
В protected/views/message/hello.php:
<h1>Hello, World!</h1>
<h3>
<?php echo $this->theTime; ?>
</h3>
У меня это работает, и я понимаю, что происходит в коде. Будучи новичком, это важно: знать, что вы делаете, и реализовывать это.