Laravel по-русски

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

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

#1 Re: Laravel 5.x » Передача модели во view » 16.11.2016 21:39:01

А, нет. Не разобрался.
если я в контроллере ставлю

$news = NewsModel::orderBy('date','desc')->paginate(20);
echo $news->title

, то он выводит пусто. Этот "неявный" геттер не срабатывает.

#2 Re: Laravel 5.x » Передача модели во view » 16.11.2016 21:35:47

Кажется, более-менее разобрался. Тогда как мне решить мою задачу и изменить свойство title новости {{$news->title}} перед тем, как его отправить во view?

#3 Re: Laravel 5.x » Передача модели во view » 16.11.2016 20:18:15

Он не вызывается ни в контроллере, ни во view. Мы просто обращаемся к {{$news->title}} и он выводится. Геттеров нет. Вообще никаких предобработок нет. Во вью передаем просто

return view('frontend.public.news', compact('news'));

#4 Re: Laravel 5.x » Передача модели во view » 16.11.2016 19:34:16

Но каким образом тогда работает {{$news->title}} в модели? title вообще не объявлена у объекта $news.

#5 Laravel 5.x » Передача модели во view » 16.11.2016 18:55:05

L_E_L_I_K
Ответов: 9

Всем привет.

Копаю такой код контроллера:

$news = NewsModel::find($id);
return view('frontend.public.news', compact('news'));

В самой view обращение идет сразу к {{$news->id}}, {{$news->title}} и так далее. Но, если посмотреть print_r($news); в контроллере, то увидим многоуровневую структуру объектов (см в конце). Вот такие вопросы:

1. Почему не работает print_r($news->attributes);? Ведь attributes - это свойство объекта $news и является массивом (см в конце)
2. Каким образом view понимает, что {{$new->title}} - это именно значение title? Ведь это свойство вложенное и, по идее, до него надо добираться, как {{$new->print_r($news->attributes["title"]);}}, если верить структуре (см в конце)

А вот и то, куда я ссылаюсь. Это то, что выдает print_r($news);

App\Models\NewsModel Object
(
    [primaryKey:protected] => id
    [table:protected] => news
    [timestamps] => 
    [fillable:protected] => Array
        (
            [0] => name
            [1] => text
            [2] => foto
            [3] => date
            [4] => display_photo
        )

    [connection:protected] => 
    [keyType:protected] => int
    [perPage:protected] => 15
    [incrementing] => 1
    [attributes:protected] => Array
        (
            [name] => День семьи, любви и верности 
            [text] => <p>В этот день все жители Республики....</p>
            [foto] => 
            [date] => 2016-07-08 00:00:00
            [id] => 170
            [display_photo] => 
        )

    [original:protected] => Array
        (
            [name] => День семьи, любви и верности 
            [text] => <p>В этот день все жители Республики проходили квест "Собери букет", отгадывая загадки, находили элементы флористического декора для оформления своих праздничных букетов. Вечером, каждый город вручал свои букеты</p>
            [foto] => 
            [date] => 2016-07-08 00:00:00
            [id] => 170
            [display_photo] => 
        )

    [relations:protected] => Array
        (
        )

    [hidden:protected] => Array
        (
        )

    [visible:protected] => Array
        (
        )

    [appends:protected] => Array
        (
        )

    [guarded:protected] => Array
        (
            [0] => *
        )

    [dates:protected] => Array
        (
        )

    [dateFormat:protected] => 
    [casts:protected] => Array
        (
        )

    [touches:protected] => Array
        (
        )

    [observables:protected] => Array
        (
        )

    [with:protected] => Array
        (
        )

    [morphClass:protected] => 
    [exists] => 1
    [wasRecentlyCreated] => 
)

#6 Laravel 5.x » Что за конструкция with? » 06.10.2016 01:12:37

L_E_L_I_K
Ответов: 2

Всем привет. Встретил такую конструкцию

PHP
$product Product::with('category''photos')->where('id'$product_id)->first();

Что делает конструкция with? В запросах поисковиков laravel query builder в статьях не нашел такой конструкции.

Заранее благодарен за ответы и ссылки.

#7 Laravel 5.x » Перевод строки » 24.09.2016 14:03:18

L_E_L_I_K
Ответов: 3

Всем привет. В БД лежит такая строчка:

'hellow
    word'

Если я ее вывожу (шаблонизатор blade) во view (Вот так - {{ t }}), то браузер все пишет в одну строчку и убирает пробелы (что логично для html). Если ли какая-нибудь конструкция, которая сохранит пробелы и переводы строк?

#8 Laravel 5.x » Помогите с моделькой » 18.08.2016 22:54:23

L_E_L_I_K
Ответов: 3

Всем привет. У меня есть две таблицы:

   users (id int, login varchar(20))
   permitions (user_id int, permition_id int)

Все свел до атомарности. В модели users у меня прописано:

    protected $table = "users";
    protected $fillable = ['login'];

Все. Мне нужна какая-то конструкция, которая бы еще позволяла получать набор доступов. Ну, к примеру, в контроллере я обращаюсь:

$users = Users::where('login','admin')->get();

И у $users было бы свойство типа $user->permitions; Массив это или еще что, не знаю, но, чтобы в вьюхе я имел доступ к нему и мог бы переберать foreach - ем. У пользователя может быть несколько доступов, может быть один, может не быть.

Умеет такое laravel?

#9 Re: Laravel 5.x » folklore\image - ограничить размеры » 25.07.2016 23:36:22

Нет. На "стандартный" плагин выходят обновления и релизы, да и лазить в ядре не лучший вариант. Но покопавшись в этом самом ядре я нашел решение: есть недокументированный параметр 'pattern', его значение - регулярное выражение, я его установил в image.php и все заработало. Кому интересно, вот:
        'pattern' => '^(.*)\-image\(((?:\_x235|120x160\-crop))\)\.(jpg|jpeg|png|gif|JPG|JPEG|PNG|GIF)$',
Это означает, что обрабатывать только названия в конце ....-image(_x235) и ......-image(120x160-crop). Все работает четко, вопросов нет!

#10 Re: Laravel 5.x » Route::post('...')->name('...'); » 24.07.2016 12:33:46

С этим вопрос решен. Следующий я уже смотрю дальше тут
Всем спасибо за участие!

#11 Laravel 5.x » folklore\image - ограничить размеры » 24.07.2016 12:32:23

L_E_L_I_K
Ответов: 2

В этой теме я нашел ответ на вопрос, которые породил следующий. Как при обращении в folklore\image ораничить обращение только для одного размера. Я сейчас сделал несколько обращений

http://localhost/uploads/11-image(_x501).jpg
http://localhost/uploads/11-image(_x601).jpg
http://localhost/uploads/11-image(_x700).jpg
http://localhost/uploads/11-image(200x300-crop).jpg

И при каждом создаете миниатюра на диске нужного размера. Это очень круто, но я рискую завалить свой сайт, когда будут обращаться в тысячам варинатов и заполнять диск. Мне нужно только:

http://localhost/uploads/11-image(_x90).jpg
http://localhost/uploads/11-image(200x300-crop).jpg

Все остальные отметать. Как это сделать максимально бескостыльно (в route ограничивать тупо не хочу, хотя это крайний вариант)

#13 Re: Laravel 5.x » Route::post('...')->name('...'); » 24.07.2016 12:07:30

Ну, я не уверен, что кто-то будет копаться в коде. Но я уже к утру разобрался в идее. Миниатюра создается автоматически (о как) при обращении:
http://localhost/uploads/11-image(_x100).jpg
http://localhost/uploads/11-image(_x200).jpg
http://localhost/uploads/11-image(_x300).jpg
Картинка отображается, миниатюра создается на диске при первом обращении. Вот как - не знаю.

#14 Re: Laravel 5.x » Route::post('...')->name('...'); » 24.07.2016 11:13:57

Это первое, что я сделал. Там создается обычный вариант. Более того, в этом методе я перед return добавил exit;, так вот оказалось, что миниатюра не создалась. То есть она создается где-то в другом месте.

#15 Laravel 5.x » Route::post('...')->name('...'); » 24.07.2016 03:25:34

L_E_L_I_K
Ответов: 8

Всем привет. При загрузке изображения код создает еще и миниатюру. Копаю код загрузки изображений и не  могу понять, как он создает эту миниатюру. В route.php нашел строчку:

Route::group(['middleware' => ['web']], function () {
    //Photo
    Route::post('api/photo/upload', 'PhotoController@upload')->name('photo.upload');
    Route::post('api/photo/delete', 'PhotoController@delete')->name('photo.delete');
});

Полагаю, что ->name('photo.upload'); - это, возможно, оно. Что это за конструкция и может ли именно она создавать миниатюру? Мне сказали, что есть класс Folklore\Image - это, может быть он, но я не пойму, в какой момент он срабатывает.

Заранее спасибо.

#16 Laravel 5.x » Изменить массово пароли » 27.03.2016 12:32:10

L_E_L_I_K
Ответов: 1

Всем привет.

Установлен laravel 5, October cms и используется плагин rainlab.users для паролей. Мне нужно массово изменить пароли пользователей, они у меня в массиве в прямом виде. Какую функцию мне нужно применить для update? Лазил по коду, не разобрался (

#17 Re: Laravel 5.x » Миграция. Изменить таблицу » 26.02.2016 11:47:29

Да, по-хорошему надо так. Остается неясным, почему для change() метода нужно подключать сторонний класс. Это должны быть базовая функция, иначе будут проблемы с переносом. Но это лирика, можно не отвечать...

#18 Re: Laravel 5.x » Миграция. Изменить таблицу » 25.02.2016 16:18:10

Изменить нашел. Change(). А вот остальное предлагают ручками вот тут.

Неужели только так?

#19 Laravel 5.x » Миграция. Изменить таблицу » 25.02.2016 16:12:45

L_E_L_I_K
Ответов: 4

Всем привет

Как изменить (alter) таблицу БД в laravel? Я, конечно, это могу сделать напрямую в БД, но вот вопрос - а можно ли миграцией? посмотрел классс, не нашел что-то подходящее. Интересуют варианты: добавить, изменить (тип данных или длину) удалять и переименовать колонку какой-то таблицы. Есть для этого команды?

#20 Laravel 5.x » Включить PHP Debug Bar только для определенных IP » 22.02.2016 19:04:41

L_E_L_I_K
Ответов: 1

Всем привет.

В app.php включил DebugBar:

Barryvdh\Debugbar\ServiceProvider::class,

Как можно сделать так, чтобы он был включен только при открытии сайта с определенного IP? Пока вижу только как:

if( $_SERVER['REMOTE_ADDR'] != '1.2.3.4') {
// Тут большой массив return
} else {
// Тут другой большой массив return с включенным debug
}

Но это очень громоздко, повторять столько параметров. Есть более изящное решение?

#21 Re: Laravel 5.x » Новый формат маршрутов в laravel » 22.02.2016 02:00:43

Если поставить свежий laravel, в роутинге будет такой маршрут, с функцией. Причем, только он, авторизация, как пример, убрана. Если поставить такой:

php composer.phar create-project laravel/laravel=5.0.* --prefer-dist

то будет еще старый метод.

И еще в новом (5.2.*) laravel:

php artisan make:controller TestController

Создает совсем пустой контроллер, уже не подготавливает "стандартные" методы типа "index", "destroy" и пр. А просто создает файл и класс, даже без индексного. Не думаю, что это критично, но все же решил поделиться.

И да, старый метод все-таки работает на новом, я прошу прощения.

#22 Re: Laravel 5.x » Новый формат маршрутов в laravel » 21.02.2016 19:45:38

Спасибо за ответы. В документации не написано, что в роутинге такие изменения, видимо, сочли, что это очевидно будет по примерам. По второму ответу - не действуют. Иначе бы я не написал )

#23 Laravel 5.x » Новый формат маршрутов в laravel » 21.02.2016 16:09:45

L_E_L_I_K
Ответов: 6

Всем привет. Несколько дней назад поставил текущую версию laravel (5.0.16), где в routes.php маршруты прописывались, как всегда:

Route::get('/', 'TestController@index');

Только что поставил еще раз laravel, на этот раз пришла версия 5.2.20 и там маршруты прописываются так:

Route::get('/', function () {
});

По-старому выдает ошибку, что так уже нельзя. У меня два вопроса:

1. Почему так кардинально меняют базовые подходы, не сохраняя работоспособность старых?
2. Как быть с работоспособностью кода предыдущих версий, когда обновляем laravel?

Спасибо.

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