Laravel по-русски

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

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

#1 Re: Laravel 3 » IDE для laravel 4 » 20.03.2013 17:28:43

Ну phpDesigner под линуха нет, а у меня именно минт)
Прога хорошая, мне тоже понравилась. И ftp хороший, можно весь проект не заливать, а напрямую работать, это вообще суперфишка)

#2 Laravel 3 » Непонятный момент в файле blade.php » 17.02.2013 01:49:32

amberlex
Ответов: 1

В файле /laravel/blade.php строки 100-103

/**
 * Determine if a view is "expired" and needs to be re-compiled.
 *
 * @param  string  $view
 * @param  string  $path
 * @return bool
 */
public static function expired($view, $path)
{
	return filemtime($path) > filemtime(static::compiled($path));
}

И где используется $view?
В строке 61 вызывается Blade::expired($view->view, $view->path)
Не очень я понял логику...

#3 Re: Laravel 3 » Обработка 404 » 16.02.2013 15:16:29

Про composer не знал. Сделал так. Для этого случая работает.
Дело в том, что я все делал не через return View::make('home'); а через $this->layout->nest('content', 'home'); и в layouts у меня {{ $content }}
И как в composer указать breadcrumbs, assets если они для каждого экшена свои в основном и там же определяются.

#4 Re: Laravel 3 » Обработка 404 » 16.02.2013 06:36:15

Спасибо, действительно, я его зарегистрировал, а потом думаю как сделать, что бы не вызывался.
Не привыкну никак к подходу в Laravel (лучше тогда роут убрать, который я написал для него)
Не думал, что Controller::call

class Response extends \Laravel\Response
{
	public static function error($code, $data = array())
	{
		return Controller::call('error@index', array($code, $data));
	}
}

сработает без роута.

> зачем он тебе, если он не вызывается из браузера?
Я строю приложение примерно так:
class Frontend_Controller extends Base_Controller
Все остальные контроллеры для фронтенда наследуют Frontend_Controller
В Frontend_Controller action before() строятся "Главное меню", "Каталог товаров" и присваиваются переменным шаблона, которые обычно всегда присутствуют на сайте.
При вызове Response::error('404') вызывается Error_Controller extends Frontend_Controller, там уже есть этии переменные и я могу использовать нужный view и отобразить их там. Но вот со строки браузера его запускать как раз не нужно.
Примерно так. Если интересно, могу потом выложить полное решение структуры приложения.
р.s. Хотя, может лучше выдавать более "легкую" страницу 404? И так и так встречал.

#5 Re: Laravel 3 » Обработка 404 » 15.02.2013 21:44:21

Удалил из алиас, вот так работает

class Response extends \Laravel\Response
{
	public static function error($code, $data = array())
	{
		return Controller::call('error@index', array($code, $data));
	}
}

Error_Controller

public function action_index($code, $data = array())
{
	// тут готовим какие-то данные

	return new Response(View::make('error.'.$code, $data), $code);
}

Вот только есть ли возможность узнать как был вызван контроллер (запрос) чтобы нельзя было из строки браузера вызвать?

#6 Re: Laravel 3 » Обработка 404 » 15.02.2013 18:33:44

Это я знаю: Response::error(404);
Как мне это заменть на свой обработчик?
Я так понимаю, этот код в /laravel/response.php

public static function error($code, $data = array())
{
	return new static(View::make('error.'.$code, $data), $code);
}

Сделал в /libraries/Responce.php

class Response extends \Laravel\Response
{
	public static function error($code, $data = array())
	{
		return new static(View::make('error.'.$code, $data), $code);
	}
}

Ну он не перекрывает первый
В общем чтобы при вызове Response::error(404); направлялся на мой роут и срабатывал мой контроллер с view и ответом 404

#7 Laravel 3 » Обработка 404 » 15.02.2013 16:20:41

amberlex
Ответов: 15

Что-то я так и не понял, как сделать 404 нормальную?
Написать контроллер, взять статус ответа и выдать шаблон, чтоб она на сайте показывалась, а не отдельно шаблоном, как-то так

#8 Re: Laravel 3 » Связь many-to-one » 13.02.2013 15:52:57

Да, так лучше будет, но после коханы как-то недоделано или не так изящно кажется все)
Интересно почему не срабатывает "магическое" как для $category->posts
Нужно наверное посмотреть как это работает

#9 Re: Laravel 3 » Связь many-to-one » 13.02.2013 15:29:15

Так в том то и дело, зачем мне такая связь, если проще сделать Category::where('id', '=', $post->category_id)
Весь смысл теряется тогда.
А в таком случае как раз нормально было бы $post->category->title
Э-э-х (

#10 Re: Laravel 3 » Связь many-to-one » 13.02.2013 10:42:34

Я это все читал и пробовал, только там отношение has_one
В случае one-to-many

// Тут нормально:
$category = Category::find(1);

// Это работает (магич св-во):
foreach($category->posts as $post)
	echo $post->title . '<br>';

// и это работает
foreach($category->posts()->get() as $post)
	echo $post->title . '<br>';

Делал по аналогии и смотрел ошибку, dd или получаемый запрос (если доходило до запроса)
$post->category->title - не сработало
$post->category()->title - не сработало
$post->category->title - не сработало
$post->category()->first()->title - СРАБОТАЛО
При чем потребовалось явно указать внешний ключ return $this->belongs_to('Category', 'category_id');

В Kohana сработает echo $post->category->title без лишних движений (это можно даже не передавать в шаблон, а сделать там)
Тут получается я выполняю почти обычный запрос и как-то выполнять это в шаблоне $post->category()->first()->title не очень правильно.

Зато в случае с категориями в шаблоне нормально выйдет (нужно передать только $category)

<h1>{{ $category->title }}</h1>
{{ $category->description }}

@foreach ($category->posts as $post)
	<h2>{{ HTML::link_to_route('post', $post->title, array($post->slug)) }}</h2>
	{{ $post->short }}
@endforeach

#11 Laravel 3 » Связь many-to-one » 13.02.2013 01:00:13

amberlex
Ответов: 7

Есть типа такие 2 таблицы

class Category extends Eloquent 
{
    public function posts()
    {
        return $this->has_many('Post');
    }
}

class Post extends Eloquent 
{
    public function category()
    {
        return $this->belongs_to('Category');
    }
}

Запись $post = Post::find(1);
А как получить категорию поста я так и не понял
$post->category->title
Выдает Trying to get property of non-object

#12 Laravel 3 » Как определить текущие controller и action? » 07.02.2013 19:04:07

amberlex
Ответов: 1

В общем я не нашел метода, который это определяет. Порылся в папке laravel и сделал так:

class Base_Controller extends Controller
{
	protected $curr_controller; // Текущий controller
	protected $curr_action;     // Текущий action

	/**
	 * Before action
	 */
	public function before()
	{
		$controllers = explode('.', Request::route()->controller);

		$this->curr_controller = end($controllers);
		$this->curr_action     = Request::route()->controller_action;
	}
}

Еели контроллер в папке типа такого

class Frontend_Home_Controller extends Base_Controller

то

Request::route()->controller

выдает 'frontend.home', поэтому explode
Например это нужно для подсветки какого-то пункта меню.
Как вы определяете текущие? Может я че-то пропустил?)

#13 Re: Laravel 4 » Первая бета Laravel 4 » 03.02.2013 21:54:45

Спасибо больше за ответ.
Дело в том, что я использую Kohana. Думаю его хватит для проектов любой сложности, тем более в нем можно буквально несколькими строками подключить тот же зенд или симфони .
Тут увидел laravel - фреймворк понравился, код похож и понятен. Мне тоже нравится то, что "любой кусок можно легко найти, открыть, понять" И тут такие новости. Думал начинать с новой версии, а оказывается, как вы выразились - фреймворк пытается стать "промышленным" и монструозным. Я тоже так понял. Для этого есть уже довольно стабильные фреймы, сообщества и выходит смысла нет особого да и не известно, чем это развитие еще закончится. Да и в проектах использовать сырой 4 laravel не стану.
В Kohana тоже версии особо не совместимые. Версию поменяли - уже кто-то модуль и не обновляет, потому как задолбался наверное поддерживать) Каждый сидит со своими наработками. Да и времени нет обычно привести их в полноценный модуль и выложить на гит.
Например, для того же twitter bootstrap.
- У laravel есть bootstrapper http://bundles.laravel.com/bundle/bootstrapper
- В Yii мощный yiibooster http://yii-booster.clevertech.biz/
Для Kohana я не видел, хотя для админки это в самый раз. Я чтоб долго не думать начал с Laravel для Kohana переделывать)
В общем у Kohana туго с модулями, Laravel c бандлами как-то намного живее выглядит.
За Laravel 4 тоже браться не буду уже. Лучше уж 3 изучать.

#14 Re: Laravel 4 » Первая бета Laravel 4 » 03.02.2013 15:03:11

Я так понимаю 3-ю ветку уже развивать не будут?
Смотрю в 4 много компонентов Симфони, даже не знаю, стоит ли изучать.
Вся красота была в легковесности и лаконичности, а тут выходит уже не так.
На компонентах Симфони есть Silex да и сам Симфони накрайняк.
Не знаю стоит ли тогда осваивать 4 и что вообще по этому поводу кто думает?

#15 Re: Laravel 3 » Настройки и профили » 21.01.2013 19:11:09

Спасибо
Нужно почаще в английскую доку заглядывать)

#16 Laravel 3 » Настройки и профили » 21.01.2013 15:05:07

amberlex
Ответов: 2

Че-то не получается:
Если профиль определён настройки загружаются в два этапа:
    application/config/*.php
    application/config/PROFILE/*.php — совпадающие настройки перекрывают предыдущие

В корне .htaccess
#SetEnv LARAVEL_ENV local
SetEnv LARAVEL_ENV production

Создал папки для настроек local и production

В config/local/application.php             - 'profiler' => true,
В config/production/application.php   - 'profiler' => false,

из config/application.php строку 'profiler' => false, убрал вообще

Когда в .htaccess меняю  local на production все равно присутствует profiler
Что я не так делаю?

#17 Re: Laravel 3 » Как сделать роут для http://mysite/any-slug » 21.01.2013 12:37:35

Странно сработал этот роут
Route::get('(:any)', array('uses'=>'static@index'));
Хотя я его писал ранее почти самый первый раз, когда пробовал. Может где-то закешировало.

#18 Re: Laravel 3 » Как сделать роут для http://mysite/any-slug » 20.01.2013 22:39:39

В общем элементарную весчь я так и не понял как сделать. Как выставить контроллер или роут по умолчанию
И как вообще получить информацию отладки. Поставил 'log' => true, - ничего не пишет в лог
Выдает 404 - это классно, а как посмотреть в чем проблема, я понимаю что роут не срабатывает. 404 - это для пользователя
Да и вообще интересно, на одном и том же адресе http://mysite/xxx выдает 404 -
раз показывает - We need a map.
другой - We took a wrong turn.
третий - I think we're lost.
как это так?)

#19 Re: Laravel 3 » Как сделать роут для http://mysite/any-slug » 20.01.2013 15:48:14

Это я читал (URL не должен начинаться со слэша)
Так а что делать?
Как-то выходит столько всего можно и так и так, а каков прицип - не понятно.

#20 Laravel 3 » Как сделать роут для http://mysite/any-slug » 20.01.2013 11:58:18

amberlex
Ответов: 7

Почему не работает такой роут?

Route::get('/(:all)', array('uses'=>'static@index'));
class Static_Controller extends Base_Controller {

	public function action_index($slug)
	{
		return "Static page. Slug = " . $slug;
	}

}

Такой работает, но тогда в пути будет присутствовать static

Route::get('static/(:all)', array('uses'=>'static@index'));

Т.е. на сайте может быть много обычных страниц, которые будут доступны по адресам
http://mysite/any-slug-1
http://mysite/any-slug-2
...
http://mysite/any-slug-n

#21 Re: Laravel 3 » Короткиe URL » 09.01.2013 20:05:40

Я че и заинтересовался, почему так мудрено в Laravel. В CakePHP тоже так сделано с двумя htaccess-ми, но там уже в корне есть htacces.
В Kohana достаточно вынести application, modules и system за корень и указать в index.php к ним пути.

#22 Re: Laravel 3 » Короткиe URL » 09.01.2013 00:00:49

Скажите пожалуйста, а в чем изюминка такого подхода, зачем так сделали?
Главное из коробки всегда нужно настраивать будет.
Т.е. я настроил, все работает и все адреса сайта будут доступны с public и без выходит
http://laravel.dev/docs
http://laravel.dev/public/docs
И так каждый хостер со своим приколом, еще с этим морочиться)

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