Я пытаюсь начать с сессии, но до сих пор (да, я краю документы), я абсолютно не знаю, как начать.
возможно, кто-то может дать мне простой пример. Например, если флажок установлен или нет.
заранее спасибо
Сеансы SilverStripe довольно прямолинейны. Session
класса – это просто хорошая оболочка вокруг php $_SESSION
Session::set('MyCheckboxValue', 'Hello World');
для получения этого:
$value = Session::get('MyCheckboxValue'); // note this will always return something, even if 'MyCheckboxValue' has never been set. // so you should check that there is a value if ($value) { ... }
там также есть некоторая логика для работы с массивами:
Session::set('MyArray', array('Bar' => 'Foo', 'Foo' => 'yay')); // this will add the string 'something' to the end of the array Session::add_to_array('MyArray', 'something'); // this will set the value of 'Foo' in the array to the string blub // the . syntax is used here to indicate the nesting. Session::set('MyArray.Foo', 'blub'); Session::set('MyArray.AnotherFoo', 'blub2'); // now, lets take a look at whats inside: print_r(Session::get('MyArray')); // Array // ( // [Bar] => Foo // [Foo] => blub // [0] => something // [AnotherFoo] => blub2 // )
вам следует также знать, что Session :: set () не сохраняет сразу $ _SESSION. Это делается в конце обработки запроса. Также Session :: get () не имеет прямого доступа к $ _SESSION, он использует кешированный массив. Таким образом, следующий код не сработает:
Session::set('Foo', 'Bar'); echo $_SESSION['Foo']; // this will ERROR because $_SESSION['Foo'] is not set. echo Session::get('Foo'); // this will WORK
это также означает, что если вы используете die () или exit (), сеанс не будет сохранен.
Session::set('Foo', 'Bar'); die(); // because we die here, this means SilverStripe never gets a clean exit, so it will NEVER save the Session
,
Session::set('Foo', 'Bar'); Session::save(); die(); // this will work because we saved
Session::set('checked', true); $isChecked = Session::get('checked');
Это должно заставить вас начать.