Laravel по-русски

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

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

#2 Re: Laravel 4 » Зачем Input::get делает addslashes и как это убрать? » 08.02.2014 22:04:04

Проблема была не в Laravel, а в том что в php 5.3 по умолчанию влючено экранирование http://www.php.net/manual/ru/security.magicquotes.php

#3 Re: Laravel 4 » Many to Many с повторяющимися ID но разными полями в связующей таблице » 08.02.2014 06:47:06

Решил проблему след образом:

PHP
$film->people()->sync(array()); // удаляем связанных с этим фильмом людей
$film->people()->attach(1, array('post' => 'режиссер'));
$film->people()->attach(1, array('post' => 'сценарий'));
$film->people()->attach(2, array('post' => 'сценарий'));

#4 Laravel 4 » Зачем Input::get делает addslashes и как это убрать? » 08.02.2014 05:13:48

la2ha
Ответов: 3

Заметил что во входных данных экранируются кавычки, зачем это сделано? Понимаю если бы делали htmlentities.
А вот addslashes не могу понять зачем, приходится постоянно применять stripcslashes.
Как это можно отключить?

#5 Laravel 4 » Many to Many с повторяющимися ID но разными полями в связующей таблице » 08.02.2014 00:34:09

la2ha
Ответов: 1

Есть таблица с фильмами:
id, name
Есть таблица с людьми:
id, name
Есть связующая таблица:
id, film_id, person_id, post
Где поле post это должность.

Проблема в том что у одного человека может быть несколько должностей в одном фильме:
Пример:
режиссер: Фрэнк Дарабонт
сценарий: Фрэнк Дарабонт, Стивен Кинг

Фрэнк Дарабонт — в базе имеет id=1
Стивен Кинг — в базе имеет id=2

Судя по документации добавлять данные в связующую таблицу нужно так

PHP
$user->roles()->sync(array(=> array('expires' => true)));

И вот тут проблемка возникает исходя из наших данных запрос будет таким

PHP
$film->people()->sync(array(
    
=>  array('post' => 'режиссер'),
    
=>  array('post' => 'сценарий'),
    
=>  array('post' => 'сценарий'),
));

Ну и сохранится только то что Фрэнк Дарабонт работал над сценарием т.к. мы потом переопределили ключ 1

#6 Laravel 4 » [L4] Подключение Laravel к существующему проекту. » 17.06.2013 04:07:39

la2ha
Ответов: 5

В общем появился проектик, достаточно большой, чтот то вроде CMS узкоспециализированной, так вот он написано на чиcтом php и очень не хватает некоторых классов laravel для того чтоб быстро работать над ним используя средства к которым привык, к оннтроллерах речи не идет, но некоторые классы хотелось бы именно из laravel(работа с БД, Валидация форм, помощник построения форм) ну и естественно для этого нужно как то подключить их, но они ж там завязаны один за другой, поэтому по ходу придется весь laravel подключить, и вот хотеось бы узнать как это сделать. То есть например закинул я дистрибутив laravel в папочку laravel которая в корне, и что мне прописать например в index.php который лежит в корне, чтоб я в нем мог юзать классы laravel?

#7 Re: Laravel 3 » Decryption error. Padding is invalid. » 03.06.2013 21:10:19

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

#8 Re: Laravel 3 » Decryption error. Padding is invalid. » 03.06.2013 20:16:00

вот скрин, судя по всему в куках больше ничего и нет

session_payload
5933d10e770650b4755fff2d194dde0f76ddecdc+M0OSWRbMT5EMO15rbZdp0THJFVg9yCWupVv/LfXa0zFbgy1ypR2nk0PjT0t6L23fudUVrTAGA4Mln9bP4xMFEUP8pbM2jGvAKccVVFMqXQQPolyduQwaq3z9QflYZ2Z5ztKpqcZ3FM0onFoIF3onnamyvvyxTM77j+JAJlgeMmAGpG3SVeQ4pQbupWWnUQp0E9EI4vmLgLxQmBwHEG/hy2J5lDSGgR6w4ORE8FWdBWNII2i9veRVl3hCNqQQkzAjnYG+HN1O2zasEu/9/B9B8hxof4Fr3BQjbo2xFH2fVcT6rFRfOWFeE5OTxnkTVg6xrUmARrfkL+5P+rdvkDugQzXeL9pMqD5Rz5e6gPtfzHV7901P4PRvgkPV3Q3a+P/u9fAxMMVeXsoA23AKpXpRKwkcsLFh78CNwRqk9wuvAfPQIgPFR7EthatvNakmCUo2AupU/13gbvQJTtyKao38ldvmD76wWMdKnMXsIL0aDsYBq9S0TEDUZSDs45l8aCZeZY9N/iBwCkUEenSYSAXE0p20FFGXbjhOS7naE+jd0fE=

laravel_session
fec14f75f39a2e61a0d1129b2b9de2347a971e47+unXbqnLVwFEoXA9wZTm4cxJDe0Wi1jo6ExD0iyyy

Ключик из конфига
'key' => '53sOegYpEFj1Hov8HgtFbkw6AOTM2UMr',

Кстати не знаю что за session_payload но он у меня меняется каждые 5-10 секунд примерно. То есть вот показывается эта страница с ошибкой, я ничего не делаю, а значение меняется

#9 Laravel 3 » Decryption error. Padding is invalid. » 03.06.2013 18:49:50

la2ha
Ответов: 6

В общем после попытки залогиниться, и не правильно введенных данных выскакиевает вот такая штука иногда  и не убирается до тех пор пока не почищу куки, на всех страницах отображается. Чет не могу понять что за нафиг?

#10 Laravel 3 » *решено* Сложный join на Fluent » 28.02.2013 16:59:12

la2ha
Ответов: 1

Есть запрос

sqlSELECT a.*
FROM autos a
LEFT JOIN bids b ON (b.auto_id = a.id AND b.user_id = 5)
WHERE b.id IS NULL

Надо его как, то написать не с использованием Fluent.
Возникли проблемы с написанием left_join, не хочет он принимать то что я пишу, Mysql ошибку выдает.

UPD;
Запрос по ходу должен так выглядеть. Но результат не тот почему-то

PHP
$query->left_join('cms_autos_bids', function ($join) {
                
$join->on('cms_autos.id''=''cms_autos_bids.auto_id');
                
$join->on('cms_autos_bids.user_id''='DB::raw(5));
            });
            
$query->where_null('cms_autos_bids.id');

UPD2;
В общем выяснил что запрос правильно написан(тот что сверху), единственное что скобки он не ставит для этого,

sql(b.auto_id = a.id AND b.user_id = 5)

Сейчас они вроде не нужны особо, но все же интересно как их можно поставить(или они никогда не могут пригодиться? А то я с SQL не особо дружу).
А результат не тот был потому что я случайно ошибся с тем какой результат должен быть.

#11 Laravel 3 » Странно себя ведет модель » 19.02.2013 05:21:33

la2ha
Ответов: 1

Код контроллера

PHP
$this->layout->content View::make('autos::admin.bids_index')
            ->
with('bids'Bids::get_bids());

Код модели

PHP
 public static function get_bids()
    {

        return 
self::select(array(
            
'cms_autos_bids.*',
            
'users.email',
            
'autos.name as auto_name',
        ))
            ->
join('auth_users as users''cms_autos_bids.user_id''=''users.id')
            ->
join('cms_autos as autos''cms_autos_bids.auto_id''=''autos.id')
            ->
order_by('cms_autos_bids.created_at''desc')
            ->
paginate(20);
    }

    public static function 
get_bid($id)
    {
        return 
self::select(array(
            
'cms_autos_bids.*',
            
'autos.name as auto_name',
        ))
            ->
join('cms_autos as autos''cms_autos_bids.auto_id''=''autos.id')
            ->
order_by('cms_autos_bids.created_at''desc')
            ->
where('cms_autos_bids.id','=',$id)
            ->
first();
    }

Код представления

PHP
<?foreach ($bids->results as $bid) {
        ?>
    <tr>
        <td><?=$bid->id?></td>
        <td><?=$bid->type?></td>
        <td><?=HTML::link('admin/bids/edit/' $bid->id'id: ' $bid->auto_id ' | ' $bid->auto_name)?></td>
        <td><?=$bid->bid?>$</td>
        <td><?=$bid->status?></td>
        <td><?=$bid->created_at?></td>
        <td><?=$bid->email?></td>
    </tr>
        <? }?>
    </tbody>

Вывод в бразуер:
Missing argument 1 for Bids::get_bid(),

Казалось бы, при чем тут get_bid??
Я его нигде не вызываю.
Но поиск того де она вызывается привел меня к строке.

PHP
<td><?=$bid->bid?>$</td>

Именно она вызывает get_bid, я было подумал что эта фишка такая, типа оно сначала смотрит есть ли в модели метод get_bid, а потому уже в $bid, но потом попробовал передать какой-нибудь параметр вот так $bid->bid(3), но оно говорит что нет у меня такого метода, в общем что это за нафиг такой, пришлось метод переименовывать.

#12 Re: Laravel 4 » Первая бета Laravel 4 » 15.02.2013 21:19:31

И еще интересует вопрос на счет поддержки 3 версии. Ведь сейчас есть dev ветка над которой ведется работа и можно предположить что она останется.

#13 Re: Laravel 4 » Первая бета Laravel 4 » 15.02.2013 21:17:08

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

PHP
'autos'       => array(
        
'auto'     => true,
        
'location' => '../modules/autos',
    ),
    
'auth'        => array(
        
'auto'     => true,
        
'location' => '../modules/auth',
    ),
    
'chat'        => array(
        
'location' => '../modules/chat',
    ),
    
'money'       => array(
        
'location' => '../modules/money',
    ),

#14 Re: Laravel 3 » Нормальные имена при валидации. Как? » 21.01.2013 15:10:32

Нашел баг по идее,

PHP
 'password' => 'required',
 
'confirm_password' => 'required|same:password',

для password есть перевод в языковом файле и он отображается если поле не запонено, а вот когда подтверждение пароля не такое-же как пароль выдает ошибку «Значение “Повторите пароль” должно совпадать с password.» у меня щас это единственная связка в форме, поэтому я могу задать Нормальное сообщение для ошибки переписав в $messages сообщение для same но в случае если у меня будет несколько таких, этот вариант уже не прокатит, и придется регистрировать собственные правила валидации для каждого случая и прописывать ошибки для них?

UPD: что то не работает разметка о которой тут написано [url]http://laravel.ru/forum/viewtopic.php?id=15[/url]

#15 Re: Laravel 3 » Нормальные имена при валидации. Как? » 14.01.2013 18:14:11

Спасибо. Гляну. И про модель действительно хорошая идея, что-то я не подумал. Призы - это я так. Увидел на каком-то форуме в качестве приза при наборе определенного количества чего-то регистрацию в Яндекс Каталоге. И еще кучу разных штук. Ну и ляпнул)

#16 Re: Laravel 3 » Нормальные имена при валидации. Как? » 14.01.2013 02:56:41

Ну и еще вопрос по валидации, есть ли тут возможность вызывать функции которые возвращают не только true|false а которые бы обрабатывали поля как-ниудь. Например. Поле ввода адреса сайта. Оно проверяет есть ли там http:// и если нет то добавляет. А потом я использую что нибудь типа.
$url=$validation->get_value('url');
И у меня там уже измененое значение. Ну или чтоб оно сами $inputs редактировало.

P.S. Когда уже призы будут самым активным участникам форума)??

#17 Re: Laravel 3 » Нормальные имена при валидации. Как? » 14.01.2013 02:49:04

@la2ha Задать нормальные имена при валидации ты можешь в языковом файле validation.php того языка, который используешь.
Там снизу будет что то типа этого

/*
	|--------------------------------------------------------------------------
	| Validation Attributes
	|--------------------------------------------------------------------------
	|
	| The following language lines are used to swap attribute place-holders
	| with something more reader friendly such as "E-Mail Address" instead
	| of "email". Your users will thank you.
	|
	| The Validator class will automatically search this array of lines it
	| is attempting to replace the :attribute place-holder in messages.
	| It's pretty slick. We think you'll like it.
	|
	*/

	'attributes' => array(
        'images'=>'"Картинки"',
        'title'=>'"Заголовок"'
    ),

И вот в attributes пиши свои name и переводы для них.
Хоят конечно не очень сделано, было бы хорошо если бы можно было писать еще и так

$input = array(
		'user_email' => $user_email,
		'user_password' => $user_password
);
$rules = array(
		'user_email' => 'required|email|exists:users',
		'user_password' => 'required'
);
$friendly_names = array(
		'user_email' => 'Email Address',
		'user_password' => 'Password'
);

$validation = Validator::make( $input, $rules, null, $friendly_names );

#18 Laravel 3 » Нормальные имена при валидации. Как? » 14.01.2013 02:37:59

la2ha
Ответов: 8

Дошел я до валидации форм, и тут меня ждал неприятный сюрприз.
Есть поле у которого label = 'Заголовок'
а name для него title.
Так вот когда я валидирую и поле не заполнено например оно мне выдает ошибку.
"Поле title обязательно для заполнения."
А мне этот title нафиг не нужен в сообщении об ошибке, я хочу чтоб было написано то что я хочу. В этом случае "заголовок". В CodeIgniter задавался параметр name, потом писал по русски то что хочу 'заголовок' например, а потом правила валидации. Тут я такого как-то не заметил. Так как мне задавать нормальные человеческие имена?

#19 Re: Laravel 3 » Вопрос по HMVC » 13.01.2013 21:46:13

Печально будет если laravel 4, не будет позволять это все делать, на сколько я понял там бандлов не будет, а библиотеки будут устанавливаться через Composer. Тоже удобно конечно. Но мне как любителю HMVC это не по душе, хотя я думаю гибкость останется и все же получится раскидать это все по отдельным папкам.

#20 Re: Laravel 3 » Вопрос по HMVC » 13.01.2013 21:43:03

OrlandoST на tutsplus.com вроде видел инфу по laravel 4, и там видео даже было как устанавливать, погугли.
Тот бандл уже не актуален по ходу, все что он делает, это позволяет вызывать контроллер из контролера, но это можно делать и средствами laravel. ВОзможно он был написан для ранних версий, где этого не было.

#21 Re: Laravel 3 » Передать переменную в роут » 12.01.2013 23:44:27

Все оказалось очень просто, PHP 5.3 для меня новая штука, так вот и мучаюсь. А тут подсказали на англоязычном форуме. Полез в документацию почитать. И оказалось что не дочитал до этого один абзац.

$data='test';
Route::any($url, function ($route = array()) use ($data) {                
    echo $data;
});  

Как тут сделать подсветку php?

#22 Re: Laravel 3 » Передать переменную в роут » 12.01.2013 13:29:12

Спасибо, с ходу так не понял особо как это сделать, но нашел кажется то как я могу переделать роуты под свои нужды, но возник вопрос как их так расширить, чтоб заменить добавить функций или заменить на свои.
Нужно отредактировать 
/laravel/routing/route.php
/laravel/routing/router.php
Почитал еще раз как ты рекомендовал класс базы данных расшинить и все равно не въехал. Суть то понимаю что надо сделать класс который насделует этот класс. Но как мне сделать чтоб потом когда вызывается Route->call() где-то оно использовало мой код, а не laravel.

#23 Laravel 3 » Передать переменную в роут » 12.01.2013 12:17:05

la2ha
Ответов: 5

Столкнулся с задачей передачи переменной в замыкание.
Т.е.

$data='test';
Route::any($url, function ($route = array()) {                
    echo $data;
});                                                           

Но так естественно не получится т.к. в замыкании переменной $data не видно. Глобальные переменные использовать очень не хочется. По идее прийдется переписывать Route::any точнее написать свою

$data='test';
Route::my_any($url,$data, function ($data,$route = array()) {                
    echo $data;
});

или есть варианты проще?

UPD:
Начал искать, как передать ее расширив роутер, но что то как то остановился на регистрации роута. Там он просто регистрируется, т.е. оттуда я могу сохранить свою $data, а вот передать ее в свой callback что-то не могу найти как.

UPD:
Попробовал с глобальной переменной, не получилось. У меня там цикл в реальном коде идет. используется последнее присвоенное значение. А сделать уникальные ключи я не могу, т.к. вызвать по уникальным ключам не получится, я ж не могу их туда передать.

#24 Re: Laravel 3 » Вопрос по HMVC » 12.01.2013 10:47:03

Так я же и говорю что в пакеты всовывать не хочу, поэтому и создал эту тему, вариант location подошел отлично, даже лучше чем в CodeIgniter можно все настраивать, там вложенные модули нельзя было делать, а тут как хочу так и кручу вообще огонь). Кстати только что увидел что папка application это тоже пакет, который расположен в другом месте просто, вроде.

public static function detect($bundle = DEFAULT_BUNDLE, $directory = null)

Где DEFAULT_BUNDLE и есть application

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