Кнопка YII для создания записи в БД - PullRequest
0 голосов
/ 06 ноября 2011

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

Я просто не уверен, что мне нужно сделать здесь, чтобы это произошло.Могу ли я назначить метод для выполнения кнопкой?Или просто есть значения в моем контроллере?Ниже приведено что-то вроде того, что я хочу выполнить, но через кнопку.

public function addInterest($interest)
    {
        $interest->UserId=Yii::app()->user->id;
        $interest->ItemId=$this->ItemId;
        return $interest->save();
    }

** Дополнительные подробности в ответ на Jaison Justus

В этой реализации я используюконтроллер и вид из модели A (ItemId), где должна отображаться кнопка.Тогда есть Модель B (UserId).Взяв информацию из моделей A (ItemId) и Model B (UserId), я хочу заполнить Model C ($ интереса) этими ItemId и UserId при нажатии кнопки.Похоже, CJuiButton может предоставить средство для его создания, так как тогда я могу отключить / скрыть кнопку после выбора один раз.Я просто не знаком с использованием кнопок, отличных от формы, где пользовательский ввод собирается в виде ссылок или для предоставления всплывающих сообщений.

Код выше в настоящее время находится в модели модели А.С кодом ниже в контроллере модели A все работает, чтобы заполнить модель C, если я использую форму и собираю информацию.Так как я не требую никакого ввода, кроме выбора кнопки от пользователя, форме нечего в нее вставить, и поэтому я знаю, что не могу использовать if(isset($_POST['Interest'])), как у меня ниже.

public function actionView($id) {
        $items=$this->loadModel($id);
        $interest=$this->newInterest($items);

        $this->render('view', array(
            'model' => $items,
            'interest' => $interest,
        ));
    }

protected function newInterest($items)
    {
        $interest=new Interest;
        if(isset($_POST['Interest']))
        {
            $interest->attributes=$_POST['interest'];
            if($items->addInterest($interest))
                $this->refresh();
        }
        return $interest;
    }

В ответ на VarioN

Вот попытка использования ajax.Однако это не работает и выдает ошибку 500 при запуске.Подходит ли действие моего контроллера для того, что я пытаюсь сделать здесь?

Контроллер

public function actionAddInterest() {
        $connection = yii::app()->db;
        $sql1 = "INSERT INTO interest (UserId, ItemId)
                    VALUES(".Yii::app()->user->id.",".$this->ItemId.")";
        $connection->createCommand($sql1)->execute();
    }

Просмотр

<?php 
        echo CHtml::ajaxLink(
            'Add Interest',
            array('/item/addInterest'), 
            array('update'=>'#req_res')
        );
    ?>

1 Ответ

3 голосов
/ 06 ноября 2011

Глядя на ваш вопрос, я вижу, что вы не понимаете, как работает MVC в Yii.

Посмотрите на этот 15-минутный скринкаст ( Yii Tour - 3-я остановка - округ CRUD ), и после того, как вы сможете создать такую ​​кнопку любым способом, который вам нужен (попробуйте использовать Gii и настройте его в своем путь - это самый простой способ).

Обновлен:

Кажется, вам нужен AJAX-запрос. Вы можете добавить CHtml :: ajaxButton () на ваш взгляд.

Это будет работать так:

  1. Пользователь нажимает кнопку, кнопка делает запрос (с JavaScript) на ваш сайт без перезагрузки страницы и невидимый для пользователя.

  2. Действие вашего контроллера будет обслуживать этот запрос: оно может делать некоторые вещи (например, сохранять данные в БД) и выводить данные, которые ваш JavaScript, возможно, будет отображать пользователю.

  3. Чем ваш JavaScript получит ответ и сможет внести некоторые изменения на странице (например, скрыть кнопку или показать текст, полученный из запроса).

Простой пример можно посмотреть с помощью ajax здесь

Если вам не нужно отправлять информацию о форме с помощью вашей кнопки, вы можете использовать ajaxLink. Пример для этого здесь

Есть много примеров с ajax и yii в Интернете и на форуме yii. Попробуйте найти их, это может быть очень полезно.

Задавайте вопросы, если они у вас есть.

Второе обновление:

Сначала попробуйте сделать ваш SQL-запрос проще: «INSERT INTO интересах (UserId, ItemId) VALUES (1, 2)»

Чем включить ведение журнала запросов mysql для регистрации: в config / main.php добавьте «trace» в «level»

'components'=>array(
    'log'=>array(
        'class'=>'CLogRouter',
        'routes'=>array(
            array(
                'class'=>'CFileLogRoute',
                'levels'=>'error, warning, trace',
            ),

Теперь вы можете попробовать нажать на ссылку AJAX, посмотреть защищенный / runtime / log.txt и определить проблему.

Дополнительная информация для запросов AJAX

Все, что выводит ваши ajax-скрипты, можно просмотреть с помощью функций браузера: В Chrome: нажмите F12, перейдите в Сеть, нажмите ajax-ссылку и посмотрите ответ на запрос. На Firefox с надстройкой "Firebug".

С помощью этого вы можете определить, выполняется запрос или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...