Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 4 » Авторизация с проверкой дополнительных полей. » 26.06.2014 07:35:16

Route::group(array('before' => 'blocked'), function(){
    //Тут ваши маршруты Route::get/post/any/controller
});

Route::filter('blocked', function(){
    if(Auth::user() && Auth::user()->blocked == 1){
        App::abort(403); //Перекидываем на страницу доступ запрещен где написано что мол вы заблокированы
    }
});

Как-то так. Можно только на один маршрут login подвесить фильтрацию after и если пользователь заблокирован - то разавторизовывать его.

#2 Re: Laravel 4 » Авторизация с проверкой дополнительных полей. » 24.06.2014 13:28:11

А что мешает роуты прикрыть фильтром after с проверкой на блокировку? Авторизуем, но если пользователь заблокирован, то перекидываем на страницу "Вы заблокированы". К тому же, мультиаков так фиксировать можно через какую-нибудь неубиваемую куку.

На мой взгляд это лучше чем тупо ошибку вываливать еще на этапе авторизации.

#3 Re: Laravel 4 » Как сделать рандоммный вывод из MysQL » 14.06.2014 12:24:30

Мне больше нравится подход с сортировкой коллекций Illuminate\Database\Eloquent\Collection

Model::all()->sort(function($data, $key){ return mt_rand(0, 1) > 0 ? 1 : -1; });

#4 Re: Laravel 4 » Eloquent ORM Выборка по связи многие ко многим » 08.05.2014 22:16:04

Заполняем базу тем что дано в задаче

$data = array(
	'M1' => array('P1', 'P2'),
	'M2' => array('P1', 'P3'),
	'M3' => array('P5'),
	'M4' => array('P2'),
	'M5' => array('P6')
);
foreach($data as $model => $types){
	$mObj = Model::firstOrCreate(array('name' => $model));
	$tmp = array();
	foreach($types as $type){
		$tObj = Prototype::firstOrCreate(array('name' => $type));
		$tmp[] = $tObj->id;
	}
	$mObj->prototypes()->sync($tmp);
}

Находим что нужно для записи с именем М1

$current = 'M1';
$mCurrentObj = Model::firstOrNew(array('name' =>$current));
$pCurrent = $mCurrentObj->prototypes()->get()->lists('name');
print_r($pCurrent);

$mOut = array();
if(!empty($pCurrent)){
	foreach(Prototype::whereIn('name', $pCurrent)->get() as $pObj){
		$mFind = $pObj->models()->where('model_prototype.model_id', '!=', $mCurrentObj->id)->get();
		$mOut = array_merge($mOut, $mFind->lists('name'));
	}	
	$mOut = array_unique($mOut, SORT_STRING);
}
print_r($mOut);	

#5 Re: Laravel 4 » Ошибка локальной установки » 08.05.2014 15:58:09

Поставьте пакет kmd/logviewer для просмотра через браузер. Или сразу смотрите в папку /app/storage/logs/

#6 Re: Laravel 4 » Проблемы с валидацие многих ко многим » 08.05.2014 09:40:42

$film = Film::firstOrCreate(array('name' => 'Человек паук 3D'));
$film->events()->sync(array(1, 2, 3));

#7 Re: Laravel 4 » Поддомены в генерации URL » 29.04.2014 17:37:57

В таблице "Actions Handled By Resource Controller" на странице с документацией http://laravel.com/docs/controllers#res … ontrollers смотрите столбец Route Name.

#9 Re: Laravel 4 » Undefined property $attributes » 29.04.2014 17:12:41

Андрей пишет:

Для laravel вызов $brandsize->brand и $brandsize->brand() разнозначен

Я о том, что подгрузка данных в brand при обращении без Eager Loading и с ней происходит по разному. В одном случае всегда принудительно получаются данные, т.к. функция вызывается в явном виде. А в другом случае данные загружаются только в момент обращения к ним. И если данные еще не получены, то срабатывает вызов функции __get() в которой происходит прямой перебор всех доступных ключей. И я предположил, что именно из-за этого перебора возникает проблема с акселератором.

Перечитайте мое предыдущее сообщение еще раз и посмотрите класс \Illuminate\Database\Eloquent\Model - может поймете что я имел в виду.

#10 Re: Laravel 4 » Поддомены в генерации URL » 28.04.2014 18:22:58

http://laravel.com/docs/routing#sub-domain-routing

Route::get('/', array('as' => 'home', function()
{
    return 'home';
}));
Route::get('login', array('as' => 'login', function($account, $id)
{
    return 'login'
}));
Route::group(array('domain' => 'foo.example.com'), function()
{
    Route::get('/', array('as' => 'foo.home', function()
    {
        return 'home';
    }));
});
link_to_route('home', 'main home');
link_to_route('foo.home', 'foo home');
link_to_route('login', 'login');

#11 Re: Laravel 4 » Undefined property $attributes » 28.04.2014 17:38:22

Андрей пишет:

Не вижу принципиальной разницы между $brandsize->brand() и $brandsize->brand

Ну вообще $brandsize->brand, по логике php это переменная. А $brandsize->brand() - функция. Не могу утверждать как ведет себя в данном случае laravel, но предполагаю, что при обращении к brand как к переменной, происходит перегрузка при помощи магической функции __get. В то время, как при использовании различных php акселераторов, в некоторых случаях эта перегрузка не срабатывает. И использование with может позволить решить эту проблему.

Вот примерно такая у меня логика, но могу ошибаться, т.к. код не узчал. Поэтому поправьте меня если я не прав.

#12 Re: Laravel 4 » Класс active у текущей ссылки » 28.04.2014 15:50:29

Андрей пишет:

Спасибо за ссылки, но речь идет не только о меню но и вообще о ссылках, размещенных в произвольных блоках сайта

В таком случае все очень индивидуально и очень сильно зависит от маршрутов на вашем сайте. В некоторых случаях достаточно проверки вида:

Route::currentRouteName() == 'news.list'

А в некоторых без такой проверки не обойтись:

Request::is('news/list*')

Если речь идет о функциях link_to_*, то вызов становится примерно таким (см. 4 параметр)

link_to_route('route.name', $title, $parameters, array(
    'class' => ((Route::currentRouteName() == 'news.list') ? 'active' : 'inactive')
));

#13 Re: Laravel 4 » Undefined property $attributes » 27.04.2014 20:04:30

Судя по конструкции

@if($brandsize->brand())
@endif

Вы делаете что-то вроде костыля для подгрузки брендов чтобы потом использовать $brandsize->brand?. Не проще ли тогда использовать with? Попробуйте заменить ваш костыль на

Brandsize::with('brand')

при формировании переменной $brandsize. Я более чем уверен, что это решит вашу проблему.

#15 Re: Laravel 4 » Работа с изображениями » 27.04.2014 08:44:11

Андрей пишет:
Proger_XP пишет:

}%> Да и вообще странно что в базовом комплекте для работы с изображениями в Laravel нет чего-то подобного
Нельзя ведь всё на все случаи жизни в фреймворк добавлять, он и так уже раздутый.

Да, но изображения - это базовый элемент сайта, по мне так это должно быть из коробки.

За код спасибо большое, интересное решение, поковыряюсь ))).

Composer позволяет коробку сделать любого размера и цвета;-)

У всех свои предпочтения. Но лично я использую Intervention Image через свою хелпер функцию в которой генерируется имя для будущего кеш-файла, проверяется дата изменения оригинального файла и т.д. Код приводить не буду, т.к. по большей части он не завязан на эту библиотеку и само сжатие довольно примитивное

Image::make($file)->resize($w, $h, true)->save($cacheFile, 96);

#16 Re: Laravel 4 » Проверка на существование записей в связующей таблице » 23.04.2014 22:08:56

Мистика какая-то.

/** Все книги с переводчиками */
$books = Book::has('translators')->get();
foreach($books as $book){
	//...
}

/** проверка на наличие переводчиков у книги */
$books = Book::with('translators')->get();
foreach($books as $book){
	if($book->translators->count()){
         //... Есть переводчик
	}
}

И что тут может не работать? Т.е. не так. Если не работает, то скорее всего модель со связями составлена не корректно.

#17 Re: Laravel 4 » Время выполнения кода на Laravel. » 01.03.2014 00:19:08

Настраивали коннект к базе данных? localhost? Если да, то впишите 127.0.0.1 и будет самолет.
Это уже избитая проблема Win7/8

#18 Re: Laravel 4 » L4, как использовать Carbon localized diffForHumans? » 05.01.2014 11:16:07

1) Создать файл ru.php с классом Date_HumanDiff_Locale_ru в любом удобном месте и закинуть его в autoload files composer'a
2) До принятия PR воспользоваться форком добавив в composer.json repositories

{
	"type":"package",
	"package":{
		"name":"AgelxNash/Date_HumanDiff",
		"version":"0.4.1",
		"source":{
			"type":"git",
			"url": "https://github.com/AgelxNash/Date_HumanDiff",
			"reference":"master"
		},
		"autoload": {
			"files": [
				"src/Date/HumanDiff/Locale/ru.php"
			]
		}
	}
}

Подвал раздела