Symfony 2 Joboard : Безопасность

Безопасность - это двухэтапный процесс, целью которого является запретить или разрешить доступ к ресурсу для определённых групп пользователей. Первый этап - аутентификация - система идентифицирует пользователя, исходя из предоставленных им данных. На втором этапе система переходит к авторизации и определяет, имеет ли пользователь доступ к определенным данным.

Настройки системы безопасности хранятся в файле app/config/security.yml. Изменим этот файл:

Читать далее...

Режимы наложения CSS

  • CSS
  • 2 года назад

Если вам доводилось сталкиваться с программами для фотомонтажа (Adobe Photoshop, Pixelmator, GIMP), то вы, наверняка, знакомы с ними. Как можно понять из названия, режимы наложения определяют, как одно изображение накладывается на другое. В зависимости от выбранного режима, вы получите разный результат.

Эти режимы стали доступны в CSS в соответствии со спецификацией. Они определяют, как каждый цвет совмещается с другим на внизу лежащем слое. Таким образом можно добиться довольно интересных результатов.

Читать далее...

Декораторы в Python

  • Python
  • 2 года назад

Для понимания декораторов, сначала надо осознать, что все функции в Python это объекты. Что влечет за собой ряд последствий. Рассмотрим их на простом примере:

def shout(word="yes"):
    return word.capitalize()+"!"

print shout()
# outputs : 'Yes!'print

# так как это объект, вы можете назначить функцию переменной 
scream = shout

# Обратите внимание, мы не используем скобки: мы не вызываем функцию, а определяем занчение переменной scream 
print scream()
# outputs : 'Yes!'

# Более того, можете удалить старое имя shout, а функция будет все еще доступна из scream 
del shout
try:
    print shout()
except NameError, e:
    print e
#outputs: "name 'shout' is not defined"

print scream()
# outputs: 'Yes!'
Читать далее...

Пространства имён в PHP

  • PHP
  • 2 года назад

Начиная с версии 5.3 в PHP были добавлены пространства имен. Должен сказать, что большинство современных языков программирования уже довольно давно поддерживают этот функционал, так что можно сказать, что PHP немного задержались. Тем не менее, давайте рассмотрим как же это нововведение повлияло на разработку приложений.

PHP не позволяет использовать два класса с одинаковым названием. Они должны быть уникальны. Представьте себе, вы используете какую-либо стороннюю библиотеку, в которой присутствует класс User. Это означает, что свой собственный класс с таким же названием вы уже не сможете использовать. Что не совсем нам подходит, ведь название для класса очень даже удобное.

Читать далее...

Веб аналитика с помощью фреймворка MongoDB Aggregation

До версии 2.1 для агрегации в MongoDB (группировка документов по ключам, вычисление общего или среднего значения и т.д.) приходилось использовать MapReduce., что довольно успешно делали программисты практически на интуитивном уровне. Конечно, присутствует определенный порог вхождения для полного понимания процесса, но использование MapReduce в приложении, написанном не на JavaScript, требует “хакерских” способностей.

Читать далее...

Symfony 2 Joboard : Интерфейс администратора

После завершения 11 части наше приложение вполне работоспособно. Им могут пользоваться как соискатели, так работодатели. Настало время обсудить администраторскую составляющую нашего сайта. При помощи Sonata Admin Bundle мы полностью реализуем интерфейс администратора менее чем за час.

Чтобы установить последнюю версию бандла, добавьте в файл composer.json следующие строки:

"sonata-project/admin-bundle": "dev-master",
"sonata-project/doctrine-orm-admin-bundle": "dev-master"

Затем запустите команду обновления пакетов composer:

Читать далее...

Symfony 2 Joboard : Тестирование форм

Давайте откроем файл JobControllerTest и добавим в него функциональный тест охватывающий процесс создания и валидации вакансии. В конце файла добавьте следующий код:

<?php

# src/App/JoboardBundle/Tests/Controller/JobControllerTest.php
// ...

public function testJobForm()
{
   $client  = static::createClient();
   $crawler = $client->request('GET', '/job/new');

   $this->assertEquals('App\JoboardBundle\Controller\JobController::newAction',      $client->getRequest()->attributes->get('_controller'));
}

Теперь воспользуемся методом selectButton() объекта $crawler для получения формы. Этот метод позволяет выбирать элементы с тегом button и поля ввода submit. После этого через метод form() этого же объекта, получим доступ к экземпляру формы:

Читать далее...

Nested Set

Создание модели для хранения иерархических данных - совсем непростая задача. Что же мы подразумеваем под иерархическими данными? Представьте, что вам необходимо организовать список продуктов по категориям. Например, у вас будет несколько основных категорий: продукты, оборудование, электроника. А далее вам потребуется разбить их на подкатегории, а те в свою очередь, на более узкие категории. На бумаге всё выглядит довольно просто, а вот в таблице СУБД (система управления базами данных) дело обстоит совсем по другому. В этой статье я попробую рассказать об основной идее этой модели и когда её следует применять. Начну с объяснения более простой иерархической модели, а далее перейдём к модели вложенных множеств.

Читать далее...