Все ленты — последние статьи

laravel 5 Internal Server Error

 Вся фигня может быть в 2-3 причинах…

1. Зайдите в папку publuc и править .htaccess

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

2.

Права

sudo chmod -R o+w storage/

sudo chmod -R o+w vendor

php artisan config:cache

3.

a2enmod rewrite

 

Магия Laravel: динамические where https://laravelinfo.com

Магия Laravel: динамические where

https://laravelinfo.com

 

Laravel предоставляет нам возможность получать данные из базы вызывая методы класса Illuminate\Database\Query\Builder на наших моделях. Сегодня речь пойдёт об одном из таких методов, а именно о динамическом where. Благодаря нему мы можем выбирать данные, фильтруя их по различным атрибутам нашей модели. Например:

$activeUsers = User::whereActive(true)->get();
$publishedPosts = Post::wherePublished(true)->get();
$activeMenuProducts = Product::whereActiveAndShowInMenu(true, true)->get();

Разберёмся, что за магия здесь происходит и откуда берутся эти методы. Для начала посмотрим в наш класс Illuminate\Database\Eloquent\Model, так как его наследуют все наши модели. Ничего похожего на методы выше в нём нет, но есть магические методы __call и __callStatic:

/**
* Handle dynamic method calls into the model.
*
* @param string $method
* @param array $parameters
* @return mixed
*/
public function __call($method, $parameters)
{
if (in_array($method, ['increment', 'decrement'])) {
return call_user_func_array([$this, $method], $parameters);
}
$query = $this->newQuery();
return call_user_func_array([$query, $method], $parameters);
}
/**
* Handle dynamic static method calls into the method.
*
* @param string $method
* @param array $parameters
* @return mixed
*/
public static function __callStatic($method, $parameters)
{
$instance = new static;
return call_user_func_array([$instance, $method], $parameters);
}

При обращении к несуществующим статическим методам (а в примерах выше именно они и есть) нашей модели, вызывается метод __callStatic. Он создаёт экземпляр класса в котором мы вызвали метод и пытается вызвать его в нём. Тут в игру вступает метод __call, потому как и в экземпляре нашего класса тоже нет динамических методов where. Он создаёт экземпляр класса Illuminate\Database\Eloquent\Builder в котором также нет нашего динамического where. Но, зато в нём есть ещё один магический метод __call, который и приводит нас к конечному классу, который нас интересует, а именно Illuminate\Database\Query\Builder. В нём, как вы уже наверное догадались, нас ждёт ещё один метод __call, который и помогает нам использовать динамические методы начинающиеся с where:

/**
* Handle dynamic method calls into the method.
*
* @param string $method
* @param array $parameters
* @return mixed
*
* @throws \BadMethodCallException
*/
public function __call($method, $parameters)
{
if (Str::startsWith($method, 'where')) {
return $this->dynamicWhere($method, $parameters);
}
$className = get_class($this);
throw new BadMethodCallException("Call to undefined method {$className}::{$method}()");
}

Если наш метод начинается с where, то вызывается метод dynamicWhere. В нём заботливо написаны комментарии на английском, которые я ниже распишу на русском:

/**
* Handles dynamic "where" clauses to the query.
*
* @param string $method
* @param string $parameters
* @return $this
*/
public function dynamicWhere($method, $parameters)
{
// Убираем слово `where` из названия нашего метода
$finder = substr($method, 5);
// Разбиваем название метода на сегменты по заданному регулярному выражению, и возвращаем строку сегментов метода.
// Например `nameAndId` преобразуется в массив ['Name', 'And', 'Id']
$segments = preg_split('/(And|Or)(?=[A-Z])/', $finder, -1, PREG_SPLIT_DELIM_CAPTURE);
// Оператор по умолчанию у нас `and`. То есть, например, если у нас цепочка методов `whereName()->whereId()`, то между ними по умолчанию стоит `and`.
// Этот оператор служит для связи с предыдущей частью запроса
$connector = 'and';
$index = 0;
foreach ($segments as $segment) {
// Проходя по всем нашим сегментам мы проверяем, если сегмент не `And` и не `Or`, то добавляем наш динамический where.
// В методе `addDynamic` можно увидеть по сути одну строку(помимо преобразования оператора в lowercase): `$this->where(Str::snake($segment), '=', $parameters[$index], $bool);`.
// Именно в нём наш динамический метод превращается в обычный `where` с параметрами
if ($segment != 'And' && $segment != 'Or') {
$this->addDynamic($segment, $connector, $parameters, $index);
$index++;
}
// Иначе мы меняем наш оператор связи с предыдущей частью запроса, в случае если у нас более сложное название метода, например `whereNameAndId` или `whereNameAndIdOrColor`
else {
$connector = $segment;
}
}
return $this;
}

Дальше происходит различная магия Eloquent для создания и подготовки запроса и тд, но где преобразуются наши динамические where в обычные, мы нашли.

Laravel Аутентификация (авторизация ) с коробки

Статья кратко для себя как сделать быстро авторизацию на Laravel

  За основу брал http://otdel-devsite.ru/laravel-5-%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F/ Но в этой статье есть ошибки(у меня исправлено под 5 ) и уже слеплено с другими статьями…Кидаю отрывки.

Этапы:

1. Заводим БД и прописываем в Laravel

2. Активируем таблицы с коробки

php artisan migrate

3. routes.php

Теперь создадим форму для ввода логина и пароля и соответствующий маршрут.

Маршруты, которые нам понадобятся.

Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');

4.  Что мы видим? Мы видим что за регистрацию и аутентификацию отвечает готовый котролер AuthController у которого есть методы Login, Logout, Register, для каждого запроса GET и POST. Для примера создадим маршрут для админки нашего блога (условного блога конечно), которую защитим паролем

Route::group(['prefix'=>'adminzone','middleware'=>'auth'], function()
{
     Route::get('/', function()
     {
         echo "Добро пожаловать админ!";
     });      
    
});

 

5. Добавим этот adminzone

Route::get('/adminzone', function() {
echo "Welcome to Secret Zone";
});

 

6. Теперь при переходе по адресу site.ru/adminzone, будет срабатывать посредник auth, который будет нас перенаправлять на страницу auth/login, если мы не прошли аутентификацию

7.   Но как мы проверим, ведь у нас нет ни пользователя ни пароля? Создадим нашего пользователя admin. Можно конечно создать еще форму регистрации и зарегистрировать нашего админа, но проверить-то хочется сразу. Для этого будем использовать механизм заполнение данных seeding. Идем в папку

databases/seeds/

И редактируем файл DatabaseSeeder.php. Должно быть так

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        
        \DB::table('users')->insert([
        'name'=>'admin',
        'email'=>Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.'">'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.',
        'password'=>bcrypt('pass'),
            ]);
                //Model::unguard();

        // $this->call('UserTableSeeder');
    }

}

 

Вся фигня что в оригинале указано DB:table  и с ошибкой, исправлено на  \DB::table

и финально выполняем: php artisan db:seed

8.

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

site.ru/adminzone

Нас должно перенаправить на адрес

site.ru/auth/login

Вводим наши email и пароль. После этого нас переадресует на адрес

site.ru/home

Ага, аутентифкация работает. И после этого опять пытаемся перейти на

site.ru/adminzone

Должны увидеть надпись

Добро пожаловать админ!

Но что за редирект на site.ru/home после ввода email и пароля?  Нам то хочется, что бы перенаправляло на адрес site.ru/adminzone! Ок, исправляем. Идем сюда

app/Http/Middleware

И ищем такой файл

RedirectIfAuthenticated.php

Находим функцию handle и адрес редиректа

return redirect->('/home');

Далее я думаю уже все знают, что нужно сделать? Меняем на url, который нам нравится

return redirect->('/adminozne');

Либо есть другой способ. В контролере

app/Http/Controllers/Auth/AuthController.php

добавляем в свойства класса AuthController вот такую запись

protected $redirectPath ='/adminzone';

 

Файлы проекты в аналогичной статье на soscode.ru

 

 Нашел еще авторизацию с коробки с таким роутером https://github.com/kautharhilmyz/laravel-5.1-with-basic-auth

Route::get('/', function () {
    return Redirect::to('home');
});

Route::get('home', 'HomeController@index');

// Authentication routes…
Route::get('auth/login', 'Auth\AuthController@getLogin');
Route::post('auth/login', 'Auth\AuthController@postLogin');
Route::get('auth/logout', 'Auth\AuthController@getLogout');

// Registration routes…
Route::get('auth/register', 'Auth\AuthController@getRegister');
Route::post('auth/register', 'Auth\AuthController@postRegister');

// Password reset link request routes…
Route::get('password/email', 'Auth\PasswordController@getEmail');
Route::post('password/email', 'Auth\PasswordController@postEmail');

// Password reset routes…
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');

 

HomeController

<?php

namespace Bestmomo\Scafold\Http\Controllers;

use AppController;

class HomeController extends AppController
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }
    
    /**
     * Show the application dashboard to the user.
     *
     * @return Response
     */
    public function index()
    {
        return view('home');
    }
}

 

 

//  view('home');

 

@extends('app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-10 col-md-offset-1">
            <div class="panel panel-default">
                <div class="panel-heading">Home</div>

                <div class="panel-body">
                    You are logged in!
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

 

 

 

 

 

Как установить Composer на OpenServer ?

Как установить Composer на OpenServer ?

Сейчас довольно трудно себе представить разработчика, ведущего разработку на рабочем сервере (на продакшне, т.е. на том же сервере где и работает основной сайт). Многие предпочитают пользоваться готовыми LAMP, WAMP и подобными решениями. Наверное едва ли не самым популярным из них является OpenServer. Да, использование таких решений позволяет не тратить впустую много времени на настройку рабочего окружения, однако иногда это вызывает не меньше проблем. Об одной из таких проблем я бы хотел сегодня поделиться.

Наверное наиболее часто задаваемым вопросом является использование и установка утилиты Composer. Это де-факто стандарт в области менеджеров зависимостей для PHP. При работе с ним можно не бояться об использовании старых библиотек, которые использует ваш проект, ведь Composer установит нужные библиотеки за вас! В этой статье я не буду рассматривать как использовать этот замечательный инструмент, но расскажу как настроить его взаимодействие с OpenServer.

Обычно, при попытки установить Composer на Windows с установленным и запущенным OpenServer'ом вызывает проблему: Composer не хочет устанавливаться по причине ошибки openssl, которая в вашем проекте выключена.Конечно же, при открытии php.ini через openserver вы обнаружите что соблюли все требования, однако Композер все равно будет ругаться.

Решить это можно довольно просто, всего в 3 шага:

  • Шаг 1 — устанавливаем нужные нам версию PHP и Apache в настройках openserver'а.
    Помните! Версия должна быть не ниже PHP 5.3.2!
  • Шаг 2 — В OpenServer открываем: Дополнительно -> Конфигурация -> PHP .....
    Проверяем наличие раскомментированного extension=php_openssl.dll
  • Шаг 3 — Включаем Консоль OpenServer'a: Дополнительно -> Консоль.
    Коммандами консоли windows переходим в папку используемого php. Я использую php-5.5.6 и моя команда выглядит так:
    1
    cd modules/php/PHP-5.5.6/

    Затем выполняем комманду:

    1
    php -r "readfile('https://getcomposer.org/installer');" | php

    После чего, если все успешно вы увидите надпись:

    1
    2
    3
    4
    5
    All settings correct for using Composer
    Downloading…
     
    Composer succesfully installed to : <путь до вашей папки php>/Composer.phar
    User it: php composer.phar

Готово! Composer установился и набрав комманду:

1
php composer.phar -V

Вы должны увидеть запись подобного рода:

1
Composer version <версия> < дата обновления >

Для удобства рекомендую проделать еще один шаг и выполнить комманду:

1
echo @php "%~dp0composer.phar" %*>composer.bat

Она создаст .bat файл и в дальнейшем можно будет работать без указания php composer.phar, просто указывая composer Т.е. команда проверки версии (которая была выше) будет выглядеть так:

1
composer -V

Что согласитесь гораздо удобнее.


 


JSON формат: создание данных, использование с PHP и JS

реклама

Что такое JSON и на что он способен? В этой статье вы узнаете, как использовать JSON для легкой работы с данными. Так же мы рассмотрим, как работать с JSON используя при этом PHP и JavaScript.


 

Если вы разрабатывали вебсайты или веб-приложения в целом, вероятней всего вы слышали о JSON, по крайней мере, мимолетом. Но, что конкретно значит JSON? Что может делать этот формат данных и как им пользоваться?

В этой статье мы узнаете основы работы с json форматом. Мы будем следовать следующим темам:

  • Что такое JSON формат?
  • Для каких целей используется JSON?
  • Как создавать JSON строки?
  • Простой пример JSON данных
  • Сравнение JSON с XML
  • Как работать с JSON через PHP и JS?

Давайте начнем!

Что такое JSON формат?

JSON — это простой, основанный на тексте, способ сохранять и передавать структурированные данные. С помощью простого синтаксиса вы можете легко сохранять как простые цифры и строки, так и массивы, объекты, используя при этом не что иное как текст. Так же можно связывать объекты и массивы, что позволяет создавать сложные структуры данных.

После создания JSON строки, ее легко можно пересылать в любое приложение или компьютер, так как это всего лишь текст.

JSON имеет много преимуществ:

  • Он компактный
  • Он понятен для людей и легко считывается компьютером
  • Его легко можно преобразовать в программные форматы: числовые значения, строки, булевой формат, нулевое значение, массивы и ассоциативные массивы.
  • Почти все программные языки имеют функции, позволяющие считывать и создавать json формат данных.

Буквально, аббревиатура JSON означает — JavaScript Object Notation. Как описано ранее, этот формат основан на создании объектов, что-то подобное к ассоциативным массивам в других языках программирования.

Для каких целей используется JSON?

Более всего, json используется для обмена данными между javascript и серверной стороной (php). Другими словами, для технологии ajax. Это очень удобно, когда вы передаете несколько переменных или целые массивы данных.

Как это выглядит на примере:

  1. Пользователь кликает по превьюшке картинки
  2. JavaScript обрабатывает это событие и посылает ajax запрос к PHP скрипту, передавая ID картинки.
  3. На сервере, php получает описание картинки, имя картинки, адрес к большому изображению и другую информацию из базы данных. Получив, преобразовывает в JSON формат и отправляет обратно на страницу пользователя.
  4. JavaScript получает ответ в виде JSON, обрабатывает данные, формирует html код и выводит увеличенное изображение с описанием и другой информацией.

Так происходит увеличение картинки, без перезагрузки страницы в браузере. Это очень удобно, когда нам необходимо получить частичные данные, или передать небольшой объем информации на сервер.

Всеми любимый jQuery, имеет функции getJSON() и parseJSON(), которые помогают работать с форматом через ajax запросы.

Как создавать JSON строки?


 

Ниже предоставлены основные правила создания JSON строк:

  • JSON строка содержит как массив значений, так и объект (ассоциативный массив с парами имя/значение).
  • Массив должен быть обвернут в квадратные скобки, [ и ], может содержать список значений, которые отделяются через кому.
  • Объекты обворачиваются с помощью фигурных дужек, { и }, также содержат разделенные комой пары имя/значение.
  • Пары имя/значение состоят из имя поля (в двойных кавычках), после чего следует двоиточие ( : ) , после значение данного поля.
  • Значения в массиве или объекте могут быть:
    • Числовые (целые или дробные с точкой)
    • Строковые (обвернутые в двойные кавычки)
    • Логические (true или false)
    • Другие массивы (обвернутые в квадратные скобки [ и ])
    • Другие объекты (обвернутые в фигурные дужки { и })
    • Нулевое значение (null)

Важно! Если вы используете двойные кавычки в значениях, экранируйте их с помощью обратного слеша: \". Также можно использовать hex закодированные символы, так как вы это делаете в других программных языках.

Простой пример JSON данных

Следующий пример показывает, как можно сохранять данные в «корзине» интернет магазина с помощью JSON формата:

 

{
  "orderID": 12345,
  "shopperName""John Smith",
  "shopperEmail""Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.",
  "contents": [
    {
      "productID": 34,
      "productName""SuperWidget",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName""WonderWidget",
      "quantity": 3
    }
  ],
  "orderCompleted"true
}

 

Давайте разберем эти данные по частям:

  1. В начале и конце мы использует фигурные дужки { и }, которые дают понять, что это объект.
  2. Внутри объекта мы имеем несколько пар имя/значение:
  3. "orderID": 12345 — поле с именем orderId и значение 12345
  4. "shopperName": "John Smith" — поле с именем shopperName и значение John Smith
  5. "shopperEmail": "johnsmith@example.com" — подобно, как и в предыдущем поле, здесь храниться email покупателя.
  6. "contents": [ … ] — поле с именем content, значение которого массив.
  7. "orderCompleted": true — поле с именем orderCompleted, значение которого true
  8. Внутри массива contents, мы имеем два объекта, которые отображают содержимое корзины. Каждый объект продукта имеет три свойства: productID, productName, quantity.

На последок, так как JSON идентичен с объектами в JavaScript, вы легко можете взять этот пример и создать из него JavaScript объект:

 

<script type="text/javascript">
var cart = {
  "orderID": 12345,
  "shopperName""John Smith",
  "shopperEmail""Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.",
  "contents": [
    {
      "productID": 34,
      "productName""SuperWidget",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName""WonderWidget",
      "quantity": 3
    }
  ],
  "orderCompleted"true
};
</script>

 

Сравнение JSON с XML

В большинстве случаев, вы будете думать о JSON как альтернативе XML формату — по крайней мере в рамках веб приложений. Концепция Ajax, в оригинале использует XML для обмена данными между сервером и браузером, но в последние годы JSON стал более популярным для передачи ajax данных.

Хотя XML это испытанная и хорошо тестированная технология которой пользуются множество приложений, преимущества JSON формата в том, что он более компактный и более прост в написании и чтении.

Вот вышеописанный JSON пример, только переписанный в XML формате:

 

<object>
  <property>
    <key>orderID</key>
    <number>12345</number>
  </property>
  <property>
    <key>shopperName</key>
    <string>John Smith</string>
  </property>
  <property>
    <key>shopperEmail</key>
    <string>Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.</string>
  </property>
  <property>
    <key>contents</key>
    <array>
      <object>
        <property>
          <key>productID</key>
          <number>34</number>
        </property>
        <property>
          <key>productName</key>
          <string>SuperWidget</string>
        </property>
        <property>
          <key>quantity</key>
          <number>1</number>
        </property>        
      </object>
      <object>
        <property>
          <key>productID</key>
          <number>56</number>
        </property>
        <property>
          <key>productName</key>
          <string>WonderWidget</string>
        </property>
        <property>
          <key>quantity</key>
          <number>3</number>
        </property> 
      </object>
    </array>
  </property>
  <property>
    <key>orderCompleted</key>
    <boolean>true</boolean>
  </property>  
</object>

 

Как видите в несколько раз длиннее нежели JSON. По факту, этот пример длинной 1128 символов, в то время, как JSON версия всего лишь 323 символа. Также XML версию сложнее читать.

Естественно, нельзя судить только по одному примеру, но даже небольшие объемы информации занимают меньше места в JSON формате, нежели в XML.

Как работать с JSON через PHP и JS?

Вот мы и подошли к самому интересному — практической стороне JSON формата. Сначала отдадим дань JavaScript’у, после посмотрим, как можно манипулировать с JSON через PHP.

Создание и чтение JSON формата с помощью JavaScript


 

Несмотря на то, что JSON формат прост, его сложно писать вручную при разработке веб приложений. Более того, часто приходится конвертировать JSON строки в переменные, после чего использовать их в своем коде.

К счастью, многие языки программирования предоставляют инструменты для работы с JSON строками. Основная идея которых:

Создание JSON строк, вы начинаете с переменных содержащих некие значения, после пропускаете их через функцию, превращающую данные в JSON строку.

Чтение JSON строк, вы начинаете с JSON строки содержащей определенные данные, пропускаете строку через функцию, которая создает переменные содержащие данные.

Давайте посмотрим, как это делается в JavaScript.

Создаем JSON строку из JavaScript переменной

JavaScript имеет встроенный метод, JSON.stringify(), который принимает переменную javascript и возвращает json строку репрезентируя содержимое переменной. Для примера, воспользуемся ранее созданным объектом, сконвертируем его в JSON строку.

 

<script type="text/javascript">
 
var cart = {
  "orderID": 12345,
  "shopperName""John Smith",
  "shopperEmail""Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.",
  "contents": [
    {
      "productID": 34,
      "productName""SuperWidget",
      "quantity": 1
    },
    {
      "productID": 56,
      "productName""WonderWidget",
      "quantity": 3
    }
  ],
  "orderCompleted"true
};
 
alert ( JSON.stringify( cart ) ); 
 
</script>

 

Вот что выведется на экран:

 

{"orderID":12345,"shopperName":"John Smith","shopperEmail":"Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.",
"contents":[{"productID":34,"productName":"SuperWidget","quantity":1},
{"productID":56,"productName":"WonderWidget","quantity":3}],
"orderCompleted":true}

 

Заметьте, что JSON.stringify() выводит JSON строки без пробелов. Сложно читать, но так более компактно, что важно при пересылке данных.

Создаем JavaScript переменную из JSON строки

Существует несколько способов парсинга JSON строк, наиболее приемлем и безопасный используя JSON.parse() метод. Он принимает JSON строку и возвращает JavaScript объект или массив содержащий данные JSON. Вот пример:

 

<script type="text/javascript">
 
var jsonString = '                          \
{                                           \
  "orderID": 12345,                         \
  "shopperName""John Smith",              \
  "shopperEmail""Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.",  \
  "contents": [                             \
    {                                       \
      "productID": 34,                      \
      "productName""SuperWidget",         \
      "quantity": 1                         \
    },                                      \
    {                                       \
      "productID": 56,                      \
      "productName""WonderWidget",        \
      "quantity": 3                         \
    }                                       \
  ],                                        \
  "orderCompleted"true                    \
}                                           \
';
 
var cart = JSON.parse ( jsonString );
 
alert ( cart.shopperEmail );
alert ( cart.contents[1].productName );
 
</script>

 

Здесь мы создавали переменную, jsonString, которая содержит JSON строку из ранее предоставленных примеров. После чего  пропускали эту строку через JSON.parse() для создания объекта содержащего JSON данные, которые хранятся в cart переменной. На конец, мы проверяем наличие данных и выводим некоторую информацию средствами модального окна alert.

Выведется следующая информация:

 

Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
WonderWidget

 

В реальном веб приложении, ваш JavaScript код должен принимать JSON строку как ответ от сервера (после посылки AJAX запроса), после чего парсите строку и выводите данные о содержимом корзины пользователю.

Создание и чтение JSON формата с помощью PHP


 

PHP, подобно JavaScript’у, имеет функции позволяющие конвертировать переменные в JSON формат, и наоборот. Давайте рассмотрим их.

Создание JSON строки из PHP переменной

Json_encode() принимает PHP переменную и возвращает JSON строку, репрезентируя данные переменной. Вот наш пример «корзины» написанный на PHP:

 

<?php
$cart = array(
  "orderID" => 12345,
  "shopperName" => "John Smith",
  "shopperEmail" => "Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.",
  "contents" => array(
    array(
      "productID" => 34,
      "productName" => "SuperWidget",
      "quantity" => 1
    ),
    array(
      "productID" => 56,
      "productName" => "WonderWidget",
      "quantity" => 3
    )
  ),
  "orderCompleted" => true
);
 
echo json_encode( $cart );
?>

 

Этот код выводит в точности такой результат, как и JavaScript пример — валидную JSON строку репрезентирующую содержимое переменных:

 

{"orderID":12345,"shopperName":"John Smith","shopperEmail":"Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.","contents":[{"productID":34,"productName":"SuperWidget","quantity":1},{"productID":56,"productName":"WonderWidget","quantity":3}],"orderCompleted":true}

 

В реалии, ваш PHP скрипт должен посылать JSON строку как ответ на AJAX запрос, где JavaScript будет использовать JSON.parse() для превращения строки в переменные.

В функции json_encode() можно указывать дополнительные параметры, позволяющие конвертировать некоторые символы в hex.

Создание PHP переменной из JSON строки

Аналогично к вышеописанному, существует функция json_decode(), позволяющая декодировать JSON строки и помещать содержимое в переменные.

 

<?php
$jsonString = '
{                                           
  "orderID": 12345,                         
  "shopperName""John Smith",              
  "shopperEmail""Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.",  
  "contents": [                             
    {                                       
      "productID": 34,                      
      "productName""SuperWidget",         
      "quantity": 1                        
    },                                      
    {                                       
      "productID": 56,                      
      "productName""WonderWidget",        
      "quantity": 3                         
    }                                       
  ],                                        
  "orderCompleted"true                    
}                                           
';
 
$cart = json_decode( $jsonString );
echo $cart->shopperEmail . "<br>";
echo $cart->contents[1]->productName . "<br>";
?>

 

Как и в случае с JavaScript, этот код выведет следующее:

 

Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
WonderWidget

 

По умолчанию, json_decode() возвращает JSON объекты как PHP объекты. Подобно привычному синтаксису, мы используем -> для доступа к свойствам объекта.

Если в дальнейшем вы захотите использовать данные в виде ассоциативного массива, просто передайте вторым параметров true в функции json_decode(). Вот пример:

 

$cart = json_decode( $jsonStringtrue );
echo $cart["shopperEmail"] . "<br>";
echo $cart["contents"][1]["productName"] . "<br>";

 

Это выводит тот же результат:

 

Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
WonderWidget

 

Также в функцию json_decode() можно передавать дополнительные аргументы, для определения обработки больших чисел и рекурсии.

В заключение о JSON формате

Если вы собрались создавать веб приложение использующее технологию Ajax, несомненно воспользуйтесь форматом JSON для обмена данными между сервером и браузером.

Надеюсь, вам понравилось читать эту статью. Успешной разработки!

 

Источник материала …

Дальше: Создание семантических HTML + CSS шаблонов на 2 и 3 колонки