25 рд▓рд╡рд░рд╡реЗрд▓ рдЯрд┐рдкреНрд╕ рдФрд░ рдЯреНрд░рд┐рдХреНрд╕

рдПрдХ рд╕рдордп рдерд╛, рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдЬрдм PHP рдФрд░ рдЙрд╕рдХреЗ рд╕рдореБрджрд╛рдп рдиреЗ рдЗрд╕рд╕реЗ рдирдлрд░рдд рдХреАред рдореБрдЦреНрдп рдордЬрд╛рдХ рдпрд╣ рдерд╛ рдХрд┐ рдкреАрдПрдЪрдкреА рдХрд┐рддрдирд╛ рднрдпрд╛рдирдХ рд╣реИред



рд╣рд╛рдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдореБрджрд╛рдп рдФрд░ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдЕрдиреНрдп рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реНрддрд░ рд╕реЗ рдиреАрдЪреЗ рдереЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ PHP рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЧрдВрджреЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдереАрдо рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╣рдирд╛ рдерд╛ред



рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдЪреАрдЬреЗрдВ рдмрджрд▓рдиреЗ рд▓рдЧреАрдВ - рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдкрд░реНрдпрд╛рдкреНрддред рдЬреИрд╕реЗ рдХрд┐ рдЬрдм рдЪреБрдбрд╝реИрд▓ рдмрд░реНрддрди рдХреЛ рд╣рд┐рд▓рд╛ рд░рд╣реА рдереА, рдЕрднрд┐рдирд╡ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдХрд╣реАрдВ рд╕реЗ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдИрдВред рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдереА: PHP рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ (рдЬреИрд╕реЗ рдХрд┐ рд░реВрдмреА рдХреЗ рд▓рд┐рдП рдмреБрдВрдбрд▓рд░ рдпрд╛ Node.js рдХреЗ рд▓рд┐рдП NPM)ред рдЕрддреАрдд рдореЗрдВ, PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ PEAR (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдбрд░рд╛рд╡рдирд╛ рд╕рдкрдирд╛ рдерд╛) рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдм, рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╡реЗ рдмрд╕ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рд╣реИ, рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдЗрд╕рдореЗрдВ рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред



PHP рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рднреАрдбрд╝-рднрд╛рдбрд╝ рд╡рд╛рд▓реА рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдЬреИрд╕реЗ рд╣реА CodeIgniter рдиреЗ рднрд╛рдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЯреЗрд▓рд░ рдУрдЯрд╡реЗрд▓ рдХрд╛ рд▓рд╛рд░рд╡реЗрд▓ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдорд╛рдЬ рдХрд╛ рдкреНрд░рд┐рдп рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЦ рд╕реЗ рдЙрднрд░рд╛ред рдРрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде, рд▓рд╛рд░рд╡реЗрд▓ рдФрд░ рдкреАрдПрдЪрдкреА рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдордЬреЗрджрд╛рд░ рдерд╛! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдврд╛рдВрдЪреЗ рдХреЗ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдиреЗ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЕрдВрдд рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрд╛ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЪреАрдЬреЗрдВ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЧрдИрдВред



рдЫрд╡рд┐



рдорд╛рдЗрдЧреНрд░реЗрд╢рди (рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг) рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд╣реЛ рдЧрдпрд╛! рдХреИрд╕реЗ рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ? рдмреЗрд╢рдХ, рдПрд▓реЛрдХреНрд╡реЗрдВрдЯ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░реЗрдЧрд╛ред рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ? рдмреЗрд╢рдХ! рд░реВрдЯрд┐рдВрдЧ (рд░реВрдЯрд┐рдВрдЧ)? рд╣рд░ рддрд░рд╣ рд╕реЗ! рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП HTTP рдкрд░рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓рд╛рд░рд╡реЗрд▓ рдХрдИ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рд┐рдореНрдлрдиреА рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╡реНрдпрд╡рд╕рд╛рдп рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╣рд░ рдореМрдХрд╛ рд╣реИ рдХрд┐ рд▓рд╛рд░рд╡реЗрд▓ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ!



рдЫрд╡рд┐



рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, PHP рдЬреЗрдВрдЧ рдХреЗ рдПрдХ рдЦреЗрд▓ рдХреА рддрд░рд╣ рдерд╛ - рдЧрд┐рд░рдиреЗ рд╕реЗ рдПрдХ рдШрди - рдЕрдЪрд╛рдирдХ, рд▓рд╛рд░рд╡реЗрд▓ рдФрд░ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реБрд░рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдЖрдпрд╛ред рддреЛ рд╣рдо рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ, рдФрд░ рдЪрд▓реЛ рд╕рдм рдХреБрдЫ рдЦреЛрджрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИ!



1. рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдЕрдиреБрд░реЛрдз *



рд▓рд╛рд░рд╡реЗрд▓ PHP рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдПрд▓реЛрдХреЗрдВрдЯ рдСрд░реНрдбрд░ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдСрд░реНрдбрд░ рдЯреЗрдмрд▓ рд╣реИред

class Order extends Eloquent {}

      
      





, PHP. SQL. .

Order::all();

      
      





! , , . :

$orders = Order::orderBy('release_date', 'desc')->get();

      
      





, , . , , .

$order = new Order;
$order->title = 'Xbox One';
$order->save();

      
      





! Laravel, , , .



* тАФ Eloquent тАФ Active Record Laravel, .



2. ()



Laravel , . Sinatra ? Laravel ,

Route::get('orders', function()
{
    return View::make('orders.index')
        ->with('orders', Order::all());
});

      
      





API, , . , Laravel .

Route::get('orders', 'OrdersController@index');

      
      





! , Laravel ? тАФ , .



3.



, ? , . Laravel? , , Eloquent .

class Task extends Eloquent {
    public function user()
    {
        return $this->belongsTo('User');
    }
}

class User extends Eloquent {
    public function tasks()
    {
        return $this->hasMany('Task');
    }
}

      
      





! id = 1. 2 .

$user = User::find(1);
$tasks = $user->tasks;

      
      





, , , , .

$task = Task::find(1);
$user = $task->user;

      
      







4.



, . тАФ - . , .

{{ Form::model($order) }}
    <div>
        {{ Form::label('title', 'Title:') }}
        {{ Form::text('title') }}
    </div>
 
    <div>
        {{ Form::label('description', 'Description:') }}
        {{ Form::textarea('description') }}
    </div>
{{ Form::close() }}

      
      





Order, . !



5.



, , . , Laravel , .



, , .

$questions = Question::remember(60)->get();

      
      





! , , , .



6.



, . тАФ , .

, Laravel (), .

View::composer('layouts.nav', function($view)
{
    $view->with('tags', ['tag1', 'tag2']);
});

      
      





, , layouts/nav.blade.php, ( ) $tags.



7.



Laravel . , , , , Auth::attempt(). , users, .

$user = [
    'email' => 'email',
    'password' => 'password'
];
 
if (Auth::attempt($user))
{
    //  
}

      
      





, /logout URI?

Route::get('logout', function()
{
    Auth::logout();
     
    return Redirect::home();
});

      
      







8.



RESTfully Laravel ! , Route::resource() .

Route::resource('orders', 'OrdersController');

      
      





8 .







, OrdersController :



php artisan controller:make OrdersController







, , . , /orders index, /orders/create тАФ create .



, RESTful API.



9. Blade



, PHP , . , . Laravel Blade, . .blade.php, . :

@if ($orders->count())
    <ul>
        @foreach($orders as $order)
            <li>{{ $order->title }}</li>
        @endforeach
    </ul>
@endif

      
      







10.



Laravel Composer, PHPUnit тАЬ тАЭ. phpunit , .



Laravel



, 200.

public function test_home_page()
{
    $this->call('GET', '/');
    $this->assertResponseOk();
}

      
      





, , , , , .

public function test_contact_page_redirects_user_to_home_page()
{
    $postData = [
        'name' => 'Joe Example',
        'email' => 'email-address',
        'message' => 'I love your website'
    ];
 
    $this->call('POST', '/contact', $postData);
 
    $this->assertRedirectedToRoute('home', null, ['flash_message']);
}

      
      







11. тАЬ тАЭ



Laravel 4.1, 2013, Artisan, SSH . SSH :

SSH::into('production')->run([
    'cd /var/www',
    'git pull origin master'
]);

      
      





run() , Laravel ! , Artisan , php artisan command:make DeployCommand



fire() .



12.



Laravel Observer, . , , illuminate.query, .



.

Event::listen('user.signUp', function()
{
    //  ,  ,
    //   
});

      
      





Laravel, , , . Laravel , IoC .

Event::listen('user.signUp', 'UserEventHandler');

      
      







13.



image



, , . , routes.php (, ).



Laravel routes, , , .

php artisan routes

      
      







14.



, . , . , , , . , .



, , ?

Queue::push('SignUpService', compact('user'));

      
      





, , , Laravel Iron.io тАЬpushтАЭ . , , . php artisan queue:subscribe, Iron.io , . .

image



15.



, Laravel ! Validator . make, Laravel .

$order = [
    'title' => 'Wii U',
    'description' => 'Game console from Nintendo'
];
 
$rules = [
    'title' => 'required',
    'description' => 'required'
];
 
$validator = Validator::make($order, $rules);
 
if ($validator->fails())
{
    var_dump($validator->messages()); // validation errors array
}


      
      







16. Tinker



image



, Laravel , . tinker .



Tinker Boris.



$ php artisan tinker







> $order = Order::find(1);
> var_dump($order->toArray());
> array(...)

      
      







17.



, . , тАЬтАЭ , , , . , , php artisan migrate, .



users, :

php artisan migrate:make create_users_table







, , . , php artisan migrate . ! ? ! php artisan migrate:rollback.



.

public function up()
{
    Schema::create('faqs', function(Blueprint $table) {
        $table->integer('id', true);
        $table->text('question');
        $table->text('answer');
        $table->timestamps();
    });
}
 
public function down()
{
    Schema::drop('faqs');
}

      
      





, drop() up(). , тАЬтАЭ . , , SQL?



18.



Laravel . , тАЬLaravel 4 GeneratorsтАЭ, . , , pivot .



. , :



php artisan generate:migration create_users_table --fields="username:string, password:string"

      
      







. .

Laravel 4 Generators Composer.



19.



, . , , .



, Laravel .

php artisan command:make MyCustomCommand







. , app/commands/MyCustomCommand.php, .

protected $name = 'command:name';
protected $description = 'Command description.';

      
      





, fire() . Artisan, app/start/artisan.php.

Artisan::add(new MyCustomCommand);

      
      





, , ! .



20.



Laravel . тАЬтАЭ , , , (Route::get(), Config::get(), ), .



тАЬ тАЭ IoC , тАЬтАЭ . :

Validator::shouldReceive('make')->once();

      
      





, shouldReceive . тАЬ тАЭ, Laravel Mockery. , , .



21.



, Laravel, , тАЬ тАЭ, . :

{{ Form::open() }}
    {{ Form::text('name') }}
    {{ Form::textarea('bio') }}
    {{ Form::selectYear('dob', date('Y') - 80, date('Y')) }}
{{ Form::close() }}

      
      





? Laravel !



22. IoC (Inverse of control)



Laravel IoC , , . , .



typehint , Laravel, PHP Reflection API, .

public function __construct(MyDependency $thing)
{
    $this->thing = $thing;
}

      
      





IoC , .

$myClass = App::make('MyClass');

      
      





, IoC . typehint , Laravel .



23.



. , тАФ ! , , . .



. dev API. .



, Laravel . bootstrap/start.php.



local , hostname .

$env = $app->detectEnvironment(array(

	'local' => array('your-machine-name'),

));

      
      





, . . , Laravel! detectEnvironment.

$env = $app->detectEnvironment(function()
{
    return getenv('ENV_NAME') ?: 'local';
});

      
      





, ( ), local.



24.



Laravel . app/config , , , . , API dev .

<?php // app/config/development/billing.php
 
return [
    'api_key' => 'your-development-mode-api-key'
];

      
      





. Config::get(тАШbilling.api_keyтАЩ)



Laravel , .



25.



, Laravel , . , , Laravel.



All Articles