Сформируйте вспомогательную строку Concat преобразование нуля, чтобы не записаться в CakePhp -- php поле с участием cakephp поле с участием cakephp-1.2 пол Связанный проблема

form helper string concat converting zero to unset in cakephp


0
vote

проблема

русский

Это заведет меня. Я пытаюсь создать массив полей в CakePhp 1.2.5 & AMP; PHP 5.3.2 Массив на основе нуля. На первой итерации $ COUS == 0. По какой-то причине конкатенация строки, похоже, преобразует это на NULL или UNEST, какой пирог затем интерпретирует как «Имя модели вставки здесь», Viz:

 <код> for($count=0;$count<$num;$count++) {    echo $form->input($count.'.NodeDescriptor.title'); }  <input name="data[NodeDescriptor][NodeDescriptor][title]" type="text" id="NodeDescriptorNodeDescriptorTitle" /> <input name="data[1][NodeDescriptor][title]" type="text" id="1NodeDescriptorTitle" /></div><tr><td><div class="input select"> ...   

Я попробовал кастирование ценности, Strvalinging, одиночные кавычки, двойные кавычки, двойные кавычки и {} безрезультатно. Это функция PHP, необращенность CakePhP или я тупой?

Английский оригинал

This has me beat. I'm trying to create an array of fields in cakePHP 1.2.5 & PHP 5.3.2 The array is zero based. On the first iteration, $count == 0. For some reason the string concatenation seems to convert this to null or unset which cake then interprets as "insert model name here", viz:

for($count=0;$count<$num;$count++) {    echo $form->input($count.'.NodeDescriptor.title'); }  <input name="data[NodeDescriptor][NodeDescriptor][title]" type="text" id="NodeDescriptorNodeDescriptorTitle" /> <input name="data[1][NodeDescriptor][title]" type="text" id="1NodeDescriptorTitle" /></div><tr><td><div class="input select"> ... 

I've tried casting the value, strval'ing it, single quotes, double quotes, double quotes and {} to no avail. Is this a PHP feature, a CakePHP unrobustness or me being dumb?

</div
        

Список ответов

1
 
vote
vote
Лучший ответ
 

Я пересматривал массив в 1, и он работает нормально и как и ожидалось.

 

I rebased the array at 1 and it works fine and as expected.

</div
 
 
   
   
1
 
vote

Во-первых, это соглашение о том, что если вы сохраняете поля сопоставленные на одну и ту же модель, и хотите, чтобы несколько вставок БД вставляют, что массив данных должен быть отформатирован как Mike, выраженный выше:

I.e. Модель. {N} .field

Вы можете четко видеть, что они явно говорят, что, когда вы сохраняете одно и то же поле в той же модели, несколько раз, что это - это Конвенция как название руководства Раздел - это название «Конвенции по именованию полей»

http: //book.cakephp .ORG / VIEW / 1390 / ATOMAGIC-FORM-ELECTIONS # Полеваивая конвенция-1391

Вы не можете на самом деле не вызововить входную проблему CakePhp ошибка, если метод ввода не был написан, чтобы приспособиться к использованию метода в непреднамеренном моде. Метод явно разбивает пропущенную строку на "." характер и предполагает, что если вы используете строку с помощью «». Персонаж, который вы намереваетесь отформатировать свой массив данных для сохранения с использованием либо Model- & GT; Save или Model- & GT; SavealL

Во-вторых, когда я проверю свой код в моем завершении, он делает выставку Begit Bug - она ​​использует числовые индексы, которые я ожидаю, но дублирует их ..

I.e. [0] [0] [дескриптор] [title], 1 [дескриптор] [Название]

Когда я перемещаю индекс туда, где функции сохранения * ожидают, что такое разбор идеально.

I.e. [Дескриптор] [0] [Title], Дескриптор [Название]

Так, если вы хотите использовать помощники, вы должны использовать их таким образом, как они предназначены для работы. Это не ошибка, если вы изобретете свой собственный край, который не был предназначен для поддержки помощника для начала.

Судя по своему примеру - нет причин не использовать Saveall в любом случае. У вас есть причина, чтобы избежать этого; Кажется, это правильный способ сделать то, что вы спрашиваете.

** отредактировал, чтобы исправить билет http://cakephp.lighthouseapp.com/projects / 42648 / билеты / 867 **

Приложение Это как приложение / Views / app_view.php

 <код> <?php  App::import('View', 'View', false);  class AppView extends View {      /**      * Constructor      *      * @param object $controller      */     function __construct(&$controller){             parent::__construct($controller);     }      /**      * Temporary View::entity fix for 1.2.5      * Returns the entity reference of the current context as an array of identity parts      *      * @return array An array containing the identity elements of an entity      * @access public      */     function entity() {         $assoc = ($this->association) ? $this->association : $this->model;         if (!empty($this->entityPath)) {             $path = explode('.', $this->entityPath);             $count = count($path);             if (                 ($count == 1 && !empty($this->association)) ||                 ($count == 1 && $this->model != $this->entityPath) ||                 ($count == 2 && !empty($this->fieldSuffix)) ||                 is_numeric($path[0]) && !empty($assoc)             ) {                 array_unshift($path, $assoc);             }             return Set::filter($path);         }         return array_values(Set::filter(             array($assoc, $this->modelId, $this->field, $this->fieldSuffix)         ));     } } ?>   

Расскажите своему контроллеру, чтобы использовать представление с публичным свойством Public $ Peaction.

 <код> <?php     class FooController extends Controller {         ...         ...         var $view = 'App';         ...         ...     } ?>   
 

First, it is a convention that if you are saving fields mapped to the same model and want multiple db inserts that the data array should be formatted as Mike expressed above:

i.e. Model.{n}.field

You can clearly see that they explicitly say that when you are saving the same fieldname in the same model multiple times that this is the convention as the title of the manual section is name "Field Naming Conventions"

http://book.cakephp.org/view/1390/Automagic-Form-Elements#Field-naming-convention-1391

You can't really call the input problem a CakePHP bug if the input method wasn't written to accommodate you using the method in an unintended fashion. The method explicitly splits the passed string on the "." character and assumes that if you are using a string with the "." character that you are intending to format your data array for saving using either Model->save or Model->saveAll

Secondly, when I test your code at my end it does exhibit a legit bug - it uses the numeric indexes I expect but duplicates them..

i.e. [0][0][Descriptor][title], 1[Descriptor][title]

When I move the index to where the save* functions expect it to be, the parsing is perfect.

i.e. [Descriptor][0][title], Descriptor[title]

So, if you want to use the helpers you should be using them in the ways they are intended to work. It isn't a bug if you invent your own edge case that wasn't intended to be supported by the helper to begin with.

Judging from your example - there is no reason not to use saveAll anyways. Do you have some reason for avoiding it; It seems to be the right way to do what you are asking.

** EDITED TO FIX TICKET http://cakephp.lighthouseapp.com/projects/42648/tickets/867 **

App this as app/views/app_view.php

<?php  App::import('View', 'View', false);  class AppView extends View {      /**      * Constructor      *      * @param object $controller      */     function __construct(&$controller){             parent::__construct($controller);     }      /**      * Temporary View::entity fix for 1.2.5      * Returns the entity reference of the current context as an array of identity parts      *      * @return array An array containing the identity elements of an entity      * @access public      */     function entity() {         $assoc = ($this->association) ? $this->association : $this->model;         if (!empty($this->entityPath)) {             $path = explode('.', $this->entityPath);             $count = count($path);             if (                 ($count == 1 && !empty($this->association)) ||                 ($count == 1 && $this->model != $this->entityPath) ||                 ($count == 2 && !empty($this->fieldSuffix)) ||                 is_numeric($path[0]) && !empty($assoc)             ) {                 array_unshift($path, $assoc);             }             return Set::filter($path);         }         return array_values(Set::filter(             array($assoc, $this->modelId, $this->field, $this->fieldSuffix)         ));     } } ?> 

Tell your controller to use the view with it's public $view property.

<?php     class FooController extends Controller {         ...         ...         var $view = 'App';         ...         ...     } ?> 
</div
 
 
         
         
0
 
vote

Можете ли вы придерживаться конвенций CakePhP и сначала поместите название модели, а затем индекс?

 <код> echo $form->input('NodeDescriptor.'.$count.'.title');   
 

Can you stick to CakePHP conventions and put the model name first, followed by the index?

echo $form->input('NodeDescriptor.'.$count.'.title'); 
</div
 
 
   
   

Связанный проблема

0  Файл не загружается в Интернете (офлайн / локальные работы)  ( File not being uploaded online offline local works ) 
Чехол: Загрузка аватаров. Это работает в автономном режиме на моем localhost, но после того, как поместил его онлайн в 000webhost Provider, это больше не рабо...

8  Есть ли лучший способ написания GIT Pre-Commit Compart Coint, чтобы проверить любой файл PHP в фиксации для ошибок разбора?  ( Is there a better way of writing a git pre commit hook to check any php file in ) 
Что я имею до сих пор, это <код> #!/bin/sh php_syntax_check() { retval=0 for i in $(git-diff-index --name-only --cached HEAD -- | grep -e '.php$');...

0  Ошибка при попытке выполнить Phpunit Test в Symfony 2.8  ( Error when trying to execute phpunit test in symfony 2 8 ) 
Я пытаюсь выполнить простой тест с phpunit на приложении Symfony 2.8. Это тест: <код> public function testCreateContact(){ $client= static::createCl...

1  PHP: профилированный код и строгая среда ~ улучшение моего кодирования  ( Php profiling code and strict environment improving my coding ) 
Я хотел бы обновить свою локальную рабочую среду, чтобы быть более строгим, чтобы улучшить мой код. Я знаю, что мой код в порядке, но как с большинством вещей...

0  Вставить арабский с помощью PDO не работает  ( Insert arabic using pdo is not working ) 
Я очень глубоко укорую в этом и посмотрите много вопросов, и это не работает Каждый раз, когда я пытаюсь вставить арабский, он показывает так (?????) <Сильн...

7  PHP Дополнительные параметры - Укажите значение параметра по имени?  ( Php optional parameters specify parameter value by name ) 
Я знаю, что можно использовать дополнительные аргументы следующим образом: <код> function doSomething($do, $something = "something") { } doSomething("do")...

31  Включение поддержки PostgreSQL в PHP на Mac OS X  ( Enabling postgresql support in php on mac os x ) 
У меня ужасно трудно получить команду «pg_connect ()», чтобы правильно работать на моем Mac. В настоящее время я пишу PHP-скрипт (для выполнения от консоли), ...

0  Обратный вызов для GridView Yii2 CheckboxColumn  ( Callback for yii2s gridview checkboxcolumn ) 
У меня есть <код> GridView (yii2) и один из столбцов - это логический тип данных. Я хочу быть в состоянии переключить это значение и сохранить его в моей баз...

-1  PHP возвращает неправильную строку в MySQLI подготовленной статусы  ( Php returning wrong row in mysqli prepared statment ) 
Я пытаюсь создать тщеславие URL для моего сайта, и на данный момент есть только одно имя пользователя в базе данных, которые можно ссылаться. Мой запрос верне...

1  Yii с расширением загрузки, псевдоним «Bootstrap.widgets.tbnavbar» недействителен. Убедитесь, что он указывает на существующий файл PHP  ( Yii with bootstrap extension alias bootstrap widgets tbnavbar is invalid make ) 
Я пытаюсь использовать Расширение Bootstrap с Yii, но я продолжаю получать Ошибка, упомянутая в заголовке, я дважды проверил мой файл конфигурации, но я не ...

3  Laravel Collique HTML5 атрибуты  ( Laravel collective html5 attributes ) 
Как пройти в атрибутах HTML5, как: обязательно, Auto Focus ...? Я могу ввести другие атрибуты, которые имеют имя = «значение», но не атрибут, состоящий толь...

0  Почему мой счет на массиве хранится в переменной сессии удваивает?  ( Why does my array count stored in a session variable doubles ) 
У меня есть таблица, которая содержит следующие столбцы .. И я сохранил данные этой таблицы в переменную сеанса <код> $sql = "SELECT * from `basic_info...

1  add_menu_page не добавляет никаких страниц в WordPress  ( Add menu page doesnt add any pages in wordpress ) 
Я не могу понять, почему мой код не работает. Я разрабатываю плагин в WordPress, и я хочу иметь страницу на панели администратора. Я попробовал этот код, поло...

1  ajax () не отвечает после события keyup  ( Ajax not responding after keyup event ) 
Это проблема jQuery / ajax. JQuery / ajax отвечает на событие keyup с оповещением (LOC), показывающим результат значения, введенного в текстовое поле числа. ...

1  Разбор XML-документа с PHP с использованием петли «Foreach»  ( Parsing xml document with php using foreach loop ) 
Я новичок в php, mysql и xml ... и пытался обернуть голову вокруг классов, объектов, массивов и петель. Я работаю над анализатором, который извлекает данные и...

Связанный проблема

0  Файл не загружается в Интернете (офлайн / локальные работы) 
8  Есть ли лучший способ написания GIT Pre-Commit Compart Coint, чтобы проверить любой файл PHP в фиксации для ошибок разбора? 
0  Ошибка при попытке выполнить Phpunit Test в Symfony 2.8 
1  PHP: профилированный код и строгая среда ~ улучшение моего кодирования 
0  Вставить арабский с помощью PDO не работает 
7  PHP Дополнительные параметры - Укажите значение параметра по имени? 
31  Включение поддержки PostgreSQL в PHP на Mac OS X 
0  Обратный вызов для GridView Yii2 CheckboxColumn 
-1  PHP возвращает неправильную строку в MySQLI подготовленной статусы 
1  Yii с расширением загрузки, псевдоним «Bootstrap.widgets.tbnavbar» недействителен. Убедитесь, что он указывает на существующий файл PHP 
3  Laravel Collique HTML5 атрибуты 
0  Почему мой счет на массиве хранится в переменной сессии удваивает? 
1  add_menu_page не добавляет никаких страниц в WordPress 
1  ajax () не отвечает после события keyup 
1  Разбор XML-документа с PHP с использованием петли «Foreach»