За последние 24 часа нас посетили 48195 программистов и 17289 роботов. Сейчас ищут 2614 программистов ...

Rest сервис

Тема в разделе "PHP для новичков", создана пользователем Alexdef, 22 фев 2017.

  1. Alexdef

    Alexdef Новичок

    С нами с:
    22 фев 2017
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток.
    Есть задача построить простой rest сервис. После некоторых конвульсий родил код:
    Код (Text):
    1. <?php
    2. use Phalcon\Mvc\Micro;
    3. use Phalcon\Di\FactoryDefault;
    4. use Phalcon\Db\Adapter\Pdo\Mysql as PdoMysql;
    5.  
    6.  
    7.  
    8. //Подключение к бд
    9. $di = new FactoryDefault();
    10.  
    11. // Настраиваем сервис базы данных
    12. $di->set(
    13.     "db",
    14.     function () {
    15.         return new PdoMysql(
    16.             [
    17.                 "host"     => "localhost",
    18.                 "username" => "*****",
    19.                 "password" => "********",
    20.                 "dbname"   => "*********",
    21.             ]
    22.         );
    23.     }
    24. );
    25.  
    26. // Создаем и привязываем DI к приложению
    27. $app = new Micro();
    28.  
    29. // Получение всех задач
    30. $app->get(
    31.     "/api/tasks",
    32.     function () {
    33.         echo '<p>Привет, мир!</p>';
    34.     }
    35. );
    36.  
    37. // Получение задачи по первичному ключу
    38. $app->get(
    39.     "/api/task/{id:[0-9]+}",
    40.     function ($id) {
    41.  
    42.     }
    43. );
    44.  
    45. // Добавление новой задачи
    46. $app->post(
    47.     "/api/tasks",
    48.     function () {
    49.  
    50.     }
    51. );
    52.  
    53. // Обновление задачи по первичному ключу
    54. $app->put(
    55.     "/api/tasks/{id:[0-9]+}",
    56.     function () {
    57.  
    58.     }
    59. );
    60.  
    61. // Удаление задачи по первичному ключу
    62. $app->delete(
    63.     "/api/tasks/{id:[0-9]+}",
    64.     function () {
    65.         echo '<html>
    66. <head>
    67.   <title>Тестируем PHP</title>
    68. </head>
    69. <body>
    70. <p>Делете Санек!</p>
    71. </body>
    72. </html>';
    73.     }
    74. );
    75.  
    76. $app->handle();
    Проблема в том что при загрузки странички через раз появляется ошибка Fatal error: Access to undeclared static property: Phalcon\Di::$_default in /home/users/9/9521449851/domains/alextestserver.ru/index.php on line 9

    Это строка $di = new FactoryDefault();
    Как выкрутится из этой беды?

    --- Добавлено ---
    Заметил так же что если перезагружать страничку через 3 и более секунд то все норм, а если менее секунды то вылетает эта ошибка
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
  3. Alexdef

    Alexdef Новичок

    С нами с:
    22 фев 2017
    Сообщения:
    2
    Симпатии:
    0
    Заметил так же что если перезагружать страничку через 3 и более секунд то все норм, а если
    спасибо)))
    --- Добавлено ---
    Изменил код
    Код (Text):
    1. <?php
    2. use Phalcon\Mvc\Micro;
    3. use Phalcon\Di\FactoryDefault;
    4. use Phalcon\Db\Adapter\Pdo\Mysql as PdoMysql;
    5.  
    6.  
    7. $app = new Micro();
    8.  
    9. // Получение всех задач
    10. $app->get(
    11.     "/api/tasks",
    12.     function () {
    13.         // Соединяемся, выбираем базу данных
    14.         $link = mysql_connect('localhost', '9521449851', '5zcNaszN5')
    15.         or die('Не удалось соединиться: ' . mysql_error());
    16.         echo 'Соединение успешно установлено';
    17.         mysql_select_db('9521449851_dbtask') or die('Не удалось выбрать базу данных');
    18.         // Выполняем SQL-запрос
    19.         $query = 'SELECT * FROM task_table';
    20.         $result = mysql_query($query) or die('Запрос не удался: ' . mysql_error());
    21.      
    22.         // Выводим результаты в html
    23.         echo "<table>\n";
    24.         while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    25.             echo "\t<tr>\n";
    26.             foreach ($line as $col_value) {
    27.                 echo "\t\t<td>$col_value</td>\n";
    28.             }
    29.             echo "\t</tr>\n";
    30.         }
    31.         echo "</table>\n";
    32.  
    33.         // Освобождаем память от результата
    34.         mysql_free_result($result);
    35.  
    36.         // Закрываем соединение
    37.         mysql_close($link);
    38.  
    39.      
    40.     }
    41. );
    42.  
    43. // Получение задачи по первичному ключу
    44. $app->get(
    45.     "/api/task/{id:[0-9]+}",
    46.     function ($id) {
    47.  
    48.     }
    49. );
    50.  
    51. // Добавление новой задачи
    52. $app->post(
    53.     "/api/tasks",
    54.     function () {
    55.  
    56.     }
    57. );
    58.  
    59. // Обновление задачи по первичному ключу
    60. $app->put(
    61.     "/api/tasks/{id:[0-9]+}",
    62.     function () {
    63.  
    64.     }
    65. );
    66.  
    67. // Удаление задачи по первичному ключу
    68. $app->delete(
    69.     "/api/tasks/{id:[0-9]+}",
    70.     function () {
    71.         echo '<html>
    72. <head>
    73.   <title>Тестируем PHP</title>
    74. </head>
    75. <body>
    76. <p>Делете!</p>
    77. </body>
    78. </html>';
    79.     }
    80. );
    81.  
    82. $app->handle();
    Теперь тычет на
    Fatal error: Access to undeclared static property: Phalcon\Mvc\Router\Route::$_uniqueId in /home/users/9/9521449851/domains/alextestserver.ru/index.php on line 41

    Но в 41 строке переменных нет
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    это в принципе невозможно. То что, что подаётся под видом реста не более чем круд поверх хттп.
    --- Добавлено ---
    посмотри код файла на сервере
     
  5. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    489
    Симпатии:
    21
    Обычно имена свойств класса, которые начинаются с _ подчёркивания - это приватные свойства. Они у вас скорей всего не видны в вашей области видимости.