Laravel по-русски

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

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

#1 Re: Laravel 5.x » Возможно ли реализовать многосайтовость на Laravel? » 11.03.2015 13:41:25

Проще всего сделать папки для каждого сайта, а папку vendor внутри каждого сайта формировать не композером, а ставить симлинк на единую папку, которую где-нить держать.

#2 Re: Laravel 5.x » Class 'User' not found » 12.02.2015 22:35:43

Можно создать папку app/Models , скопировать туда модели из L4 и прописать эту папку в classload в composer.json

	"autoload": {
		"classmap": [
			"database",
                        "app/Models"
		],

В руководстве по обновлению с L4 до L5 написано же.

Так же пожно поступать с остальными классами, в которых лень неймспейс прописывать.

#3 Re: Laravel 5.x » Настройка Laravel 5 » 10.02.2015 11:47:59

В Кохане как раз было сделано неграмотно. Правильно из соображений безопасности - это делать document root несовпадающим с корневой папкой фреймворка. Привыкайте.

#4 Re: Laravel 4 » Фасады... что еще за зверь? » 01.01.2015 09:52:57

ServiceWrapper - это для примера приведено. В данном случае имеется в виду, что надо указывать полные пути до классов.

Фасады сделаны главным образом для новичков, которые фреймворк видят в первый раз и при работе копипастят код из доки. Если  каждый раз писать, что надо в аргумент конструктора передать нужный класс, сделать переменную в классе контроллера, и обращаться к ней из метода контроллера - человек закроет страницу и вернется на codeigniter. А если написать что-то типа "используйте Input::get()" - продолжит читать. Из-за дружелюбия к новичкам Laravel и приобрал такую популярность.

#5 Re: Laravel 4 » Не работает Auth::login() » 01.12.2014 19:45:02

Сессию пробовал менять с file на например database или redis, в config/session.php ? Папка app/storage и подпапки в ней открыты для записи ?

#6 Re: Laravel 4 » MyModel::update($id, $arr) » 27.11.2014 17:35:53

$user->fill(['email'=>"john@foo.com", 'other'=>"..."]);
Только надо чтобы эти поля были в $fillable модели.

#7 Re: Laravel 4 » Как получить данные при любом роуте. » 24.11.2014 18:32:45

Где объявить - в своем сервис-провайдере, конструкторе BaseController, от которого наследуются остальные контроллеры, или в app/start/global.php.
Как передать во все вьюхи - View::share('menu', $menu);

#8 Re: Laravel 4 » Где хранить собственные классы и функции? » 22.11.2014 20:58:20

Вкратце - хранить в своей неймспейс-папке, обращаться через внедрение при помощи Dependency Injection или через фасады.

Поподробнее.

Создаете папку app/Acme (Acme обозначает "произвольное имя") и говорите фреймворку, что в ней будете держать классы согласно стандарта, например, psr-0, добавляя в composer.json следующее:

"autoload": {
		"classmap": [
			...
		],
		"psr-0": {
			"Acme": "app/"
		}
	},

Пишете свои классы в этой папке, прописывая всем им неймспейсы, совпадающие, в данном случае, с файловым путём. Рекомендуется прочитать про паттерны программирования (или хотя бы погуглить что такое репозитории), хорошим стартом будет купить месячную подписку на http://laracasts.com

Используете их в других классах, указывая их в качестве аргументов к конструктору:

<?php

use Acme\Post\PostRepository;

class PostController extends BaseController {

	private $postRepository;

	public function __construct(PostRepository $postRepository)
	{
		$this->postRepository = $postRepo;
	}

	public function show($slug)
	{
		$post = $this->postRepository->getBySlug($slug);
		return View::make("post/view_post", compact("post"));
	}

}

Так как почти все свои классы Laravel достает из IoC-контейнера, на вход конструктора контроллера он все подаст что надо.

Можно вместо DI юзать фасады, и в примере выше в show() писать $post = PostRepository::getBySlug($slug); , но фасады в частности плохи тем, что у вас не будет работать автодополнение в IDE. Как делать фасады, исчерпывающе написано в документации - http://laravel.com/docs/4.2/facades .

Если функции и классы используются во многих ваших проектах, то можно выделить их в пакет и подтягивать их композером с гитхаба как и все остальные пакеты - http://laravel.com/docs/4.2/packages .

#9 Re: Laravel 4 » БД уведомления » 21.11.2014 11:15:12

Задача делится на две части - фронтэндовую (как в браузере получать от бэкенда сообщения и отображать уведомления) и бэкендовую (как понимать, что событие настало). Если вы хотите, чтобы все происходило в реалтайме, то в рамках первой задачи вам надо определиться, как именно реализовать в джаваскрипте - периодически пинговать бэкенд в setInterval или поднимать вебсокет-соединение. Во втором варианте на в бэкенд-части вам придется поднимать демона, держащего вебсокет-соединения, пакет brainsocket.brainboxmedia()ca поможет в этом.

#10 Re: Laravel 5.x » Laravel 5 в продакшн » 21.11.2014 10:46:20

Laravel5 использовать нельзя - он в альфе, даже не в бете. Баги там вряд ли есть, просто он активно переписывается и дописывается. В итоге к релизу L5 у вас будет приложение на непонятном фреймворке, и придется апдейтиться до релизного L5. Так какой смысл рисковать, пишите на 4.2.

#11 Re: Laravel 4 » Server Error » 17.11.2014 23:29:28

Там три разных метода описано, вы какой использовали ?

#12 Re: Laravel 4 » Количество авторизованных пользователей » 17.11.2014 19:24:58

Держать сессии в БД (http://laravel.com/docs/4.2/session#database-sessions) и считать там количество строк со значением last_activity больше некоторого (час например, оно там в секундах).

#13 Re: Laravel 4 » Связи » 13.11.2014 19:41:02

Вы неправильно называете связи. Комментарии надо называть comments() , а контакты - contacts() - их же Many, несколько, и возвращается коллекция объектов, а не один объект. На работу это не влияет, но на понимание кода - влияет сильно. Вот вы, например, попались на эту семантическую ловушку в самом начале, когда запросили сие:

$posts = Post::all();
foreach($posts as $post) {
echo $post->comment->id;
}

$post->comment - это не один объект, у которого есть id, это коллекция. Если бы оно называлось comments , вы бы это заметили, и сделали по нему foreach().

По теме - все банально.

$company = Company::find($id); // ну или, если вы тут запрашиваете несколько компаний, добавьте with("contacts") чтобы запросов в базу было меньше

foreach($company->contacts as $contact){

echo $contact->name;
echo $contact->telephone;

}

#14 Re: Laravel 4 » Где держать бизнес-логику? » 13.11.2014 14:14:10

Еще я почти в каждом подобном обсуждении привожу ссылку на мегаполезную, с моей точки зрения, ссылку про то, что на самом деле представляют собой модели в MVC - http://habrahabr.ru/post/175465/ (TL&DR - они представляют собой собственно ваше php-приложение целиком, а не только общение с бд.)

#15 Re: Laravel 4 » Где держать бизнес-логику? » 13.11.2014 09:51:26

В Laravel все то же самое, это справедливо для всех фреймворков. Приложение нужно писать в своих неймспейс-классах, каждый класс должен иметь по возможности узкий функционал. Модели, кстати, это те же классы, вообще весь код писать там вместо контроллеров тоже неразумно.

#16 Re: Laravel 4 » Несколько проектов на локальной машине » 07.11.2014 11:09:56

Немного непонятно в чем проблема. Сделайте несколько VirtualHost директив:

<VirtualHost *:80>
ServerName "site1.app"
DocumentRoot "D:/Dropbox/work/site1/public/"
</VirtualHost>

<VirtualHost *:80>
ServerName "site2.dev"
DocumentRoot "D:/Dropbox/work/site2/public/"
</VirtualHost>

<VirtualHost *:80>
ServerName "site3.app"
DocumentRoot "D:/Dropbox/work/site3.app/public/"
</VirtualHost>

И соответственно в hosts пропишите

127.0.0.1 site1.app
127.0.0.1 site2.dev
127.0.0.1 site3.app

#17 Re: Laravel 4 » Имплементация Repository паттерна в Laravel » 05.11.2014 09:54:46

По вопросам в конце.

1. Можно и передавать модель в контроллер, но мне не кажется, что это какая-то особенная удобность. От подобной магии, которая экономит пару строчек кода, но накладывает определенные ограничения, я стараюсь сторониться.
2. Нет, так как для хранения состояния у нас есть стандартные модели. Вообще, у нас для абстракции от БД у нас есть паттерн ActiveRecord и поэтому имплементировать Repository прям в точном виде и юзать только его, мне кажется, излишним. Репозитории, конечно, удобны и нужны для аггломераци методов получения данных из модели/моделей и методов операций с сущностями, но забывать из-за этого, что у нас есть потрясающий Eloquent и не прикасаться к нему, как к чумному, мне кажется - это стрелять в ногу.

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

#18 Re: Laravel 4 » Laravel 4 и Twitter bootstrap » 03.11.2014 16:06:12

Народ, а что вы такое ужасное делаете ? Зачем "post-install-cmd" и прочее ? Качаете архив с http://getbootstrap.com, распаковываете в public/bootstrap , в шаблоне подключаете оттуда css и js, как сказано в мануале.

#19 Re: Laravel 4 » Хранение JSON строк в БД. Обсуждение » 28.10.2014 15:43:57

В принципе, если ожидается ОЧЕНЬ большой траф, то подобная схема денормализации базы оправдана.

#20 Re: Laravel 4 » Android and Laravel » 28.10.2014 08:42:01

Я не специалист в андроиде, надо найти, где находится этот файл (lighttpd.conf) и соответственно отредактировать, добавив свой домен.

#21 Re: Laravel 4 » Комментарии к записи » 28.10.2014 07:33:01

Да, и если этот метод называется author в запросе добавляем, если я не ошибаюсь, ->with("lastcomments.author") . Попробуй.

#22 Re: Laravel 4 » Комментарии к записи » 27.10.2014 20:18:36

Делаем в модели Post следующую реляцию:

public function lastcomments()
{
	return $this->hasMany('Comment')->orderBy('created_at','DESC')->limit(3);
}

И в запросе постов юзаем ->with('lastcomments')
Например, $posts = Post::where("user_id", $user_id)->where("is_draft", 0)->with("lastcomments")->get();
В итоге тут будет два запроса - один вынет все посты с заданным условием, второй - все 3 последних комментария у полученных постов. В $post->lastcomments будет коллекция из 3х последних комментариев у поста.

#23 Re: Laravel 4 » Комментарии к записи » 27.10.2014 16:54:08

А в чем проблема ? В терминах sql вышеописанное записывается как "ORDER BY created_at DESC LIMIT 3" . Теперь берется документация и пишется scope для модели в терминах ларавеловского query builder.

#24 Re: Laravel 4 » Android and Laravel » 22.10.2014 08:10:28

в bitserver в качестве веб-сервера стоит lighttpd, надо ему объяснить, как обрабатывать урлы в laravel
https://github.com/daylerees/laravel-we … httpd.conf

#25 Re: Общий раздел » Как устанавливать пакеты » 20.10.2014 12:46:35

Ну как, не все. Еще надо добавить 'Barryvdh\Elfinder\ElfinderServiceProvider' в app/config/app.php . В инструкции, собственно, все написано.

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