Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
А, нет. Не разобрался.
если я в контроллере ставлю
$news = NewsModel::orderBy('date','desc')->paginate(20);
echo $news->title
, то он выводит пусто. Этот "неявный" геттер не срабатывает.
Кажется, более-менее разобрался. Тогда как мне решить мою задачу и изменить свойство title новости {{$news->title}} перед тем, как его отправить во view?
Он не вызывается ни в контроллере, ни во view. Мы просто обращаемся к {{$news->title}} и он выводится. Геттеров нет. Вообще никаких предобработок нет. Во вью передаем просто
return view('frontend.public.news', compact('news'));
Но каким образом тогда работает {{$news->title}} в модели? title вообще не объявлена у объекта $news.
Всем привет.
Копаю такой код контроллера:
$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] =>
)
Всем привет. В БД лежит такая строчка:
'hellow
word'
Если я ее вывожу (шаблонизатор blade) во view (Вот так - {{ t }}), то браузер все пишет в одну строчку и убирает пробелы (что логично для html). Если ли какая-нибудь конструкция, которая сохранит пробелы и переводы строк?
Всем привет. У меня есть две таблицы:
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?
Нет. На "стандартный" плагин выходят обновления и релизы, да и лазить в ядре не лучший вариант. Но покопавшись в этом самом ядре я нашел решение: есть недокументированный параметр 'pattern', его значение - регулярное выражение, я его установил в image.php и все заработало. Кому интересно, вот:
'pattern' => '^(.*)\-image\(((?:\_x235|120x160\-crop))\)\.(jpg|jpeg|png|gif|JPG|JPEG|PNG|GIF)$',
Это означает, что обрабатывать только названия в конце ....-image(_x235) и ......-image(120x160-crop). Все работает четко, вопросов нет!
В этой теме я нашел ответ на вопрос, которые породил следующий. Как при обращении в 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 ограничивать тупо не хочу, хотя это крайний вариант)
Нашел, вот, чем создается. Это у меня подключено, да )
https://github.com/Folkloreatelier/laravel-image
Ну, я не уверен, что кто-то будет копаться в коде. Но я уже к утру разобрался в идее. Миниатюра создается автоматически (о как) при обращении:
http://localhost/uploads/11-image(_x100).jpg
http://localhost/uploads/11-image(_x200).jpg
http://localhost/uploads/11-image(_x300).jpg
Картинка отображается, миниатюра создается на диске при первом обращении. Вот как - не знаю.
Это первое, что я сделал. Там создается обычный вариант. Более того, в этом методе я перед return добавил exit;, так вот оказалось, что миниатюра не создалась. То есть она создается где-то в другом месте.
Всем привет. При загрузке изображения код создает еще и миниатюру. Копаю код загрузки изображений и не могу понять, как он создает эту миниатюру. В 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 - это, может быть он, но я не пойму, в какой момент он срабатывает.
Заранее спасибо.
Всем привет.
Установлен laravel 5, October cms и используется плагин rainlab.users для паролей. Мне нужно массово изменить пароли пользователей, они у меня в массиве в прямом виде. Какую функцию мне нужно применить для update? Лазил по коду, не разобрался (
Да, по-хорошему надо так. Остается неясным, почему для change() метода нужно подключать сторонний класс. Это должны быть базовая функция, иначе будут проблемы с переносом. Но это лирика, можно не отвечать...
Всем привет
Как изменить (alter) таблицу БД в laravel? Я, конечно, это могу сделать напрямую в БД, но вот вопрос - а можно ли миграцией? посмотрел классс, не нашел что-то подходящее. Интересуют варианты: добавить, изменить (тип данных или длину) удалять и переименовать колонку какой-то таблицы. Есть для этого команды?
Всем привет.
В app.php включил DebugBar:
Barryvdh\Debugbar\ServiceProvider::class,
Как можно сделать так, чтобы он был включен только при открытии сайта с определенного IP? Пока вижу только как:
if( $_SERVER['REMOTE_ADDR'] != '1.2.3.4') {
// Тут большой массив return
} else {
// Тут другой большой массив return с включенным debug
}
Но это очень громоздко, повторять столько параметров. Есть более изящное решение?
Если поставить свежий laravel, в роутинге будет такой маршрут, с функцией. Причем, только он, авторизация, как пример, убрана. Если поставить такой:
php composer.phar create-project laravel/laravel=5.0.* --prefer-dist
то будет еще старый метод.
И еще в новом (5.2.*) laravel:
php artisan make:controller TestController
Создает совсем пустой контроллер, уже не подготавливает "стандартные" методы типа "index", "destroy" и пр. А просто создает файл и класс, даже без индексного. Не думаю, что это критично, но все же решил поделиться.
И да, старый метод все-таки работает на новом, я прошу прощения.
Спасибо за ответы. В документации не написано, что в роутинге такие изменения, видимо, сочли, что это очевидно будет по примерам. По второму ответу - не действуют. Иначе бы я не написал )
Всем привет. Несколько дней назад поставил текущую версию laravel (5.0.16), где в routes.php маршруты прописывались, как всегда:
Route::get('/', 'TestController@index');
Только что поставил еще раз laravel, на этот раз пришла версия 5.2.20 и там маршруты прописываются так:
Route::get('/', function () {
});
По-старому выдает ошибку, что так уже нельзя. У меня два вопроса:
1. Почему так кардинально меняют базовые подходы, не сохраняя работоспособность старых?
2. Как быть с работоспособностью кода предыдущих версий, когда обновляем laravel?
Спасибо.
Страницы 1